The Envoy RBAC (Role-Based Access Control) filter contains a logic vulnerability in how it validates HTTP headers when multiple values are present for the same header name. Instead of validating each header value individually, Envoy concatenates all values into a single comma-separated string. This behavior allows attackers to bypass RBAC policies—specifically "Deny" rules—by sending duplicate headers, effectively obscuring the malicious value from exact-match mechanisms.
Consider an environment where an administrator wants to block external access to internal resources using a specific header flag.
The Envoy proxy is configured with a Deny rule to reject requests containing the header internal: true.
* Rule Type: Exact Match
* Target: internal header must not equal true.
Standard Request (Blocked):
internal: true"true".Exploit Request (Bypassed):
internal: true
internal: true
"true,true"."true,true" equal "true"? No.To verify this vulnerability:
internal: true).internal: true.
GET /restricted-resource HTTP/1.1
Host: example.com
internal: true
internal: true
Fix Header Validation Logic:
Modify the RBAC filter to validate each header value instance individually. Avoid relying on the concatenated string output of getAllOfHeaderAsString() for security-critical matching unless the matcher is explicitly designed to parse comma-separated lists.
** Examine the DENY role to use a Regex style fix.
Credit: Dor Konis
{
"github_reviewed_at": "2026-03-10T18:30:42Z",
"nvd_published_at": "2026-03-10T20:16:35Z",
"severity": "HIGH",
"cwe_ids": [
"CWE-20",
"CWE-863"
],
"github_reviewed": true
}