{"id":"EUVD-2026-75584","revision":null,"records":[{"revision":"724a398d1c454cde847f56b3dd19cf34","observedAt":"2026-10-23T15:48:27.903+00:00","statement":{"source":"cve-program","id":"CVE-2026-88011","aliases":[],"title":"Traefik: ForwardAuth identity spoofing via dot-form header alias","description":"Traefik is an open source HTTP reverse proxy and load balancer. Prior to 2.11.56, and from 3.0.0 until 3.7.12, a client-supplied dot-form header such as X.Authenticated.User survives ForwardAuth replacement and underscoreHeadersStrategy because Go treats it as distinct from X-Authenticated-User while normalization-prone CGI, WSGI, PHP, and NGINX backends collapse both names. A backend can consequently consume the client value instead of the identity Traefik asserted, allowing identity spoofing for any header managed by Traefik. The aliasHeadersStrategy protection is disabled by default and must be configured as delete or reject. The mitigation is available in 2.11.56 and 3.7.12.","state":0,"publishedAt":"2026-09-10T15:31:55.215+00:00","modifiedAt":"2026-09-15T14:42:22.088+00:00","affected":[{"ecosystem":"Vendor product","name":"traefik","ranges":[],"versions":[],"rawVersionEvidence":"{\n                    \"vendor\": \"traefik\",\n                    \"product\": \"traefik\",\n                    \"versions\": [\n                        {\n                            \"version\": \"< 2.11.56\",\n                            \"status\": \"affected\"\n                        },\n                        {\n                            \"version\": \">= 3.0.0, < 3.7.12\",\n                            \"status\": \"affected\"\n                        }\n                    ]\n                }"}],"metrics":[{"system":"CVSS 4.0","vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:N/VC:N/VI:N/VA:N/SC:H/SI:H/SA:N","score":5.3,"severity":"MEDIUM"}],"references":["https://github.com/traefik/traefik/security/advisories/GHSA-rf44-j88r-hh8c","https://github.com/traefik/traefik/pull/13720","https://github.com/traefik/traefik/commit/0331801c72329e0eaeb850e53ccce87c57fbecf8","https://github.com/traefik/traefik/releases/tag/v2.11.56","https://github.com/traefik/traefik/releases/tag/v3.7.12"],"sourceUrl":"https://www.cve.org/CVERecord?id=CVE-2026-88011","license":"CVE Program Terms of Use","key":"cve-program:CVE-2026-88011","identifiers":["CVE-2026-88011"]},"retained":false,"historicalAffected":[]},{"revision":"e29838ce65674e2ab19fc6b34dbcfa8d","observedAt":"2026-10-23T15:48:27.903+00:00","statement":{"source":"cve-program","id":"CVE-2026-88879","aliases":[],"title":"Traefik before v2.11.56 Identity Spoofing via Header Alias","description":"Traefik is an HTTP reverse proxy and load balancer. In Traefik v1.x, v2.x through v2.11.55, and v3.0.0 through v3.7.11, header names are canonicalized only on dashes, so X-Auth-User, X_Auth_User and X.Auth.User are treated as three distinct headers by Traefik, while backends that derive variable names from header names (CGI, WSGI, PHP, NGINX and others) collapse them into a single variable. A client can therefore smuggle a dot-form alias of a header that Traefik manages past the middleware managing it — for example supplying X.Authenticated.User alongside the canonical X-Authenticated-User written by the ForwardAuth middleware — causing such a backend to read the client-supplied value instead of the identity Traefik asserted. In the tested configuration (PHP 8.2 built-in SAPI over an HTTP/1 backend path), Go's lexical header ordering makes the attacker-supplied value win deterministically, so a client that ForwardAuth admits as a low-privilege identity can be treated by the backend as a different user or role. Any header Traefik sets is affected, not only ForwardAuth's. This is an incomplete fix for GHSA-x677-9fxg-v5c5, which blocked only the underscore form. Fixed in v2.11.56 and v3.7.12, which add the aliasHeadersStrategy entry-point option; because it defaults to 'keep' for backwards compatibility, it must be explicitly set to 'delete' or 'reject' for the fix to take effect. Unmaintained release lines will not receive a patch.","state":0,"publishedAt":"2026-09-10T13:05:30.872+00:00","modifiedAt":"2026-10-08T15:25:59.454+00:00","affected":[{"ecosystem":"Vendor product","name":"traefik","ranges":[],"versions":[],"rawVersionEvidence":"{\n                    \"vendor\": \"traefik\",\n                    \"product\": \"traefik\",\n                    \"defaultStatus\": \"unaffected\",\n                    \"packageURL\": \"pkg:golang/github.com/traefik/traefik/v2\",\n                    \"versions\": [\n                        {\n                            \"version\": \"0\",\n                            \"status\": \"affected\",\n                            \"versionType\": \"semver\",\n                            \"lessThan\": \"2.11.56\"\n                        },\n                        {\n                            \"version\": \"2.11.56\",\n                            \"status\": \"unaffected\",\n                            \"versionType\": \"semver\"\n                        }\n                    ]\n                }"},{"ecosystem":"Vendor product","name":"traefik","ranges":[],"versions":[],"rawVersionEvidence":"{\n                    \"vendor\": \"traefik\",\n                    \"product\": \"traefik\",\n                    \"defaultStatus\": \"unaffected\",\n                    \"packageURL\": \"pkg:golang/github.com/traefik/traefik/v3\",\n                    \"versions\": [\n                        {\n                            \"version\": \"3.0.0\",\n                            \"status\": \"affected\",\n                            \"versionType\": \"semver\",\n                            \"lessThanOrEqual\": \"3.7.13\"\n                        }\n                    ]\n                }"}],"metrics":[{"system":"CVSS 4.0","vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:N/VC:N/VI:N/VA:N/SC:H/SI:H/SA:N","score":5.3,"severity":"MEDIUM"}],"references":["https://github.com/traefik/traefik/security/advisories/GHSA-rf44-j88r-hh8c","https://www.vulncheck.com/advisories/traefik-before-2.11.56-identity-spoofing-via-header-alias"],"sourceUrl":"https://www.cve.org/CVERecord?id=CVE-2026-88879","license":"CVE Program Terms of Use","key":"cve-program:CVE-2026-88879","identifiers":["CVE-2026-88879"]},"retained":false,"historicalAffected":[]},{"revision":"a1dc33c1a0604b16a0ccd8549cd49d16","observedAt":"2026-11-09T16:08:30.03+00:00","statement":{"source":"euvd","id":"EUVD-2026-75429","aliases":["CVE-2026-88879","GHSA-cwr6-3wm2-9xhw"],"title":"Traefik is an HTTP reverse proxy and load balancer. In Traefik v1.x, v2.x through v2.11.55, and v3.0.0 through v3.7.11, header names are canonicalized only on dashes, so X-Auth-User, X_Auth_User and X.Auth.User are treated as three distinct…","description":"Traefik is an HTTP reverse proxy and load balancer. In Traefik v1.x, v2.x through v2.11.55, and v3.0.0 through v3.7.11, header names are canonicalized only on dashes, so X-Auth-User, X_Auth_User and X.Auth.User are treated as three distinct headers by Traefik, while backends that derive variable names from header names (CGI, WSGI, PHP, NGINX and others) collapse them into a single variable. A client can therefore smuggle a dot-form alias of a header that Traefik manages past the middleware managing it — for example supplying X.Authenticated.User alongside the canonical X-Authenticated-User written by the ForwardAuth middleware — causing such a backend to read the client-supplied value instead of the identity Traefik asserted. In the tested configuration (PHP 8.2 built-in SAPI over an HTTP/1 backend path), Go's lexical header ordering makes the attacker-supplied value win deterministically, so a client that ForwardAuth admits as a low-privilege identity can be treated by the backend as a different user or role. Any header Traefik sets is affected, not only ForwardAuth's. This is an incomplete fix for GHSA-x677-9fxg-v5c5, which blocked only the underscore form. Fixed in v2.11.56 and v3.7.12, which add the aliasHeadersStrategy entry-point option; because it defaults to 'keep' for backwards compatibility, it must be explicitly set to 'delete' or 'reject' for the fix to take effect. Unmaintained release lines will not receive a patch.","state":0,"publishedAt":null,"modifiedAt":null,"affected":[],"metrics":[{"system":"EUVD CVSS 4.0","vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:N/VC:N/VI:N/VA:N/SC:H/SI:H/SA:N","score":5.3,"severity":null}],"references":["https://github.com/traefik/traefik/security/advisories/GHSA-rf44-j88r-hh8c","https://www.vulncheck.com/advisories/traefik-before-2.11.56-identity-spoofing-via-header-alias"],"sourceUrl":"https://euvd.enisa.europa.eu/vulnerability/EUVD-2026-75429","license":"ENISA EUVD · source terms and attribution apply","enrichment":{"sourceStatus":null,"weaknesses":[],"productCriteria":[],"sourceDates":{"datePublished":"Sep 10, 2026, 1:05:30 PM","dateUpdated":"Oct 8, 2026, 3:25:59 PM"},"relatedAdvisories":[{"id":"RHSA-2026:90321","title":"Red Hat Security Advisory: Red Hat OpenShift Dev Spaces 3.31.0 Release.","vulnerabilityIds":["CVE-2023-54404","CVE-2025-62718","CVE-2026-8643","CVE-2026-9496","CVE-2026-12185","CVE-2026-13697","CVE-2026-14682","CVE-2026-15076","CVE-2026-16308","CVE-2026-17106","CVE-2026-18427","CVE-2026-19203","CVE-2026-19534","CVE-2026-39820","CVE-2026-41178","CVE-2026-41707","CVE-2026-42499","CVE-2026-42502","CVE-2026-45416","CVE-2026-47884","CVE-2026-47886","CVE-2026-47888","CVE-2026-47890","CVE-2026-47892","CVE-2026-50010","CVE-2026-55831","CVE-2026-55833","CVE-2026-55851","CVE-2026-56745","CVE-2026-56746","CVE-2026-56819","CVE-2026-56852","CVE-2026-56854","CVE-2026-58062","CVE-2026-59280","CVE-2026-59282","CVE-2026-59283","CVE-2026-59296","CVE-2026-59313","CVE-2026-59323","CVE-2026-59651","CVE-2026-59887","CVE-2026-59899","CVE-2026-59901","CVE-2026-62243","CVE-2026-64607","CVE-2026-67213","CVE-2026-67312","CVE-2026-67313","CVE-2026-67314","CVE-2026-67320","CVE-2026-67321","CVE-2026-68494","CVE-2026-68497","CVE-2026-69152","CVE-2026-69192","CVE-2026-71290","CVE-2026-71324","CVE-2026-71325","CVE-2026-71327","CVE-2026-73500","CVE-2026-73508","CVE-2026-74835","CVE-2026-75838","CVE-2026-75899","CVE-2026-75931","CVE-2026-76169","CVE-2026-81521","CVE-2026-82417","CVE-2026-82562","CVE-2026-84292","CVE-2026-84375","CVE-2026-84394","CVE-2026-84428","CVE-2026-84445","CVE-2026-84469","CVE-2026-84504","CVE-2026-84961","CVE-2026-85062","CVE-2026-85124","CVE-2026-85152","CVE-2026-85595","CVE-2026-85597","CVE-2026-86063","CVE-2026-87743","CVE-2026-88004","CVE-2026-88007","CVE-2026-88008","CVE-2026-88009","CVE-2026-88011","CVE-2026-88012","CVE-2026-88031","CVE-2026-88878","CVE-2026-88879","CVE-2026-90711","CVE-2026-93749","CVE-2026-100655","CVE-2026-100656","CVE-2026-100666","CVE-2026-101916","CVE-2026-102925","CVE-2026-102930","CVE-2026-103435","CVE-2026-109618","CVE-2026-109619"]}],"note":"EUVD source date text has no stated timezone and is retained without inventing a UTC instant. Related bulletin membership is not an alias, common cause or applicability claim. A missing vector with a zero score is treated as unrated. Complete vendor/product and underlying source evidence remains in the original JSON."},"key":"euvd:EUVD-2026-75429","identifiers":["EUVD-2026-75429","CVE-2026-88879","GHSA-cwr6-3wm2-9xhw"]},"retained":false,"historicalAffected":[]},{"revision":"e430706cf2cc4c609887f2c707b18026","observedAt":"2026-11-09T16:08:03.226+00:00","statement":{"source":"euvd","id":"EUVD-2026-75584","aliases":["CVE-2026-88011","GHSA-rf44-j88r-hh8c"],"title":"Traefik is an open source HTTP reverse proxy and load balancer. Prior to 2.11.56, and from 3.0.0 until 3.7.12, a client-supplied dot-form header such as X.Authenticated.User survives ForwardAuth replacement and underscoreHeadersStrategy bec…","description":"Traefik is an open source HTTP reverse proxy and load balancer. Prior to 2.11.56, and from 3.0.0 until 3.7.12, a client-supplied dot-form header such as X.Authenticated.User survives ForwardAuth replacement and underscoreHeadersStrategy because Go treats it as distinct from X-Authenticated-User while normalization-prone CGI, WSGI, PHP, and NGINX backends collapse both names. A backend can consequently consume the client value instead of the identity Traefik asserted, allowing identity spoofing for any header managed by Traefik. The aliasHeadersStrategy protection is disabled by default and must be configured as delete or reject. The mitigation is available in 2.11.56 and 3.7.12.","state":0,"publishedAt":null,"modifiedAt":null,"affected":[],"metrics":[{"system":"EUVD CVSS 4.0","vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:N/VC:N/VI:N/VA:N/SC:H/SI:H/SA:N","score":5.3,"severity":null}],"references":["https://github.com/traefik/traefik/security/advisories/GHSA-rf44-j88r-hh8c","https://github.com/traefik/traefik/pull/13720","https://github.com/traefik/traefik/commit/0331801c72329e0eaeb850e53ccce87c57fbecf8","https://github.com/traefik/traefik/releases/tag/v2.11.56","https://github.com/traefik/traefik/releases/tag/v3.7.12"],"sourceUrl":"https://euvd.enisa.europa.eu/vulnerability/EUVD-2026-75584","license":"ENISA EUVD · source terms and attribution apply","enrichment":{"sourceStatus":null,"weaknesses":[],"productCriteria":[],"sourceDates":{"datePublished":"Sep 10, 2026, 3:31:55 PM","dateUpdated":"Sep 15, 2026, 2:42:22 PM"},"relatedAdvisories":[{"id":"RHSA-2026:90321","title":"Red Hat Security Advisory: Red Hat OpenShift Dev Spaces 3.31.0 Release.","vulnerabilityIds":["CVE-2023-54404","CVE-2025-62718","CVE-2026-8643","CVE-2026-9496","CVE-2026-12185","CVE-2026-13697","CVE-2026-14682","CVE-2026-15076","CVE-2026-16308","CVE-2026-17106","CVE-2026-18427","CVE-2026-19203","CVE-2026-19534","CVE-2026-39820","CVE-2026-41178","CVE-2026-41707","CVE-2026-42499","CVE-2026-42502","CVE-2026-45416","CVE-2026-47884","CVE-2026-47886","CVE-2026-47888","CVE-2026-47890","CVE-2026-47892","CVE-2026-50010","CVE-2026-55831","CVE-2026-55833","CVE-2026-55851","CVE-2026-56745","CVE-2026-56746","CVE-2026-56819","CVE-2026-56852","CVE-2026-56854","CVE-2026-58062","CVE-2026-59280","CVE-2026-59282","CVE-2026-59283","CVE-2026-59296","CVE-2026-59313","CVE-2026-59323","CVE-2026-59651","CVE-2026-59887","CVE-2026-59899","CVE-2026-59901","CVE-2026-62243","CVE-2026-64607","CVE-2026-67213","CVE-2026-67312","CVE-2026-67313","CVE-2026-67314","CVE-2026-67320","CVE-2026-67321","CVE-2026-68494","CVE-2026-68497","CVE-2026-69152","CVE-2026-69192","CVE-2026-71290","CVE-2026-71324","CVE-2026-71325","CVE-2026-71327","CVE-2026-73500","CVE-2026-73508","CVE-2026-74835","CVE-2026-75838","CVE-2026-75899","CVE-2026-75931","CVE-2026-76169","CVE-2026-81521","CVE-2026-82417","CVE-2026-82562","CVE-2026-84292","CVE-2026-84375","CVE-2026-84394","CVE-2026-84428","CVE-2026-84445","CVE-2026-84469","CVE-2026-84504","CVE-2026-84961","CVE-2026-85062","CVE-2026-85124","CVE-2026-85152","CVE-2026-85595","CVE-2026-85597","CVE-2026-86063","CVE-2026-87743","CVE-2026-88004","CVE-2026-88007","CVE-2026-88008","CVE-2026-88009","CVE-2026-88011","CVE-2026-88012","CVE-2026-88031","CVE-2026-88878","CVE-2026-88879","CVE-2026-90711","CVE-2026-93749","CVE-2026-100655","CVE-2026-100656","CVE-2026-100666","CVE-2026-101916","CVE-2026-102925","CVE-2026-102930","CVE-2026-103435","CVE-2026-109618","CVE-2026-109619"]}],"note":"EUVD source date text has no stated timezone and is retained without inventing a UTC instant. Related bulletin membership is not an alias, common cause or applicability claim. A missing vector with a zero score is treated as unrated. Complete vendor/product and underlying source evidence remains in the original JSON."},"key":"euvd:EUVD-2026-75584","identifiers":["EUVD-2026-75584","CVE-2026-88011","GHSA-rf44-j88r-hh8c"]},"retained":false,"historicalAffected":[]},{"revision":"dc95b4fdb9a243a3ac506839aa9cd192","observedAt":"2026-10-25T16:19:22.228+00:00","statement":{"source":"nvd","id":"CVE-2026-88011","aliases":[],"title":"Traefik is an open source HTTP reverse proxy and load balancer. Prior to 2.11.56, and from 3.0.0 until 3.7.12, a client-supplied dot-form header such as X.Authenticated.User survives ForwardAuth replacement and underscoreHeadersStrategy bec…","description":"Traefik is an open source HTTP reverse proxy and load balancer. Prior to 2.11.56, and from 3.0.0 until 3.7.12, a client-supplied dot-form header such as X.Authenticated.User survives ForwardAuth replacement and underscoreHeadersStrategy because Go treats it as distinct from X-Authenticated-User while normalization-prone CGI, WSGI, PHP, and NGINX backends collapse both names. A backend can consequently consume the client value instead of the identity Traefik asserted, allowing identity spoofing for any header managed by Traefik. The aliasHeadersStrategy protection is disabled by default and must be configured as delete or reject. The mitigation is available in 2.11.56 and 3.7.12.","state":0,"publishedAt":"2026-09-10T16:18:07.933+00:00","modifiedAt":"2026-09-15T15:17:24.163+00:00","affected":[],"metrics":[{"system":"CVSS 4.0 · security-advisories@github.com · Secondary","vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:N/VC:N/VI:N/VA:N/SC:H/SI:H/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X","score":5.3,"severity":"MEDIUM"},{"system":"CVSS 3.1 · nvd@nist.gov · Primary","vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N","score":8.1,"severity":"HIGH"}],"references":["https://github.com/traefik/traefik/commit/0331801c72329e0eaeb850e53ccce87c57fbecf8","https://github.com/traefik/traefik/pull/13720","https://github.com/traefik/traefik/releases/tag/v2.11.56","https://github.com/traefik/traefik/releases/tag/v3.7.12","https://github.com/traefik/traefik/security/advisories/GHSA-rf44-j88r-hh8c"],"sourceUrl":"https://nvd.nist.gov/vuln/detail/CVE-2026-88011","license":"NIST NVD usage terms; underlying source attribution retained","enrichment":{"sourceStatus":"Analyzed","weaknesses":["CWE-290"],"productCriteria":["cpe:2.3:a:traefik:traefik:*:*:*:*:*:*:*:*"],"sourceDates":{"published":"2026-09-10T16:18:07.933","lastModified":"2026-09-15T15:17:24.163"},"relatedAdvisories":[],"note":"NVD analysis and CPE criteria are source context, not proof that a package or your environment is affected. Complete affected data, logical configurations and SSVC are retained in the original JSON."},"key":"nvd:CVE-2026-88011","identifiers":["CVE-2026-88011"]},"retained":false,"historicalAffected":[]},{"revision":"14c12da8ef4d492bb37e229d32f34681","observedAt":"2026-10-25T16:19:22.228+00:00","statement":{"source":"nvd","id":"CVE-2026-88879","aliases":[],"title":"Traefik is an HTTP reverse proxy and load balancer. In Traefik v1.x, v2.x through v2.11.55, and v3.0.0 through v3.7.11, header names are canonicalized only on dashes, so X-Auth-User, X_Auth_User and X.Auth.User are treated as three distinct…","description":"Traefik is an HTTP reverse proxy and load balancer. In Traefik v1.x, v2.x through v2.11.55, and v3.0.0 through v3.7.11, header names are canonicalized only on dashes, so X-Auth-User, X_Auth_User and X.Auth.User are treated as three distinct headers by Traefik, while backends that derive variable names from header names (CGI, WSGI, PHP, NGINX and others) collapse them into a single variable. A client can therefore smuggle a dot-form alias of a header that Traefik manages past the middleware managing it — for example supplying X.Authenticated.User alongside the canonical X-Authenticated-User written by the ForwardAuth middleware — causing such a backend to read the client-supplied value instead of the identity Traefik asserted. In the tested configuration (PHP 8.2 built-in SAPI over an HTTP/1 backend path), Go's lexical header ordering makes the attacker-supplied value win deterministically, so a client that ForwardAuth admits as a low-privilege identity can be treated by the backend as a different user or role. Any header Traefik sets is affected, not only ForwardAuth's. This is an incomplete fix for GHSA-x677-9fxg-v5c5, which blocked only the underscore form. Fixed in v2.11.56 and v3.7.12, which add the aliasHeadersStrategy entry-point option; because it defaults to 'keep' for backwards compatibility, it must be explicitly set to 'delete' or 'reject' for the fix to take effect. Unmaintained release lines will not receive a patch.","state":0,"publishedAt":"2026-09-10T14:17:16.337+00:00","modifiedAt":"2026-10-08T16:17:58.963+00:00","affected":[],"metrics":[{"system":"CVSS 4.0 · disclosure@vulncheck.com · Secondary","vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:N/VC:N/VI:N/VA:N/SC:H/SI:H/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X","score":5.3,"severity":"MEDIUM"},{"system":"CVSS 3.1 · nvd@nist.gov · Primary","vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:H/A:N","score":8.2,"severity":"HIGH"}],"references":["https://github.com/traefik/traefik/security/advisories/GHSA-rf44-j88r-hh8c","https://www.vulncheck.com/advisories/traefik-before-2.11.56-identity-spoofing-via-header-alias"],"sourceUrl":"https://nvd.nist.gov/vuln/detail/CVE-2026-88879","license":"NIST NVD usage terms; underlying source attribution retained","enrichment":{"sourceStatus":"Analyzed","weaknesses":["CWE-290"],"productCriteria":["cpe:2.3:a:traefik:traefik:*:*:*:*:*:*:*:*"],"sourceDates":{"published":"2026-09-10T14:17:16.337","lastModified":"2026-10-08T16:17:58.963"},"relatedAdvisories":[],"note":"NVD analysis and CPE criteria are source context, not proof that a package or your environment is affected. Complete affected data, logical configurations and SSVC are retained in the original JSON."},"key":"nvd:CVE-2026-88879","identifiers":["CVE-2026-88879"]},"retained":false,"historicalAffected":[]},{"revision":"802edfa5173a4610af13220d39dfe013","observedAt":"2026-10-24T13:19:41.952+00:00","statement":{"source":"osv","id":"GHSA-rf44-j88r-hh8c","aliases":["CVE-2026-88011","CVE-2026-88879","GO-2026-6455"],"title":"Traefik: ForwardAuth identity spoofing via dot-form header alias","description":"## Summary\n\nThere is a medium severity vulnerability in Traefik's handling of request headers whose name aliases another header name. Go canonicalizes header names on dashes only, so `X-Auth-User`, `X_Auth_User` and `X.Auth.User` are three distinct headers to Traefik, while backends that derive variable names from header names (CGI, WSGI, PHP, NGINX, and others) collapse all of them into the same variable. A client can therefore smuggle an alias of a header that Traefik manages past the middleware managing it — for example a dot-form `X.Authenticated.User` alongside the canonical `X-Authenticated-User` written by the ForwardAuth middleware — and have such a backend read the client-supplied value instead of the identity Traefik asserted. Any header Traefik sets is exposed, not only ForwardAuth's. This is an incomplete-fix sibling of GHSA-x677-9fxg-v5c5, which blocked only the underscore form.\n\nThe mitigation is the new `aliasHeadersStrategy` entry point option. It defaults to `keep`, which preserves the previous behavior for backwards compatibility, so it must be explicitly set to `delete` or `reject` to take effect.\n\nTraefik v1.x, the v2 releases up to v2.11.55 and the v3 releases from v3.0.0 to v3.7.11 are affected. The unmaintained lines among them will not receive a patch of their own, and the remedy for their users is to upgrade to v2.11.56 or v3.7.12 and set `aliasHeadersStrategy`.\n\n## Patches\n\n- https://github.com/traefik/traefik/releases/tag/v2.11.56\n- https://github.com/traefik/traefik/releases/tag/v3.7.12\n\n## For more information\n\nIf you have any questions or comments about this advisory, please [open an issue](https://github.com/traefik/traefik/issues).\n\n<details>\n<summary>Original Description</summary>\n\n### Summary\nTraefik's ForwardAuth middleware removes the configured canonical identity header before copying the value returned by the auth service. However, a client-supplied dot-form alias such as `X.Authenticated.User` survives both this replacement and `underscoreHeadersStrategy: delete`.\n\nThe tested PHP 8.2 built-in SAPI maps `X-Authenticated-User` and `X.Authenticated.User` to the same `HTTP_X_AUTHENTICATED_USER` server variable. In Traefik's tested HTTP/1 backend path, the client value is serialized last and overrides the identity asserted by ForwardAuth.\n\nA client whom ForwardAuth permits as a lower-privilege identity can therefore be treated by the backend as another user or role.\n\n### Details\nAt `v3.7.10`, `pkg/server/server_entrypoint_tcp.go:800-818` removes or rejects only names containing `_`. After successful authentication, `pkg/middlewares/auth/forward.go:314-326` deletes and replaces only the canonical `authResponseHeaders` key. The dot alias remains in `req.Header` and the standard reverse proxy forwards both legal field names.\n\nGo's HTTP/1 writer sorts header names lexically, placing `X-Authenticated-User` before `X.Authenticated.User`. PHP then collapses both into one `$_SERVER` key, so the attacker value deterministically wins.\n\nThis is an incomplete-fix sibling of `GHSA-x677-9fxg-v5c5`: the published underscore input is blocked by the new entry-point strategy, while the dot input bypasses that mitigation on the current stable release.\n\n### PoC\n[traefik-dot-forwardauth-poc.zip](https://github.com/user-attachments/files/30898195/traefik-dot-forwardauth-poc.zip)\n\nrun:\n```bash\ndocker compose up -d\nbash verify.sh\ndocker compose down\n```\n\nThe decisive request is:\n\n```http\nGET /probe HTTP/1.1\nHost: 127.0.0.1:18080\nX.Authenticated.User: admin\nConnection: close\n```\n\nExpected backend identity: `lab-user`, as returned by ForwardAuth.\n\nObserved on `v3.7.10`: `admin`.\n\nThe script also verifies that requests without the alias, with the canonical header, and with the already-fixed underscore alias all produce `lab-user`.\n\n### Impact\nApplications that authorize requests using a ForwardAuth-provided identity header can receive an attacker-selected username or role instead. This was runtime-verified with PHP 8.2.27 and 8.2.33; impact on other normalization-prone backends is conditional. A lower-privilege permitted client may consequently impersonate another user or administrative role, affecting confidentiality and integrity.\n\nThis report does not claim bypass of a ForwardAuth denial: the auth service must first permit the request.\n\n\n</details>\n---","state":0,"publishedAt":"2026-09-10T20:28:15+00:00","modifiedAt":"2026-09-17T17:40:34.7714618+00:00","affected":[{"ecosystem":"Go","name":"github.com/traefik/traefik/v2","ranges":[{"type":"SEMVER","events":[{"kind":"introduced","version":"0"},{"kind":"fixed","version":"2.11.56"}]}],"versions":[],"rawVersionEvidence":null},{"ecosystem":"Go","name":"github.com/traefik/traefik/v3","ranges":[{"type":"SEMVER","events":[{"kind":"introduced","version":"3.0.0"},{"kind":"fixed","version":"3.7.12"}]}],"versions":[],"rawVersionEvidence":null}],"metrics":[{"system":"CVSS_V4","vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:N/VC:N/VI:N/VA:N/SC:H/SI:H/SA:N","score":null,"severity":null},{"system":"Publisher rating","vector":null,"score":null,"severity":"MODERATE"}],"references":["https://github.com/traefik/traefik/security/advisories/GHSA-rf44-j88r-hh8c","https://nvd.nist.gov/vuln/detail/CVE-2026-88011","https://github.com/traefik/traefik/pull/13720","https://github.com/traefik/traefik/commit/0331801c72329e0eaeb850e53ccce87c57fbecf8","https://github.com/traefik/traefik","https://github.com/traefik/traefik/releases/tag/v2.11.56","https://github.com/traefik/traefik/releases/tag/v3.7.12"],"sourceUrl":"https://github.com/advisories/GHSA-rf44-j88r-hh8c","license":"GitHub Advisory Database · CC-BY-4.0","key":"osv:GHSA-rf44-j88r-hh8c","identifiers":["GHSA-rf44-j88r-hh8c","CVE-2026-88011","CVE-2026-88879","GO-2026-6455"]},"retained":false,"historicalAffected":[]},{"revision":"e637c5557ce9465e9a1ae8125703777a","observedAt":"2026-10-24T13:19:41.952+00:00","statement":{"source":"osv","id":"GO-2026-6455","aliases":["CVE-2026-88011","CVE-2026-88879","GHSA-rf44-j88r-hh8c"],"title":"Traefik: ForwardAuth identity spoofing via dot-form header alias in github.com/traefik/traefik","description":"Traefik: ForwardAuth identity spoofing via dot-form header alias in github.com/traefik/traefik","state":0,"publishedAt":"2026-09-16T16:56:22+00:00","modifiedAt":"2026-09-17T17:40:34.7714618+00:00","affected":[{"ecosystem":"Go","name":"github.com/traefik/traefik","ranges":[{"type":"SEMVER","events":[{"kind":"introduced","version":"0"}]}],"versions":[],"rawVersionEvidence":null},{"ecosystem":"Go","name":"github.com/traefik/traefik/v2","ranges":[{"type":"SEMVER","events":[{"kind":"introduced","version":"0"},{"kind":"fixed","version":"2.11.56"}]}],"versions":[],"rawVersionEvidence":null},{"ecosystem":"Go","name":"github.com/traefik/traefik/v3","ranges":[{"type":"SEMVER","events":[{"kind":"introduced","version":"3.0.0"},{"kind":"fixed","version":"3.7.12"}]}],"versions":[],"rawVersionEvidence":null}],"metrics":[],"references":["https://github.com/traefik/traefik/security/advisories/GHSA-rf44-j88r-hh8c","https://nvd.nist.gov/vuln/detail/CVE-2026-88011","https://github.com/traefik/traefik/commit/0331801c72329e0eaeb850e53ccce87c57fbecf8","https://github.com/traefik/traefik/pull/13720","https://github.com/traefik/traefik/releases/tag/v2.11.56","https://github.com/traefik/traefik/releases/tag/v3.7.12"],"sourceUrl":"https://osv.dev/vulnerability/GO-2026-6455","license":"OSV · upstream source license applies","key":"osv:GO-2026-6455","identifiers":["GO-2026-6455","CVE-2026-88011","CVE-2026-88879","GHSA-rf44-j88r-hh8c"]},"retained":false,"historicalAffected":[]}],"coverage":[{"source":"cisa-kev:global","scope":"Complete CISA KEV catalog; all vendors. Missing entries do not establish absence of exploitation.","generation":"2026-11-10T18:23:45.7727801+00:00","complete":true,"records":1773,"lastAttemptAt":"2026-11-10T18:23:45.7727801+00:00","lastSuccessAt":"2026-11-10T18:23:45.9579119+00:00","error":null,"lastVerifiedAt":"2026-11-10T18:23:45.9579152+00:00","snapshotPublishedAt":null,"importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"cve-program","scope":"Official CVE Program baseline and cumulative hourly delta; all vendors, published and rejected records","generation":"cve-8859cf40d4337e24bd2f258cc7778fbad01bb24c79d057aaf34cf1dfc6f8917d-d220ab899e0e1c49e43094274f562c18c4a19b03898aec3feae1debdd31f6756","complete":true,"records":422212,"lastAttemptAt":"2026-11-10T18:21:27.6685178+00:00","lastSuccessAt":"2026-11-10T18:21:27.4920545+00:00","error":null,"lastVerifiedAt":"2026-11-10T18:21:27.6685178+00:00","snapshotPublishedAt":"2026-11-10T17:27:33+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"euvd","scope":"Rolling EUVD lookups of CVE aliases in current public OSV archives; 500 identifiers per refresh, rechecked after 48 hours. Not a global EUVD catalog. Successful not-found lookups count as checked; they do not imply withdrawal or safety. No reader inventory is sent.","generation":"enrichment-acbb624a79c244aa868394151a25f053","complete":true,"records":13704,"lastAttemptAt":"2026-11-10T18:24:12.0072206+00:00","lastSuccessAt":"2026-11-10T18:24:12.001+00:00","error":null,"lastVerifiedAt":"2026-11-10T18:24:12.001+00:00","snapshotPublishedAt":null,"importing":false,"stagedRecords":0,"checkedIdentifiers":13758,"expectedIdentifiers":13758,"failedIdentifiers":0},{"source":"first-epss:nuget","scope":"FIRST EPSS for explicit CVE aliases in the collected public NuGet archive. Not a global EPSS backfill.","generation":"2026-11-10T18:23:45.7727801+00:00","complete":true,"records":1096,"lastAttemptAt":"2026-11-10T18:23:45.7727801+00:00","lastSuccessAt":"2026-11-10T18:23:45.9591411+00:00","error":null,"lastVerifiedAt":"2026-11-10T18:23:45.9591459+00:00","snapshotPublishedAt":null,"importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"nvd","scope":"Rolling NVD lookups of CVE aliases in current public OSV archives; 500 identifiers per refresh, rechecked after 48 hours. Not a global NVD catalog. Successful not-found lookups count as checked; they do not imply withdrawal or safety. No reader inventory is sent.","generation":"enrichment-4459456b8f8c43778c308d7de0a43211","complete":true,"records":13710,"lastAttemptAt":"2026-11-10T18:24:11.1447617+00:00","lastSuccessAt":"2026-11-10T18:24:11.141+00:00","error":null,"lastVerifiedAt":"2026-11-10T18:24:11.141+00:00","snapshotPublishedAt":null,"importing":false,"stagedRecords":0,"checkedIdentifiers":13758,"expectedIdentifiers":13758,"failedIdentifiers":0},{"source":"osv:Go","scope":"Complete OSV Go ecosystem archive, including withdrawn and malicious-package source records; statement counts are not unique CVE counts","generation":"go-50a085e5b7a5d1546eabdb7e52fab85d658afa8554d3cf95a0891c49d83f2979","complete":true,"records":9935,"lastAttemptAt":"2026-11-10T18:23:45.7142755+00:00","lastSuccessAt":"2026-11-10T16:25:20.0114252+00:00","error":null,"lastVerifiedAt":"2026-11-10T18:23:45.7142755+00:00","snapshotPublishedAt":"2026-11-10T16:18:10+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"osv:NuGet","scope":"Complete OSV NuGet ecosystem archive, including GitHub Advisory Database records; NuGet version matching only","generation":"nuget-26503967ae4379db8f374089589d6e03fb15bd31f820c9e992aaf93840c2236c","complete":true,"records":1971,"lastAttemptAt":"2026-11-10T18:21:27.7170016+00:00","lastSuccessAt":"2026-11-09T21:02:20.472473+00:00","error":null,"lastVerifiedAt":"2026-11-10T18:21:27.7170016+00:00","snapshotPublishedAt":"2026-11-09T20:18:18+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"osv:crates.io","scope":"Complete OSV crates.io ecosystem archive, including withdrawn and malicious-package source records; statement counts are not unique CVE counts","generation":"crates.io-df497239f2f75af38e095cb498791dad4044a8a9a7f5f0ee6008bb732579ab9d","complete":true,"records":3081,"lastAttemptAt":"2026-11-10T18:23:45.7340645+00:00","lastSuccessAt":"2026-11-10T14:21:34.3717399+00:00","error":null,"lastVerifiedAt":"2026-11-10T18:23:45.7340645+00:00","snapshotPublishedAt":"2026-11-10T14:18:07+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"osv:npm","scope":"Complete OSV npm ecosystem archive, including withdrawn and malicious-package source records; statement counts are not unique CVE counts","generation":"npm-5bab1d7e68ac802e78d67f5b951f7bcace0c45048e98b39b73b18376172e4b36","complete":true,"records":231619,"lastAttemptAt":"2026-11-10T18:23:45.5819776+00:00","lastSuccessAt":"2026-11-10T18:23:44.1117746+00:00","error":null,"lastVerifiedAt":"2026-11-10T18:23:45.5819776+00:00","snapshotPublishedAt":"2026-11-10T17:33:21+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null}]}