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, 子域名突变, 安全漏洞验证, 暴力破解, 请求拦截, 越权访问