
Preuve de concept démontrant un contournement d'autorisation dans le fournisseur Kubernetes Gateway de Traefik (CVE-2026-54761) via une vulnérabilité crossProviderNamespaces, exposant des services internes comme api@internal.
Ce dépôt est une preuve de concept (PoC) pour reproduire en environnement local la vulnérabilité de haute sévérité CVE-2026-54761 présente dans le fournisseur Kubernetes Gateway de Traefik.
Cette vulnérabilité affecte la liste blanche crossProviderNamespaces. Dans les règles HTTPRoute déclarant plusieurs références de backend pondérées, Traefik vérifie la liste blanche sur le backendRef.namespace de la référence cible, et non sur le propre namespace de la route. Par conséquent, même une HTTPRoute située dans un namespace non autorisé peut exposer des services internes de Traefik comme api@internal, si la référence de backend pointe vers un namespace autorisé et qu'un ReferenceGrant correspondant de l'API Gateway existe.
Rapporté par: saku0512 (https://github.com/Saku0512), vvvvvvvvvvel (https://github.com/vvvvvvvvvvel)
Ce projet est uniquement destiné à des fins éducatives et à des tests de sécurité autorisés.
N'exécutez pas ce PoC sur des systèmes que vous ne possédez ou ne gérez pas. Ce PoC est conçu pour créer un cluster kind local éphémère et démontrer le problème dans un environnement isolé.
api@internal peuvent être exposés via le plan de données normalL'option crossProviderNamespaces est destinée à limiter les namespaces de route de l'API Gateway pouvant déclarer des références de backend TraefikService incluant des références à des services @internal.
Dans le chemin de traitement des backends pondérés vulnérables, Traefik vérifie la liste blanche sur le backendRef.namespace. Or, la frontière de sécurité est le namespace de la HTTPRoute déclarant la référence, donc cette cible de vérification est incorrecte.
Comportement attendu :
providers:
kubernetesGateway:
crossProviderNamespaces:
- trusted
Seules les routes dont le propre namespace est trusted devraient pouvoir déclarer des références de backend TraefikService cross-provider.
Comportement vulnérable :
backendRefs:
- group: traefik.io
kind: TraefikService
name: api@internal
namespace: trusted
Si une route possède plusieurs références de backend et que backendRef.namespace est défini sur le namespace autorisé trusted, une HTTPRoute située dans le namespace attacker peut être acceptée.
Ce PoC crée un cluster kind local éphémère avec la configuration suivante :
providers.kubernetesGateway.crossProviderNamespaces=trustedReferenceGrant normal de l'API Gateway depuis trustedcd external-repro-kind
./run-kind-repro.sh
Le script supprime automatiquement le cluster à la fin.
Pour conserver le cluster pour une inspection manuelle :
KEEP_CLUSTER=1 ./run-kind-repro.sh
La route de contrôle utilise une seule référence de backend interdite api@internal depuis le namespace attacker. Dans ce cas, l'API ne devrait pas être exposée.
control status: 404
La route d'exploitation utilise deux références de backend, obligeant Traefik à construire un service pondéré. Dans la version vulnérable, une requête vers /api/http/services renvoie le JSON de l'API Traefik.
exploit returned Traefik API JSON
api@internal status: enabled
weighted members:
api@internal 1000000
attacker-whoami-http-80 1
Le point important est que les deux routes sont créées depuis le même namespace non fiable attacker. La route de contrôle à backend unique est refusée, mais la route de backend pondérée mixte est résolue avec succès et expose api@internal.
external-repro-kind/kind-config.yaml - Configuration du cluster kind local exposant Traefik sur 127.0.0.1:18080external-repro-kind/traefik-v371.yaml - Déploiement vulnérable de Traefik et GatewayClassexternal-repro-kind/gateway-exploit.yaml - Namespace, Gateway, ReferenceGrant, routes de contrôle et de contournementexternal-repro-kind/run-kind-repro.sh - Script de reproduction de bout en bout localMettez à niveau Traefik vers une version corrigée.
Les opérateurs doivent également vérifier les ressources ReferenceGrant existantes de l'API Gateway. N'autorisez pas l'accès aux références cross-provider TraefikService depuis des namespaces non fiables, sauf s'il s'agit d'une délégation expressément intentionnelle.