Summary
A security vulnerability in Envoy allows external clients to manipulate Envoy headers, potentially leading to unauthorized access or other malicious actions within the mesh.
This issue arises due to Envoy's default configuration of internal trust boundaries, which considers all RFC1918 private address ranges as internal.
Details
The default behavior for handling internal addresses in Envoy has been changed.
Previously, RFC1918 IP addresses were automatically considered internal, even if the internal_address_config
was empty.
The default configuration of Envoy will continue to trust internal addresses while in this release but it will not trust them by default in next release.
If you have tooling such as probes on your private network which need to be treated as trusted (e.g. changing arbitrary x-envoy
headers) please explicitly include those addresses or CIDR ranges into internal_address_config
.
The default behavior is controlled by the runtime guard envoy.reloadable_features.explicit_internal_address_config
, and it is
false by default. If you are good to un-trust all IPs, this can be turned on.
PoC
- With a default edge ingress Envoy configured.
$ curl -k -H "X-ENVOY-ORIGINAL-PATH: /foobar" https://bookinfo-bookinfo.apps.test.cluster.net/productpage
X-ENVOY-ORIGINAL-PATH
is trusted.
Impact:
Successful exploitation could allow attackers to bypass security controls, access sensitive data, or disrupt services within the mesh, like Istio.
Reporter
James Force
[email protected]
Mike Whale
Summary
A security vulnerability in Envoy allows external clients to manipulate Envoy headers, potentially leading to unauthorized access or other malicious actions within the mesh.
This issue arises due to Envoy's default configuration of internal trust boundaries, which considers all RFC1918 private address ranges as internal.
Details
The default behavior for handling internal addresses in Envoy has been changed.
Previously, RFC1918 IP addresses were automatically considered internal, even if the
internal_address_config
was empty.The default configuration of Envoy will continue to trust internal addresses while in this release but it will not trust them by default in next release.
If you have tooling such as probes on your private network which need to be treated as trusted (e.g. changing arbitrary
x-envoy
headers) please explicitly include those addresses or CIDR ranges intointernal_address_config
.The default behavior is controlled by the runtime guard
envoy.reloadable_features.explicit_internal_address_config
, and it isfalse by default. If you are good to un-trust all IPs, this can be turned on.
PoC
$ curl -k -H "X-ENVOY-ORIGINAL-PATH: /foobar" https://bookinfo-bookinfo.apps.test.cluster.net/productpage
X-ENVOY-ORIGINAL-PATH
is trusted.Impact:
Successful exploitation could allow attackers to bypass security controls, access sensitive data, or disrupt services within the mesh, like Istio.
Reporter
James Force
[email protected]
Mike Whale