
Proof-of-Concept, der eine Autorisierungsumgehung im Kubernetes-Gateway-Provider von Traefik (CVE-2026-54761) über eine crossProviderNamespaces-Schwachstelle demonstriert und dabei interne Dienste wie api@internal offenlegt.
Dieses Repository ist ein Proof of Concept (PoC) zur lokalen Reproduktion der hochkritischen Schwachstelle CVE-2026-54761 im Kubernetes-Gateway-Provider von Traefik.
Diese Schwachstelle betrifft die Zulassungsliste von crossProviderNamespaces. Bei HTTPRoute-Regeln, die mehrere gewichtete Backend-Referenzen deklarieren, validiert Traefik die Zulassungsliste gegen den backendRef.namespace der referenzierten Backends statt gegen den Namespace der Route selbst. Dadurch kann eine HTTPRoute in einem nicht autorisierten Namespace – sofern die Backend-Referenz auf einen erlaubten Namespace zeigt und ein entsprechender Gateway-API-ReferenceGrant vorhanden ist – interne Traefik-Dienste wie api@internal offenlegen.
Gemeldet von: saku0512 (https://github.com/Saku0512), vvvvvvvvvvel (https://github.com/vvvvvvvvvvel)
Dieses Projekt dient ausschließlich Bildungszwecken und autorisierten Sicherheitstests.
Führen Sie dieses PoC nicht gegen Systeme aus, die Sie nicht besitzen oder verwalten. Dieses PoC erstellt einen wegwerfbaren lokalen kind-Cluster und demonstriert das Problem in einer isolierten Umgebung.
api@internal können über die normale Datenebene offengelegt werdenDie Option crossProviderNamespaces dient dazu, die Gateway-API-Routen-Namespaces einzuschränken, die TraefikService-Backend-Referenzen mit Verweisen auf @internal-Dienste deklarieren dürfen.
Im verwundbaren Verarbeitungspfad für gewichtete Backends prüft Traefik die Zulassungsliste gegen backendRef.namespace. Dieses Prüfziel ist jedoch falsch, da die Sicherheitsgrenze der Namespace der deklarierenden HTTPRoute ist.
Erwartetes Verhalten:
providers:
kubernetesGateway:
crossProviderNamespaces:
- trusted
Nur Routen, deren eigener Namespace trusted ist, sollten Cross-Provider-TraefikService-Backend-Referenzen deklarieren dürfen.
Verwundbares Verhalten:
backendRefs:
- group: traefik.io
kind: TraefikService
name: api@internal
namespace: trusted
Wenn eine Route mehrere Backend-Referenzen besitzt und backendRef.namespace auf den erlaubten Namespace trusted gesetzt ist, kann eine HTTPRoute im Namespace attacker möglicherweise akzeptiert werden.
Dieses PoC erstellt einen wegwerfbaren lokalen kind-Cluster mit der folgenden Konfiguration:
providers.kubernetesGateway.crossProviderNamespaces=trustedReferenceGrant von trustedcd external-repro-kind
./run-kind-repro.sh
Das Skript löscht den Cluster am Ende automatisch.
Um den Cluster für manuelle Untersuchungen zu behalten:
KEEP_CLUSTER=1 ./run-kind-repro.sh
Die Kontrollroute verwendet eine einzelne verbotene api@internal-Backend-Referenz aus dem Namespace attacker. In diesem Fall sollte die API nicht offengelegt werden.
control status: 404
Die Exploit-Route verwendet zwei Backend-Referenzen und veranlasst Traefik, einen gewichteten Dienst zu konstruieren. In der verwundbaren Version liefert eine Anfrage an /api/http/services das JSON der Traefik-API zurück.
exploit returned Traefik API JSON
api@internal status: enabled
weighted members:
api@internal 1000000
attacker-whoami-http-80 1
Wichtig ist, dass beide Routen aus demselben nicht vertrauenswürdigen Namespace attacker erstellt werden. Die Kontrolle mit einem einzelnen Backend wird abgelehnt, während die gemischte gewichtete Backend-Route erfolgreich aufgelöst wird und api@internal offenlegt.
external-repro-kind/kind-config.yaml – Lokale kind-Cluster-Konfiguration, die Traefik unter 127.0.0.1:18080 verfügbar machtexternal-repro-kind/traefik-v371.yaml – Verwundbare Traefik-Bereitstellung und GatewayClassexternal-repro-kind/gateway-exploit.yaml – Namespace, Gateway, ReferenceGrant, Kontrollroute und Bypass-Routeexternal-repro-kind/run-kind-repro.sh – Skript zur lokalen End-to-End-ReproduktionAktualisieren Sie Traefik auf eine behobene Version.
Betreiber sollten außerdem bestehende Gateway-API-ReferenceGrant-Ressourcen überprüfen. Gewähren Sie nicht vertrauenswürdigen Namespaces keinen Zugriff auf Cross-Provider-TraefikService-Referenzen, sofern dies nicht ausdrücklich beabsichtigt ist.