Squid 这一部署最广泛的互联网代理服务器之一中,一处靠一行代码存活了 29 年、经历多次发布、审计和重写的漏洞,已在三次独立复现、且都发生在三个月内之后被修补,其中一次是在 AI 模型阅读代码的指导下发现的。
漏洞本身
Squidbleed (CVE-2026-47729) 是 Squid FTP 目录列表解析器中的堆缓冲区越界读取,位于针对 NetWare FTP 服务器的兼容代码中,可追溯到 1997 年 1 月 18 日的一次提交。根因是典型的 C 语言陷阱:strchr() 搜索空终止符时会返回指向终止符本身的指针,而不是 NULL,因此一个跳过空白字符的循环会越过字符串末尾,读到相邻的堆内存。该漏洞的 CVSS 评分为 7.5,影响默认配置下的所有 Squid 版本——FTP 支持默认开启,21 端口也位于默认的 Safe_ports ACL 中。
哪些人会受影响
如果攻击者控制了一个可通过共享 Squid 代理访问的 FTP 服务器,就可以泄露其他用户流量的片段——可提取的奖品包括明文 HTTP 请求,以及其中的密码、Cookie 和 API 密钥。作为不透明的 CONNECT 隧道转发的 HTTPS 流量则无法读取,这限制了暴露范围,仅涉及明文 HTTP 和终止 TLS 的配置——但在企业网络和运行共享代理的 ISP 中,这仍是一块相当可观的用户群。
漏洞如何被发现
Aisle Research 的 Pavel Kohout 于 2026 年 3 月 4 日率先报告了该漏洞。4 月 17 日,Calif.io 的 Lam Jun Rong 又独立报告了它——他是在 Anthropic 面向经过审查的关键基础设施防御者的 Project Glasswing 计划下,把 Anthropic 的 Claude Mythos 放到 Squid 的 FTP 状态机上后发现的。Calif 表示,这个模型几乎立刻就捕捉到了这个异常,并指出“strchr(w_space, '\0') according to C11 §7.24.5.2 返回的是非 NULL”。随后,Youssef Awad 于 5 月 7 日提交了第三份报告。这个双行空值检查修复已于 4 月合并,并在 6 月 8 日随 Squid 7.6 发布,官方通告则于 6 月 23 日发布。
修复与启示
除了打补丁之外,Calif 的建议很直接:关闭 FTP。基于 Chromium 的浏览器多年前就已移除 FTP,大多数网络几乎不再传输这类流量。这一事件也呼应了近期在 FFmpeg 等项目中的 AI 辅助发现——那些埋在旧协议代码里的解析器漏洞,数十年都不为人所见,一旦 AI 加入审计,便会在数月内浮出水面。
