
개념 증명으로, Traefik의 Kubernetes Gateway 제공자에서 crossProviderNamespaces 취약점을 통해 인증 우회(CVE-2026-54761)를 시연하며, api@internal과 같은 내부 서비스를 노출합니다.
이 저장소는 Traefik의 Kubernetes Gateway provider에 존재하는 고심각도 취약점 CVE-2026-54761을 로컬 환경에서 재현하기 위한 Proof of Concept (PoC)입니다.
이 취약점은 crossProviderNamespaces의 허용 목록에 영향을 미칩니다. 여러 가중치가 있는 백엔드 참조를 선언하는 HTTPRoute 규칙에서 Traefik은 경로 자체의 namespace가 아닌 참조 대상의 backendRef.namespace에 대해 허용 목록을 검증합니다. 그 결과, 허용되지 않은 namespace에 있는 HTTPRoute라도 백엔드 참조가 허용된 namespace를 가리키고 해당 Gateway API의 ReferenceGrant가 존재하는 경우 api@internal 등의 Traefik 내부 서비스를 노출할 수 있습니다.
보고자: saku0512 (https://github.com/Saku0512), vvvvvvvvvvel (https://github.com/vvvvvvvvvvel)
이 프로젝트는 교육 목적 및 허가된 보안 테스트만을 목적으로 합니다.
소유하거나 관리하지 않는 시스템에 대해 이 PoC를 실행하지 마십시오. 이 PoC는 일회용 로컬 kind 클러스터를 생성하고 격리된 환경에서 문제를 입증하도록 설계되었습니다.
api@internal 등의 Traefik 내부 서비스가 일반 데이터 플레인을 통해 노출될 가능성이 있습니다.crossProviderNamespaces 옵션은 @internal 서비스에 대한 참조를 포함하는 TraefikService 백엔드 참조를 선언할 수 있는 Gateway API 경로 namespace를 제한하기 위한 것입니다.
취약한 가중치 있는 백엔드 처리 경로에서 Traefik은 backendRef.namespace에 대해 허용 목록을 확인합니다.
그러나 보안 경계는 참조를 선언하는 HTTPRoute의 namespace이므로 이 검증 대상은 잘못되었습니다.
예상되는 동작:
providers:
kubernetesGateway:
crossProviderNamespaces:
- trusted
자신의 namespace가 trusted인 경로만이 cross-provider의 TraefikService 백엔드 참조를 선언할 수 있어야 합니다.
취약한 동작:
backendRefs:
- group: traefik.io
kind: TraefikService
name: api@internal
namespace: trusted
경로가 여러 백엔드 참조를 가지고, backendRef.namespace가 허용된 trusted namespace로 설정된 경우, attacker namespace에 있는 HTTPRoute가 수락될 가능성이 있습니다.
이 PoC는 다음 구성의 일회용 로컬 kind 클러스터를 생성합니다.
providers.kubernetesGateway.crossProviderNamespaces=trustedtrusted로부터의 일반적인 Gateway API ReferenceGrantcd external-repro-kind
./run-kind-repro.sh
스크립트는 종료 시 클러스터를 자동으로 삭제합니다.
수동 조사를 위해 클러스터를 유지하려면:
KEEP_CLUSTER=1 ./run-kind-repro.sh
대조용 경로는 attacker namespace에서 단일 금지된 api@internal 백엔드 참조를 사용합니다. 이 경우 API는 노출되지 않아야 합니다.
control status: 404
익스플로잇용 경로는 2개의 백엔드 참조를 사용하여 Traefik에 가중치 있는 서비스를 구축하게 합니다. 취약한 버전에서는 /api/http/services에 대한 요청이 Traefik API의 JSON을 반환합니다.
exploit returned Traefik API JSON
api@internal status: enabled
weighted members:
api@internal 1000000
attacker-whoami-http-80 1
중요한 점은 두 경로 모두 동일한 신뢰되지 않은 attacker namespace에서 생성되었다는 것입니다. 단일 백엔드 대조는 거부되지만, 혼합된 가중치 있는 백엔드 경로는 정상적으로 해결되어 api@internal을 노출합니다.
external-repro-kind/kind-config.yaml - Traefik을 127.0.0.1:18080에서 노출하는 로컬 kind 클러스터 설정external-repro-kind/traefik-v371.yaml - 취약한 Traefik 배포 및 GatewayClassexternal-repro-kind/gateway-exploit.yaml - namespace, Gateway, ReferenceGrant, 대조용 경로, 우회용 경로external-repro-kind/run-kind-repro.sh - 로컬에서의 엔드투엔드 재현 스크립트Traefik을 수정 버전으로 업그레이드하십시오.
운영자는 기존 Gateway API ReferenceGrant 리소스도 확인하십시오. 명시적으로 의도된 위임이 아닌 한, 신뢰되지 않은 namespace에 대해 cross-provider의 TraefikService 참조에 대한 접근을 허용하지 마십시오.