Traefik ForwardAuth 复用认证连接池:NTLM/Negotiate 身份会串到别的客户端
GHSA-hrpp-p4fc-wwf8(2026-10-21 发布,High)。当认证服务器使用连接绑定的认证方式时,Traefik 的 ForwardAuth 中间件会把一个用户已认证的连接复用给另一个未认证客户端,后者可以凭受害者的身份访问后端。
影响范围
| 分支 | 受影响 | 修复 |
|---|---|---|
| v2 | = v3.0.0, <= v3.7.15 | v3.7.16 |
v3.0 到 v3.6 已经 EOL,同样受影响,但不会在自己的线上单独发修复;停在这些版本的用户必须升到 v2.11.60 或 v3.7.16。
触发条件是认证服务器采用连接绑定的认证方案,例如 NTLM,或 SPNEGO/Kerberos 的 Negotiate(典型场景是 IIS Windows Authentication)。
成因:认证子请求走的是共享连接池
ForwardAuth 发出的认证子请求,使用的是该中间件所有客户端共用的连接池。某个用户的连接在认证服务器上完成认证后,这条连接仍然留在池里;另一个客户端发起认证子请求时,可能直接拿到这条已认证连接。
于是,在一个独立的前端连接上,未认证客户端会收到一个成功的认证响应,而响应里携带的是受害者的身份。Traefik 再通过 authResponseHeaders 把这些身份头转发给后端,该客户端就以受害者身份访问了后端。
在 Traefik v3.7 中,Kubernetes Ingress NGINX provider 的 auth-url 注解所发起的外部认证请求,同样存在这个问题。
修复思路是把此前只作用于后端代理路径的“按前端连接隔离”应用到认证服务器上:认证子请求不再跨客户端复用连接。
与之前四个 GHSA 的区别
这是独立问题,不要和下面四个混为一谈——它们只隔离了后端代理路径上的连接绑定认证:
- GHSA-53qr-784g-cj35:开启
experimental.fastProxy时,FastProxy 连接池可能把某个用户已通过 NTLM/Negotiate 认证的后端连接交给另一个客户端。 - GHSA-qqjf-53cj-pwvv
- GHSA-cw35-4q88-3rmp:按连接创建的 NTLM/Kerberos round tripper 在多个 service 间共享,一个 service 的 TLS client 配置可能被套用到另一个 service 的后端。
- GHSA-qm9f-w54v-q2qh:客户端用 Negotiate 预认证后,把已认证的后端连接留在共享池里,被无关客户端复用,从而继承受害者身份。
自查
- 是否使用 ForwardAuth 中间件,且认证服务器是 IIS Windows Authentication(NTLM / SPNEGO Negotiate)?命中即在高风险范围内。
- 检查 ForwardAuth / IngressRoute 上的
authResponseHeaders,看它是否把用户名、组、邮箱这类身份头透传给后端。透传的头越多,越权后的影响面越大。 - v3.7 用户额外检查 Ingress(NGINX provider)上的
auth-url注解是否指向同类认证服务。 - 核对版本号是否落在
<= v2.11.59或3.0.0–3.7.15。
处置
- 升级到 v2.11.60 或 v3.7.16;仍在 v3.0–3.6 的必须先跨到受支持版本线。
- 暂时无法升级时,把认证方式换成不绑定连接的方案(Bearer Token、Basic Auth 等),使认证结果不依赖“哪条连接”。
- 收窄可信网络:限制能直接到达 Traefik 前端的来源,减少可发起认证子请求的客户端数量,降低被复用的机会。
同期其他公告
10 月这批公告里还有几条(社区公告 2026-10-07,对应 2.11.58 / 3.7.14):
- GHSA-fh26-gfpp-7xxx:无 TLS 状态的请求(HTTP/2
:scheme http)跳过 SNI 检查;仅影响用 Go 1.27 构建的版本。 - GHSA-qvj7-gq9c-hp7q:Ingress NGINX provider 的 ssl-passthrough 兄弟 HTTP router 在未经认证的情况下提供了受保护后端。
- GHSA-mwrr-6hp4-pxr6:关闭 ssl-redirect 时,Ingress-NGINX provider 在 HTTP 路由上转发了伪造的
Ssl-Client-*身份头。 - GHSA-rv2h-qh7j-xrjw:
auth-tls-secret名称仅点/横线不同时会撞名。 - GHSA-mhjw-hmjv-p99x(Medium):并发 HTTP/2、HTTP/3 流下对按连接 round tripper 的访问未加同步。
- 3.7.15(10-15):无论 HTTP 版本、在进入 muxer 之前即拒绝 CONNECT 请求;升级
x/net。 - 3.7.16 于 2026-10-20 发布,与 2.11.60 同日。
项目信息
Traefik 用 Go 编写,MIT 许可,支持动态 provider(Docker labels、Kubernetes Ingress / Gateway API / IngressRoute CRD、Consul、etcd 等),提供 ForwardAuth 中间件在内的 24 个开源 HTTP 中间件。2026 年 10 月维护两条版本线:v3.7 与 v2.11。