Advisory · CVE-2026-114640
Traefik Ingress NGINX HTTP router forwards forged Ssl-Client identity headers to backends
Traefik from 3.7.0 before 3.7.14 forwards client-supplied Ssl-Client headers on the plaintext HTTP router for Ingresses using auth-tls-pass-certificate-to-upstream, so when ssl-redirect is disabled an unauthenticated attacker can impersonate any mutual TLS identity a backend trusts from those headers. CVSS 3.1 8.7.
- Vendor
- Traefik
- Product
- Traefik
- Identifier / CWE
- CVE-2026-114640
CWE-290 - Action timing
- Immediate
Explain it like I’m five
The backend believes a stamped form that says this visitor showed a certificate. On the plain HTTP route nobody stamps or checks the form, so visitors can fill in any name they like and be believed.
- 01Attacker crafts identity headers
An unauthenticated client prepares a plaintext HTTP request carrying Ssl-Client-Verify SUCCESS with a chosen certificate subject and issuer.
- 02HTTP router forwards them as sent
Per Traefik, the middleware that owns those headers is attached only to the TLS router, so the HTTP router generated for the same Ingress forwards them exactly as the client sent them.
- 03Redirect-off route reaches the backend
When ssl-redirect is set to false, that HTTP router reaches the backend instead of only issuing a redirect.
- 04Backend trusts the forged identity
A backend that trusts those proxy-generated fields as a mutual TLS identity authorizes the request even though no client certificate was presented.
What happened
Traefik disclosed CVE-2026-114640 in its GitHub security advisory: in the Kubernetes Ingress NGINX provider, for an Ingress carrying the auth-tls-pass-certificate-to-upstream annotation, the middleware that owns the Ssl-Client request headers is attached only to the TLS router, so the plaintext HTTP router generated for the same Ingress forwards those headers exactly as the client sent them. Traefik states that when ssl-redirect is set to false that router reaches the backend, and an unauthenticated client can supply Ssl-Client-Verify SUCCESS together with a chosen certificate subject and issuer, so a backend that trusts those fields as a mutual TLS identity authorizes the request even though no client certificate was presented. The CVSS 3.1 score is 8.7, with changed scope.
Per Traefik, only the v3.7 line is affected: support for the auth-tls-pass-certificate-to-upstream annotation was added in v3.7.0, and earlier versions do not translate it. The fix is v3.7.14. No fixed version is claimed here for other lines, because Traefik does not list one.
What to do
- Inventory Traefik deployments from 3.7.0 before 3.7.14 using the Kubernetes Ingress NGINX provider, and list Ingresses that combine auth-tls-pass-certificate-to-upstream with ssl-redirect set to false.
- Upgrade affected deployments to Traefik 3.7.14.
- Until upgraded, re-enable ssl-redirect on those Ingresses or block their plaintext HTTP entry point, and make backends reject Ssl-Client headers that arrive on non-TLS routes.
- Hunt for backend authorizations based on Ssl-Client headers where the request arrived over HTTP or without a client certificate, and for identities that never held the claimed certificate.
- Verify the deployed version and retest header handling on both routers after updating.
Management note
Header-based identity is only as strong as the proxy stripping those headers on every route. One unstripped HTTP route turned it into self-asserted identity, so upgrade and check every backend that trusts Ssl-Client fields.