Saku0512/CVE-2026-54761-poc

GitHub: Saku0512/CVE-2026-54761-poc

CVE-2026-54761 的本地概念验证项目,演示了 Traefik Kubernetes Gateway 在多加权 backend 引用场景下 crossProviderNamespaces 允许列表的授权绕过漏洞。

Stars: 0 | Forks: 0

# CVE-2026-54761:Traefik Kubernetes Gateway crossProviderNamespaces 绕过 PoC ## 描述 本仓库包含 **CVE-2026-54761** 的本地概念验证 (PoC),这是 Traefik 的 Kubernetes Gateway provider 中的一个高危漏洞。 该漏洞影响 `crossProviderNamespaces` 允许列表。对于声明了多个加权 backend 引用的 `HTTPRoute` 规则,Traefik 会针对目标 `backendRef.namespace` 而不是路由自身的 namespace 来验证允许列表。因此,当 backend 引用指向被加入允许列表的 namespace,并且存在匹配的 Gateway API `ReferenceGrant` 时,未加入允许列表的 namespace 中的 `HTTPRoute` 可以暴露内部 Traefik 服务(例如 `api@internal`)。 **发现者:** saku0512 () ## 免责声明 本项目仅用于教育和授权的安全测试目的。 请勿在您不拥有或管理的系统上运行此程序。该 PoC 旨在创建一个一次性的本地 `kind` 集群,并在隔离环境中演示此问题。 ## 漏洞详情 - **CVE ID:** CVE-2026-54761 - **产品:** Traefik - **组件:** Kubernetes Gateway provider - **类型:** 授权绕过 / 内部服务暴露 - **影响:** 内部 Traefik 服务(例如 `api@internal`)可能会通过正常的数据平面被暴露 - **受影响版本:** Traefik 低于下列修复版本的版本 - **修复版本:** v3.6.21 和 v3.7.5 ### 根本原因 `crossProviderNamespaces` 选项旨在限制哪些 Gateway API 路由 namespace 可以声明 `TraefikService` backend 引用,包括对 `@internal` 服务的引用。 在存在漏洞的加权 backend 路径中,Traefik 会针对 `backendRef.namespace` 检查允许列表。这是不正确的,因为安全边界应该是声明该引用的 `HTTPRoute` 所在的 namespace。 预期行为: ``` providers: kubernetesGateway: crossProviderNamespaces: - trusted ``` 只有自身 namespace 为 `trusted` 的路由才应被允许声明跨 provider 的 `TraefikService` backend 引用。 存在漏洞的行为: ``` backendRefs: - group: traefik.io kind: TraefikService name: api@internal namespace: trusted ``` 当路由具有多个 backend 引用,且 `backendRef.namespace` 被设置为加入允许列表的 `trusted` namespace 时,位于 `attacker` namespace 中的 `HTTPRoute` 就可能会被接受。 ## 概念验证 该 PoC 会创建一个一次性的本地 `kind` 集群,其中包含: - Traefik v3.7.1 - Gateway API CRD - `providers.kubernetesGateway.crossProviderNamespaces=trusted` - 一个来自 `trusted` 的常规 Gateway API `ReferenceGrant` - 一个应被拒绝的对照路由 - 一个演示该绕过方式的混合加权 backend 路由 ### 前置条件 - Docker - kind - kubectl - curl ### 运行 ``` cd external-repro-kind ./run-kind-repro.sh ``` 脚本在退出时会自动删除集群。 若要保留集群以供手动检查: ``` KEEP_CLUSTER=1 ./run-kind-repro.sh ``` ### 预期输出 对照路由使用了来自 `attacker` namespace 的单个被禁止的 `api@internal` backend 引用。它不应暴露 API: ``` control status: 404 ``` 利用路由使用了两个 backend 引用,导致 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 创建的。单 backend 的对照路由被拒绝了,但混合加权 backend 的路由却成功解析并暴露了 `api@internal`。 ## 文件 - `external-repro-kind/kind-config.yaml` - 本地 kind 集群,Traefik 暴露在 `127.0.0.1:18080` - `external-repro-kind/traefik-v371.yaml` - 存在漏洞的 Traefik 部署和 GatewayClass - `external-repro-kind/gateway-exploit.yaml` - namespace、Gateway、ReferenceGrant、对照路由和绕过路由 - `external-repro-kind/run-kind-repro.sh` - 端到端本地复现脚本 ## 修复建议 将 Traefik 升级到修复版本: - v3.6 发布线中的 v3.6.21 或更高版本 - v3.7 发布线中的 v3.7.5 或更高版本 运维人员还应审查现有的 Gateway API `ReferenceGrant` 资源,除非明确需要这种委派,否则应避免授予不受信任的 namespace 访问跨 provider `TraefikService` 引用的权限。 ## 参考 - [Traefik v3.6.21 发布](https://github.com/traefik/traefik/releases/tag/v3.6.21) - [Traefik v3.7.5 发布](https://github.com/traefik/traefik/releases/tag/v3.7.5)
标签:Cutter, Pandas, PoC, Traefik, 子域名突变, 安全漏洞验证, 暴力破解, 请求拦截, 越权访问