DC娱乐网

Claude Mythos Preview发现潜藏29年的“Squidbleed”漏洞

安全研究人员在Squid代理软件中发现了一个类似Heartbleed的堆缓冲区越界读取漏洞,该漏洞自1997年以来一直存

安全研究人员在Squid代理软件中发现了一个类似Heartbleed的堆缓冲区越界读取漏洞,该漏洞自1997年以来一直存在,可悄无声息地泄露同一代理上其他用户的HTTP头信息(包括密码和API密钥)。Calif.io的安全研究人员披露了这个名为Squidbleed的关键内存泄露漏洞,其发现得到了Anthropic公司Claude Mythos Preview AI模型的协助。

该漏洞影响所有默认配置下的Squid版本,且已潜伏近三十年之久,甚至早于Squid在GitHub仓库中的所有可用提交记录。

29年历史的Squidbleed漏洞

Squidbleed(CVE编号待定)是一个存在于Squid FTP目录列表解析器中的堆缓冲区越界读取漏洞。当被利用时,会导致Squid读取超出堆分配缓冲区的内存,并将这些残留数据作为FTP目录列表响应的一部分返回,其中可能包含其他用户的HTTP请求、授权头信息或API密钥。

该漏洞可追溯至1997年1月18日的一个提交,该提交添加了处理NetWare FTP服务器的逻辑,这些服务器在文件修改时间戳和文件名之间放置了四个空格。修复代码引入了一个while(strchr(w_space, *copyFrom))循环,旨在跳过额外的空白字符。

然而存在一个关键疏忽:根据C11 §7.24.5.2标准,C语言中的strchr函数将空终止符(\0)视为搜索字符串的一部分。当时间戳后没有文件名时,copyFrom指向一个空字节,但strchr不会停止而是返回非NULL值,导致++copyFrom递增超过缓冲区边界进入相邻的堆内存。

经AddressSanitizer (ASAN)验证,确认存在最多4,065字节的堆越界读取。

Squid在malloc之上使用按大小分类的空闲列表。当4KB缓冲区被释放时,会被回收而不清零。如果受害者的HTTP请求先前存储在MEM_4K_BUF中(Squid 7.x上大多数标准HTTP请求都是这种情况,其中CLIENT_REQ_BUF_SZ设置为4096),只有前几十个字节会被简短的FTP列表行覆盖。缓冲区的其余部分仍保留受害者的残留请求数据。

控制可从代理访问的FTP服务器的攻击者,可以通过发送不含文件名的畸形目录列表来触发越界读取,导致Squid返回受害者的回收HTTP数据(包括Authorization头信息和会话令牌)作为FTP响应的一部分。

Squidbleed攻击面

攻击面具有特定条件但切实存在:

必须启用FTP支持(默认开启)攻击者必须控制可从代理TCP端口21访问的FTP服务器(包含在Squid默认的Safe_ports ACL中)受害者流量必须是明文HTTP或通过TLS终止代理设置(HTTPS CONNECT隧道不透明且不受影响)

研究人员通过共享Squid代理从登录页面泄露Authorization头信息证实了该攻击。GitHub上已公开PoC。

修复方案是在每次strchr调用前添加单行空值检查:

该补丁已合并到Squid代码库。强烈建议管理员禁用FTP支持(除非明确需要),因为包括所有基于Chromium的浏览器在内的大多数现代浏览器多年前就已放弃FTP支持,使得合法的FTP代理流量极为罕见。

该发现是通过指导Claude Mythos Preview使用多Agent分析调查Squid的FTP状态机实现的。该模型几乎立即标记出了strchr空终止符行为,展示了基于C标准参考训练的LLM如何能发现人类代码审查容易忽略的微妙API契约违规。

此前该团队曾披露使用OpenAI的Codex Cyber发现的隐藏HTTP/2漏洞,这标志着AI辅助开源安全审计的更广泛趋势。