OpenSSL HTTP/3 bogus CURLINFO_TLS_SSL_PTR
摘要
curl_easy_getinfo 的 CURLINFO_TLS_SSL_PTR 在 OpenSSL HTTP/3 连接中返回无效的 SSL 连接指针。使用此 SSL 连接会导致崩溃,并可能产生其他影响。此问题在 libcurl 8.14.1 中未出现,表明该漏洞存在于 libcurl 本身(或 libcurl 8.14.1 未触发其他支持库中的漏洞)。一些调试输出表明这可能是一个释放后使用/悬空指针问题。如果是这样,该问题可能导致远程代码执行。在撰写本报告时,这一点尚未得到确认。
受影响版本
- 8.15.0(发布版)
- 8.15.1-DEV(7c23e88d17e0939b4e01c8d05f430e167e148f4b)
复现步骤
- 使用 OpenSSL 3.5.1 以及足够新的 nghttp2、nghttp3 和 ngtcp2 编译 libcurl(
--with-openssl --with-nghttp2 --with-ngtcp2 --with-nghttp3)。 - 使用
-fsanitize=address编译以下概念验证应用:
|
|
- 执行 PoC:
|
|
影响
- 至少:访问 HTTP/3 站点时导致拒绝服务。
- 潜在:如果返回的指针指向已释放的内存,可能导致内存损坏。根据目标平台的不同,可能实现远程代码执行。需要进一步分析以确定完整影响。
支持材料/参考
本报告不含 AI 内容,供您愉快阅读。停止垃圾信息!
时间线
- 2025年7月20日 5:10am UTC:nyymi 提交报告。
- 2025年7月20日 6:05pm UTC:nyymi 发表评论,讨论如何触发回调。
- 2025年7月20日 7:28pm UTC:nyymi 更正 OpenSSL 3.5 中 SSL 结构类型。
- 2025年7月20日 8:54pm UTC:nyymi 分析漏洞影响,认为可能低于最初估计。
- 2025年7月20日 9:07pm UTC:bagder(curl 员工)评论,认为使用
SSL_get_verify_result()的应用已放弃安全性。 - 2025年7月20日 10:51pm UTC:nyymi 发现潜在的 RCE 向量,但需要堆地址信息。
- 2025年7月21日 12:08am UTC:nyymi 提供本地 PoC,模拟成功构造虚假 SSL 对象导致代码执行。
- 2025年7月21日 3:34pm UTC:jimfuller2024(curl 员工)评论需要更多时间分析。
- 2025年7月21日 8:51pm UTC:jimfuller2024 确认在 8.15.0 上复现。
- 2025年7月21日 9:25pm UTC:jimfuller2024 确认理论漏洞有效。
- 2025年7月21日 9:58pm UTC:nyymi 澄清
SSL_get_verify_result()与 RCE 向量无关。 - 15天前:nyymi 发现不需要堆地址信息的回调函数,但触发条件不现实。
- 13天前:bagder 总结漏洞利用条件复杂,不认为是现实世界安全问题。
- 9天前:bagder 计划将报告标记为信息性。
- 8天前:bagder 关闭报告,状态改为信息性,并提供修复 PR 链接。
- 8天前:报告被披露。
报告详情
- 报告 ID:#3261310
- 严重性:无评级(—)
- 披露时间:2025年7月28日 10:48pm UTC
- 弱点:释放后使用
- CVE ID:无
- 赏金:无
该报告已根据项目透明政策公开。