Skip to content

Traefik CVE-2026-54762 : fail-open BasicAuth via Ingress NGINX (3.7.5)

CERTFR-2026-AVI-0785 (19 juin) couvre CVE-2026-54762 dans le provider Kubernetes Ingress NGINX de Traefik : un Secret absent fait publier la route en clair. Correctif 3.7.5.

Publié le 4 min de lecture

Le CERT-FR a publié le 19 juin 2026 l'avis CERTFR-2026-AVI-0785 qui répercute le bulletin Traefik GHSA-4mr2-fg2p-w63c. CVE-2026-54762, CVSS 5.9 (Moderate), affecte le provider Kubernetes Ingress NGINX de Traefik : quand le Secret qui porte les identifiants d'une authentification BasicAuth ou DigestAuth ne peut pas être résolu, Traefik journalise l'erreur puis publie quand même la route — sans authentification. Fail-open sur une annotation pourtant censée durcir l'accès.

Le correctif est en Traefik 3.7.5, publié sur GitHub Releases le 10 juin 2026. La branche 3.7 antérieure à 3.7.5 est vulnérable ; l'avis CERT-FR liste explicitement la plage 3.7.0-ea.1 à 3.7.4.

Versions concernées

  • Traefik 3.7.0-ea.1 à 3.7.4 — vulnérables.
  • Traefik 3.7.5 — corrigé.

Les branches 2.11 et 3.6 ne sont pas listées : le provider Kubernetes Ingress NGINX dans cette forme est une nouveauté de la 3.7. Le bug suit le code du provider, pas l'évolution du moteur de routage.

Détails techniques

Le code fautif est dans pkg/provider/kubernetes/ingress-nginx/build.go. Quand une Ingress référence une authentification via les annotations nginx.ingress.kubernetes.io/auth-type: basic (ou digest) et nginx.ingress.kubernetes.io/auth-secret: <name>, Traefik tente de résoudre le Secret. Si la résolution échoue — Secret absent, mal formé, supprimé par GitOps, hors du namespace attendu —, le bulletin Traefik documente le comportement :

"The error is logged, but loc.Error is not set. Later... the generated router continues to use the real backend service."

Autrement dit : loc.Error n'est pas positionné, le routeur est généré sans middleware d'authentification, et la requête atteint le backend en clair. Le scénario nominal — Ingress + Secret cohérents — fonctionne. Le scénario dégradé — Secret manquant — expose au lieu de refuser. C'est l'opposé du contrat attendu d'une BasicAuth.

Les déploiements particulièrement exposés :

  • Environnements multi-tenants Kubernetes où l'Ingress et le Secret sont gérés par des équipes ou des outils différents.
  • GitOps (Argo CD, Flux) où l'Ingress et le Secret se synchronisent de façon indépendante et peuvent transitoirement désaligner.
  • Suppressions ou renommages de Secret par une politique Kyverno, OPA Gatekeeper, ou une rotation automatique mal cadrée.

État d'exploitation

Aucune exploitation active ni PoC public au 21 juin 2026. La sévérité CVSS reste Moderate (5.9) parce que l'exploitation suppose qu'un Secret référencé existe puis disparaisse, ou ne soit jamais créé — pas un cas que l'attaquant déclenche à distance. La détection est inverse au cas habituel : c'est l'administrateur qui doit constater le silence d'authentification, pas une signature d'attaque qui le révèle dans le SIEM.

Que faire

  1. Mettre à jour Traefik vers 3.7.5 sur tous les clusters Kubernetes qui exposent le provider Ingress NGINX. La release du 10 juin contient le correctif ; le delta fonctionnel avec 3.7.4 est minime.

  2. Auditer les Ingress dont auth-secret référence un Secret introuvable. Commande à dérouler par namespace :

    kubectl get ingress -A -o json | jq -r '
      .items[]
      | select(.metadata.annotations["nginx.ingress.kubernetes.io/auth-secret"])
      | "\(.metadata.namespace)/\(.metadata.name)\t\(.metadata.annotations["nginx.ingress.kubernetes.io/auth-secret"])"'
    

    Croiser la deuxième colonne avec kubectl get secret -n <ns> <name> pour repérer les références cassées.

  3. Bloquer la publication d'Ingress sans Secret valide via une politique Kyverno ou OPA Gatekeeper qui rejette tout auth-secret non résolu. C'est la protection structurelle, au-delà du patch.

  4. Vérifier les logs Traefik pour les erreurs failed to fetch secret ou équivalents. Chaque occurrence pré-patch correspond à une route publiée sans authentification entre l'erreur et le rechargement.

  5. Rotation préventive des données accessibles via les routes concernées si une fenêtre d'exposition non authentifiée est attestée dans les logs. Considérer le contenu accédé comme public sur la période.

Contexte

C'est la deuxième CVE Traefik documentée par le CERT-FR en juin 2026, après CERTFR-2026-AVI-0738 du 11 juin. Le motif récurrent sur cette série de CVE Traefik 2026 : des comportements de bord — annotations Ingress, normalisation de chemin, SNI mixte, secret manquant — où le proxy prend une décision implicite qui n'est pas celle attendue par l'opérateur. Le code suit la documentation ; la documentation n'évoque pas le mode dégradé.

Pour les équipes plate-forme Kubernetes, la leçon dépasse la 3.7.5 : un auth-secret manquant doit bloquer la publication, pas la dégrader silencieusement. C'est un cas pour la politique d'admission (Kyverno, Gatekeeper), pas pour la prochaine release de Traefik.

Articles liés