curl 在处理 HTTP/2 上传时的一个漏洞允许恶意服务器在接收上传时破坏客户端的内存,而报告该漏洞的研究人员将其转化为上传机器上的代码执行。
curl 项目于 10 月 14 日在 curl 8.23.0 中修复了该漏洞。接管客户端需要对其构建和内存布局有准确的了解,而 curl 预计真正的攻击会以崩溃结束。
该漏洞被追踪为 CVE-2026-92392,影响 curl 和 libcurl 8.12.0 到 8.22.0,包括命令行工具和许多其他程序用于传输的库。curl 在其四级评分中将其评为高危,这是自 2023 年 10 月 SOCKS5 堆溢出以来的第一个高危漏洞。该项目将发布周期缩短了两周以发布修复。
攻击从服务器端运行。客户端必须通过 HTTP/2 向攻击者控制的服务器上传大约 135KB 的文件,并且服务器的证书必须通过客户端的检查。libcurl 默认在服务器提供时为 https:// URL 协商 HTTP/2,并且该库是以支持 HTTP/2 构建的。
该漏洞自 2025 年 2 月的 curl 8.12.0 以来在每个 curl 发布中都存在。没有源报告使用该漏洞的攻击。报告者的 HackerOne 文章中包含恶意服务器脚本和一个被描述为重现代码执行的 Docker 容器,于 10 月 14 日与公告一起公开。
安装建议及临时措施
升级到 8.23.0 或将修复提交应用到本地构建。curl 的机器可读公告还列出了三个旧分支上的修复版本,项目表示将与 8.23.0 一起发布更新的 Rock-solid curl 版本,这是为有支持合同的客户提供的长期支持线:
curl 和 libcurl 8.12.0 到 8.22.0:升级到 8.23.0
8.14.x 分支:8.14.3
8.16.x 分支:8.16.2
8.20.x 分支:8.20.2
Debian 13 (trixie):8.14.1-2+deb13u7 通过 DSA-6558-1,依据 Debian 的跟踪器。Debian 12 (bookworm) 不包含易受攻击的代码。
此次发布修复了总共 24 个 CVE。其他 23 个被评为低危。
如果您暂时无法更新,curl 的建议是不使用 HTTP/2。--http1.1 选项请求工具使用 HTTP/1.1,而应用程序设置 CURLOPT_HTTP_VERSION 为 CURL_HTTP_VERSION_1_1。curl 的文档将该设置称为请求,因为可能会重用另一个版本上的现有连接。
libcurl 中的 HTTP/2 支持是一个构建选项。没有该选项的构建无法协商 HTTP/2,因此无法到达公告中描述的上传路径。
恶意服务器如何将漏洞转化为代码执行
curl 的首席开发者 Daniel Stenberg 在发布时发布的帖子中解释了该漏洞,公开报告列出了代码路径。HTTP/2 通过一个连接传输多个数据,libcurl 用一个称为 easy handle 的对象跟踪每个传输。
在上传过程中,服务器通过将 HTTP/2 窗口设置为零来暂停传输,返回部分响应,然后在保持连接打开的同时重置流。curl 将重置视为重试的理由。
在清理过程中,curl 首先告诉 HTTP/2 层传输已完成,然后将剩余的未发送上传数据刷新到同一连接中。由于没有注册传输,这些剩余字节被读取为新请求。报告者在上传文件中包含的行模式使它们看起来像请求行。当它们这样做时,会打开一个新流,存储对 easy handle 的指针。
重试在新的 HTTP/1.1 连接上完成,应用程序释放了该句柄。旧连接仍持有指针,并在服务器在该流上发送帧时使用它,这可能发生在程序退出时。
在报告者的利用中,服务器发送的数据落在已释放句柄曾使用的内存中。发送的请求泄露本地地址,服务器需要这些地址来击败地址空间布局随机化 (ASLR)。该内存中的函数指针被服务器的字节覆盖,curl 然后调用它。
根据 curl 的公告,代码执行需要攻击者知道目标的确切 curl 版本、架构、libc 分配器和堆布局,以保持两个并行传输的正确时机,并将有效负载适配到大约 23 字节。“攻击尝试的最可能结果只是崩溃,”Stenberg 写道,将成功的机会评估为微乎其微。这就是为什么 curl 将该漏洞评为高危而非严重。
curl 使用四个严重性级别,并且不发布 CVSS 分数。国家漏洞数据库截至 10 月 14 日尚未分析该记录。
修复是 Stefan Eissing 在 lib/multi.c 中的六行重排序。HTTP/2 层现在在剩余上传数据被刷新后放弃对句柄的引用,而不是在之前。
该报告于 9 月 15 日通过 HackerOne 发送给 curl,安全团队在几个小时内确认了它,Stenberg 表示。10 月 7 日,该项目预先宣布将在下一个版本中发布高危修复,将其周期从八周缩短到六周。
curl 将该发现归功于“Luna with Claude, Anthropic。”Stenberg 指出报告者是 Anthropic 的 Luna Tong,表示该发现是通过公司的新 OSS 扫描器获得的,并推测其 AI 模型参与了其中。
Anthropic 于 10 月 8 日推出了 OSS 扫描器,作为一种可选服务,使用其模型扫描注册的开源项目,并在没有人工审核的情况下通过电子邮件发送结果,每个报告附带一个重现者,并在可用时附带候选补丁。curl 的报告是在该公共发布三周之前。Anthropic 的发布帖子引用 Stenberg 说,扫描器发现了“过去几年中报告的最严重的 curl 漏洞之一”,但没有具体说明。
同一维护者在 2025 年 7 月写道,该年约五分之一的 curl 安全提交被他称为 AI 垃圾,只有大约 20% 的提交被证明是真实的。
curl 已花费数年时间减少对句柄的内部指针数量,转而使用它查找的标识符。