Skip to content

Traefik 3.7.6 corrige trois CVE, dont un bypass ForwardAuth CVSS 9.1

Traefik 3.7.6 et 2.11.51 (30 juin) corrigent CVE-2026-54763 — spoofing d'identité ForwardAuth via headers underscore, CVSS 9.1. CERT-FR a publié l'avis AVI-0823 le 1er juillet.

Publié le 5 min de lecture

Le CERT-FR a publié le 1er juillet 2026 l'avis CERTFR-2026-AVI-0823 sur Traefik, qui répercute les releases 3.7.6, 3.6.22 et 2.11.51 publiées par Traefik Labs le 30 juin. Trois CVE au total ; la plus sévère — CVE-2026-54763 — remonte à CVSS 9.1 sur son vecteur ForwardAuth authResponseHeaders, sans besoin d'authentification préalable. C'est un patch qui répare un patch : l'éditeur qualifie explicitement le correctif d'"incomplete fix for CVE-2026-33433 + CVE-2026-39858".

Les trois CVE

D'après les Security Advisories publiés par le projet Traefik :

  • CVE-2026-54763headerField underscore-variant identity spoofing in BasicAuth / DigestAuth / ForwardAuth (GHSA-x677-9fxg-v5c5). CVSS 7.5 en variante BasicAuth/DigestAuth, 9.1 en variante ForwardAuth authResponseHeaders. Le correctif précédent (CVE-2026-33433) supprimait les en-têtes d'identité fournis par l'attaquant avec Header.Del(), mais "did not account for underscore-variant header names (e.g. X_Auth_User), which many backends normalize identically to the dashed form." Résultat : un attaquant injecte des en-têtes en variante underscore qui survivent au filtrage de Traefik et atteignent le backend à côté de la valeur authentifiée par Traefik. Dans le cas ForwardAuth authResponseHeaders, "the attacker does NOT need credentials". Le correctif introduit l'option allowHeadersWithUnderscores: false au niveau entryPoint. Reporter : Matteo Panzeri.
  • CVE-2026-54764ForwardAuth middleware leaks X-Forwarded-Port spoofing via untrusted X-Forwarded-Proto when trustForwardHeader=false (GHSA-3q9r-p662-5j8m). CVSS 6.9. Même avec trustForwardHeader: false, le middleware dérive le X-Forwarded-Port envoyé au service d'authentification à partir du X-Forwarded-Proto attaquant-contrôlé de la requête entrante. Un attaquant non authentifié peut "bypass port-based security checks (e.g., 'only allow requests arriving on HTTPS port 443') by injecting a single X-Forwarded-Proto: https header on a plain HTTP connection." Fix incomplet de GHSA-6384-m2mw-rf54 — le vecteur X-Forwarded-Proto/Prefix avait été traité, X-Forwarded-Port avait été manqué. CWE-345.
  • CVE-2026-54765Gateway HTTPRoute backendRef filters can leak backend context across routes sharing a Service:port (GHSA-6p8f-p8j2-rqmv). CVSS 3.1, uniquement branche 3.7.x (≥ 3.7.0). Dans le provider Kubernetes Gateway API, lorsque plusieurs HTTPRoute acceptées visent le même Service:port avec des backendRef filters différents, "Traefik may resolve both routes to the same child service and apply only one route's filter set to all requests reaching that backend." Cause racine : loadService construit le nom de service dynamique à partir de namespace + Service name seulement, sans inclure l'identité de la route, du listener, de la règle, ni du filtre.

Statut d'exploitation

Pas de PoC public référencé, pas d'exploitation en conditions réelles documentée par Traefik Labs ni par le CERT-FR au moment de la publication. Aucune de ces CVE n'est ajoutée au catalogue CISA KEV. Le risque réel est ailleurs : CVE-2026-54763 est un bypass d'identité non authentifié dans un middleware d'authentification, et le pattern underscore vs dash est archi-connu (voir la famille de CVE Node.js/Express des années 2020). N'importe quel attaquant capable de lire l'avis GHSA peut reconstruire la charge utile en dix minutes ; l'EPSS n'a pas encore intégré ce délai.

Le sous-ensemble exposé est spécifique : Traefik en front d'un backend qui ré-utilise un en-tête d'identité placé par un middleware d'auth (BasicAuth headerField, DigestAuth headerField, ForwardAuth authResponseHeaders, ou snippet ingress-nginx authResponseHeaders). Si votre backend lit X-Auth-User mais accepte aussi X_Auth_User, vous êtes concerné. Beaucoup de frameworks web font cette normalisation par défaut — Node.js http, Go net/http, PHP $_SERVER['HTTP_*'].

Que faire

  1. Mettre à jour vers Traefik 3.7.6 sur la branche 3.7, 3.6.22 sur la branche 3.6 LTS, ou 2.11.51 sur la branche 2.11 maintenue. Les images officielles docker.io/traefik:3.7.6 et traefik:2.11.51 sont disponibles depuis le 30 juin ; les notes de release GitHub documentent le migration guide côté 3.7.
  2. Activer explicitement allowHeadersWithUnderscores: false sur les entryPoints qui portent des middlewares d'auth. C'est la porte que CVE-2026-54763 ouvre — la fermer manuellement neutralise la variante underscore même si vous n'avez pas encore basculé sur la version corrigée.
  3. Auditer vos backends pour la normalisation dash/underscore. Un simple curl -H "X_Auth_User: admin" sur un endpoint protégé par ForwardAuth suffit à tester. Si le backend voit admin, votre stack est vulnérable au bypass — indépendamment de la version de Traefik.
  4. Si vous êtes derrière ForwardAuth avec trustForwardHeader: false et que votre logique d'autorisation utilise X-Forwarded-Port, considérer ce contrôle comme contourné jusqu'à la mise à jour. CVE-2026-54764 en fait un soft check trivialement contournable via X-Forwarded-Proto: https en clair.
  5. Sur les clusters Kubernetes utilisant Gateway API, réviser les HTTPRoute qui partagent un Service:port avec des backendRef filters divergents (typiquement des politiques par-tenant ou par-namespace). CVE-2026-54765 mélange les filter sets entre routes ; c'est CVSS 3.1 mais peut transporter des en-têtes d'identité tenant.

Contexte

Traefik est un projet français (Traefik Labs, ex-Containous, Lyon), très déployé dans l'écosystème DevOps français — ingress Kubernetes, front d'API, load balancer edge. L'avis CERTFR-2026-AVI-0823 est donc à traiter comme une alerte native dans le périmètre NIS2 des opérateurs qui exposent des applications via Traefik en production.

Le vrai motif de cette vague : les correctifs de bypass d'en-tête HTTP sont récurrents parce que la normalisation d'en-tête est un contrat implicite entre le proxy et le backend. Chaque Header.Del() posé côté proxy suppose que le backend voit la même chaîne canonique — et ce n'est pas garanti. CVE-2026-54763 est le troisième round sur ce même chemin (CVE-2026-33433, CVE-2026-39858 en juin, celle-ci en juillet). La quatrième round arrivera si un chercheur trouve une autre variante que Traefik ne normalise pas encore — points, tirets bas doublés, encodage MIME, etc. Pour les équipes qui gèrent l'ingress d'un cluster multi-tenants, la parade durable n'est pas "filtrer côté proxy" mais "toujours re-vérifier l'identité côté backend" : traiter tout en-tête d'identité comme non-fiable jusqu'à validation par le service métier.

Articles liés