curl 8.23.0 修 24 个漏洞:HTTP/2 上传 UAF 影响 8.12.0–8.22.0
curl 8.23.0 于 2026-10-14 发布,同时修复 24 个安全漏洞,来源为 curl.se 安全公告与 Daniel Stenberg 的博客。本次发布把发布周期从 8 周缩短到 6 周,以便尽快合并修复。
受影响的组件既包括 libcurl,也包括 curl 命令行工具,具体取决于单个漏洞。下面按 CVE 拆分。
CVE-2026-92392:HTTP/2 上传 use-after-free(HIGH)
这是本次唯一被评为 HIGH 的漏洞。
应用程序通过 HTTP/2 向服务器上传数据时,curl 需要处理服务器发来的 RST_STREAM 帧。当该帧的 reason 为 HTTP_1_1_REQUIRED 或 REFUSED_STREAM 时,curl 的处理逻辑出错,导致 struct Curl_easy 对象被 use-after-free。
该 UAF 在满足一系列特定条件时被验证可转为远程代码执行(RCE),但条件相当苛刻:
- 攻击者需知道 curl 版本与结构布局,以推导偏移
- 需要知道目标架构细节
- 需要兼容的 libc 分配器与堆布局
- 需要特定的 nghttp2 与 OpenSSL/TLS 1.3 行为(包含 session ticket 分配带来的影响)
- 需要固定的 CA bundle
- 需要两个并行传输及其调度时序
- 需要正确校准的 libc 泄漏与符号偏移
- 利用受约 23 字节的短命令约束
因此虽然理论上可以转成 RCE,野外触发极难,最终评为 HIGH 而非 CRITICAL。
被利用前提:受害者真正向恶意服务器上传数据,且服务器证书有效;上传大小约为 135KB。
受影响版本:curl 8.12.0 至 8.22.0(含)。
不受影响:
= 8.23.0- 8.20.X 分支
>= 8.20.2 - 8.16.X 分支
>= 8.16.2 - 8.14.X 分支
>= 8.14.3
该漏洞同样影响 curl 命令行工具。
CVE-2026-87866:wolfSSL 公钥 pinning 绕过
使用 wolfSSL 构建时,curl 可能把 pinned 公钥哈希成功匹配到一个 peer 实际并不持有的 key。原因是被篡改的 validity length 字段导致重新解析证书时提取到了另一个嵌入 key。
仅在使用 wolfSSL 构建时存在,且依赖 wolfSSL 接受畸形证书的 bug。不影响命令行工具。
受影响版本:7.43.0–8.22.0。
CVE-2026-92391:curl_mime_free 递归栈溢出
通过公开 API 构造深层嵌套的 multipart MIME 结构后,在正常清理阶段调用 curl_mime_free,会因递归过深导致无限栈帧分配,最终使宿主进程崩溃。
受影响版本:7.56.0–8.22.0,不影响命令行工具。
规避措施:避免使用 MIME API。
CVE-2026-94266:CURLINFO_EFFECTIVE_URL 泄漏凭据
libcurl 可能在 curl_easy_getinfo() 的 CURLINFO_EFFECTIVE_URL 中返回带凭据的 URL,即使请求的 URL 与重定向后的 URL 都不含凭据。当 curl 从 .netrc 文件读取凭据时可能发生。
受影响版本:7.62.0–8.22.0。
CVE-2026-92387:控制响应末行缺失导致死循环
恶意的 FTP/IMAP/POP3/SMTP 服务器可以永久省略最后一行控制响应,从而完全绕过 curl 配置的传输超时,无限阻塞同一 multi-handle 上的所有并发传输。
受影响版本:8.10.0–8.22.0。
规避措施:避开 ping-pong 协议。
CVE-2026-107928:GnuTLS 下 WebSocket 上传信息泄漏
使用 GnuTLS 构建时,恶意 WebSocket 服务器可以让 curl 发送超出其发送缓冲区的内存。根因是 gnutls_record_send() 在被阻塞后返回的字节数比传入的更多,导致越界读。
触发条件:TLS 发送先遇到 EAGAIN,随后是自动的 WebSocket PONG 响应。
仅影响 GnuTLS 后端,不受影响其他 TLS 后端。受影响版本:7.86.0–8.22.0。
修复建议
按优先级:
- 升级到 curl 8.23.0;
- 给本地版本打补丁后重新编译;
- 针对 UAF,不使用 HTTP/2。
项目信息
- curl 官方仓库:
- 安全公告列表: