
TraefikのKubernetes Gatewayプロバイダにおける認可バイパスを示す概念実証(CVE-2026-54761)。crossProviderNamespaces脆弱性を介して、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
exploit 用ルートは 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 参照へのアクセスを許可しないでください。