GHSA-rf44-j88r-hh8c: Go/github.com/traefik/traefik/v3 vulnerability

Published Sep 10, 2026
·
Updated

Summary

There 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, XAuthUser 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.

The 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.

Traefik 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.

Patches

- https://github.com/traefik/traefik/releases/tag/v2.11.56 - https://github.com/traefik/traefik/releases/tag/v3.7.12

For more information

If you have any questions or comments about this advisory, please open an issue.

<details> <summary>Original Description</summary>

Summary Traefik'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.

The tested PHP 8.2 built-in SAPI maps X-Authenticated-User and X.Authenticated.User to the same HTTPXAUTHENTICATEDUSER server variable. In Traefik's tested HTTP/1 backend path, the client value is serialized last and overrides the identity asserted by ForwardAuth.

A client whom ForwardAuth permits as a lower-privilege identity can therefore be treated by the backend as another user or role.

Details At v3.7.10, pkg/server/serverentrypointtcp.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.

Go'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.

This 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.

PoC traefik-dot-forwardauth-poc.zip

run: bash docker compose up -d bash verify.sh docker compose down

The decisive request is:

http GET /probe HTTP/1.1 Host: 127.0.0.1:18080 X.Authenticated.User: admin Connection: close

Expected backend identity: lab-user, as returned by ForwardAuth.

Observed on v3.7.10: admin.

The script also verifies that requests without the alias, with the canonical header, and with the already-fixed underscore alias all produce lab-user.

Impact Applications 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.

This report does not claim bypass of a ForwardAuth denial: the auth service must first permit the request.

</details> ---

Affected Software

2 affected componentsFixes available
go/github.com/traefik/traefik/v3>=3.0.0<3.7.12
3.7.12
go/github.com/traefik/traefik/v2<2.11.56
2.11.56

Remediation

Recommended actions to resolve this vulnerability, in priority order.

  1. Upgrade

    Upgrade go/github.com/traefik/traefik/v3 to a version that resolves this vulnerability.

    Fixed in 3.7.12
  2. Upgrade

    Upgrade go/github.com/traefik/traefik/v2 to a version that resolves this vulnerability.

    Fixed in 2.11.56
  3. Upgrade

    Upgrade traefik to a version that resolves this vulnerability.

    Fixed in v2.11.56
  4. Upgrade

    Upgrade traefik to a version that resolves this vulnerability.

    Fixed in v3.7.12
  5. Configuration

    Set the Traefik entry point option `aliasHeadersStrategy` to `delete` (must be explicitly set; default is `keep`, which preserves prior behavior). This blocks dot-form and other header-name aliases from being forwarded/used to override ForwardAuth-provided identity headers.

    Traefik entry point aliasHeadersStrategy = delete

Event History

Sep 10, 2026
Advisory Published
via GitHub·08:28 PM
Data Sourced
via GitHub·08:28 PM
DescriptionWeaknessAffected Software

Frequently Asked Questions

1

Which backend deployments are most exposed to this issue?

Deployments are exposed when Traefik proxies to a backend that converts request-header names into variable names and treats dash, underscore, and dot variants as the same variable. The advisory specifically identifies CGI, WSGI, PHP, and NGINX as examples.

2

What must an attacker be able to do to exploit this?

An attacker needs to send a request through Traefik with an alternate spelling of a header managed by Traefik, such as a dot-form alias. If the backend collapses that alias and Traefik's managed header into one variable, the backend may consume the attacker-controlled value.

3

Are default configurations protected by the new mitigation?

No. The aliasHeadersStrategy option defaults to keep for backwards compatibility, which preserves the prior behavior. It must be explicitly set to delete or reject to mitigate the issue.

4

What should be reviewed to determine whether an application is affected?

Review every header Traefik sets, not only ForwardAuth identity headers, and determine whether the backend derives variables from those headers. Test whether header-name variants using dashes, underscores, or dots can resolve to the same backend variable.

5

What can be done when updating Traefik is not immediately possible?

Use the aliasHeadersStrategy entry-point option with delete or reject where available. This prevents or removes aliased header names rather than retaining the previous behavior.

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203