Traefik 3.7.17 修了一个 CVSS 7.5 的洞:未认证的 Negotiate/NTLM 头就能把后端连接槽位耗光

GHSA-xv5x-242w-7hf7:从 3.7.14 起,带 NTLM/Negotiate 的 Authorization 头会让 Traefik 提前占用一条后端连接且不回收,匿名用户批量短连接即可耗光资源。

11 月 2 日,Traefik 发了 3.7.17。这种补丁版本通常没人看,但它修的是 GHSA-xv5x-242w-7hf7 —— CVSS 7.5,攻击向量是网络,不需要任何权限,也不需要用户交互。

v3.7.17 的发布页:CVE 修复与迁移提示排在最前

更少见的是:公告旁边挂着一行小字,「This report was submitted with AI assistance」。我第一次在正式安全公告里看到这句话。

GHSA-xv5x-242w-7hf7:High,7.5,影响 2.11.58–2.11.60 与 3.7.14–3.7.16

漏洞的形状

先把机制说清楚,因为它的「聪明」之处正在于它利用的是正常功能:

  1. 从 v2.11.58 / v3.7.14 开始,Traefik 为了支持 NTLM 与 Kerberos 这类连接绑定的认证,会在看到带 Authorization: NTLM 或 Negotiate 的请求时,提前分配一条专用后端连接
  2. 分配发生的前提仅仅是「有这么一个头」,不需要凭证有效,也不需要后端回过挑战
  3. 客户端断开后,这条空闲的后端连接和它的 goroutine 不会被释放
  4. 于是:匿名用户只要发一批「发个头就断开」的短连接,就能持续消耗内存、文件描述符和后端连接

FastProxy 里有同样的模式。而 v3.6 及更早、v2.11.57 及更早的版本不受影响 —— 它们只在后端真的回了 WWW-Authenticate 挑战之后才分配传输层。

为什么这类漏洞特别值得记住

它不难利用,但它很难在设计阶段想到。为一个认证方案做的「提前准备」,在正常路径下完全正确;只有把「提前」和「不回收」放在一起,才变成拒绝服务。

我见过太多人(包括我自己)在给反向代理做加固时,检查的是鉴权中间件、TLS、header 透传,很少有人会去看「哪些请求会让代理提前分配资源」。这一条补上了这个视角:

资源分配越早,攻击者能触发的代价就越低。

修复与自检

修好的版本是 3.7.17(v3 线)与 2.11.61(v2 线)。升级之外,还可以顺手做两件事:

  • 在边缘挡掉可疑的 Authorization 头:如果你的服务根本不用 NTLM / Kerberos,直接在前一层拒绝这两个 scheme,这类「提前分配」永远触发不到
  • 盯住后端连接数:代理侧的活跃连接数突增而请求量没变化,是这类问题的典型信号

Traefik 的迁移文档:3.7.17 有需要读的条目

3.7.17 还修了一批东西:lego 升到 v5.6.0、go-jose 到 v4.1.6、quic-go 到 v0.64.1;wrapped ResponseWriter 里被破坏的 flush / hijack / deadline;构建中间件时解析 secret 引用;新增「限制请求头值个数」的入口点选项。如果你还在等 3.8,rc.1 里已经有按 router 配置响应超时、ACME reusePrivateKey、TLSRoute 的 BackendTLSPolicy。

Traefik 的博客

一点情绪

我写这个漏洞分析时想到的是:我们把「聪明」的默认值交出去太多了。 NTLM 支持是好功能,它让一堆老企业应用能平滑迁到反向代理后面;但为了让它「顺畅」,代理必须在看到头的瞬间就开始准备。顺畅与安全之间那条线,往往只有出事之后才看得见。

以及,那个「AI 协助提交」的小标注。我不觉得它是减分项 —— 有人(或某个工具)读懂了代码里资源分配的时序,把问题写清楚了,维护者一周内出了补丁。这件事的每一个环节都值得肯定。

← 返回文章列表

评论

…