Skip to content

Incorrectly handling of URI '#fragment' element as part of the path element

High
lizan published GHSA-r222-74fw-jqr9 Aug 24, 2021

Package

No package listed

Affected versions

1.19.0, 1.18.3, 1.17.3, 1.16.4

Patched versions

1.19.1, 1.18.4, 1.17.4, 1.16.5

Description

CVSS score 8.6 (High), Vector: CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:N/A:N

Envoy incorrectly handled a URI '#fragment' element as part of the path element.

Envoy is configured with an RBAC filter for authorization or similar mechanism with an
explicit case of a final "/admin" path element, or is using a negative assertion with
final path element of "/admin". The client sends request to "/app1/admin#foo"

In Envoy prior to 1.18.0, or 1.18.0+ configured with path_normalization=false
Envoy treats fragment as a suffix of the query string when present, or as a suffix
of the path when query string is absent, so it evaluates the final path element
as "/admin#foo" and mismatches with the configured "/admin" path element

In Envoy 1.18.0+ configured with path_normalization=true
Envoy transforms this to /app1/admin%23foo and mismatches with the configured /admin prefix

The resulting URI is sent to the next server-agent with the offending "#foo" fragment which
violates RFC3986 or with the nonsensical "%23foo" text appended.

Impact

Escalation of Privileges when path based request authorization extensions.

Attack vector

A specifically constructed request with URI containing '#fragment' element delivered by an untrusted client in the presence of path based request authorization.

Patches

Envoy versions 1.19.1, 1.18.4, 1.17.4, 1.16.5 contain fixes that removes fragment from URI path in incoming requests.

Workarounds

None

Credits

Yangmin Zhu ymzhu@google.com

References

https://blog.envoyproxy.io
https://github.com/envoyproxy/envoy/releases

For more information

If you have any questions or comments about this advisory:

Open an issue in Envoy repo
Email us at envoy-security

Severity

High

CVE ID

CVE-2021-32779

Weaknesses

Credits