报告 #3431180 - tool_ssls_load() 中的双重释放漏洞
报告时间线 xkernel 向 curl 提交了一份报告。10天前
摘要:
在 tool_ssls_load() 函数中存在一个双重释放错误,可能发生在第 83-84 行或第 129-130 行 (tool_ssls.c):
|
|
根本原因是第 83-84 行没有将 shmac 和 sdata 重置为 NULL。
如果会话格式不正确,将触发双重释放。
该问题的发现和报告生成均未使用 AI。
受影响版本: 该漏洞在 2025年1月9日的提交 (https://github.com/curl/curl/commit/515a21f350b89f0676e5df7f904c62c8f67be377) 中被引入。 因此,可能影响 v8.12.0 到 v8.17.0 版本。该漏洞仅影响 curl 工具。
复现步骤:
- 从源代码构建 curl-8_17_0。(我的配置是:
"./configure --enable-debug --with-openssl --enable-static --disable-shared --enable-ssls-export")。--enable-ssls-export是启用漏洞代码的关键。 - 创建一个格式错误的会话文件(请参考附件)。逻辑是让代码在通过
curlx_base64_decode()重置shmac和sdata之前继续执行。我选择直接利用位于 https://github.com/curl/curl/blob/master/src/tool_ssls.c#L81-L91 的内容检查。 - 运行 curl 工具:
./src/curl --ssl-sessions .curl_ssl_sessions https://example.com。就是这样。
注意: 老实说,当我的工具发现这个漏洞时,我既高兴又有点“失望”,因为 SSLS-EXPORT 功能再次被标记为 EXPERIMENTAL(实验性)。 我理解项目应该针对新功能可能存在的不稳定向用户提供适当的提醒。但作为一名贡献者,我真诚希望维护者能基于代码事实和实际范围进行评估,而不是政策标签。我相信,这样做会使贡献者更有动力广泛测试新功能,以帮助 curl 更好地发展。 无论如何,我负责任地在此报告了该漏洞及其 PoC,并通过 PR (https://github.com/curl/curl/pull/19588) 提交了相应的补丁,没有提及任何敏感词汇。
支持材料/参考资料: 格式错误的 PoC 会话文件 (.curl_ssl_sessions)。
[附件 / 参考资料] .curl_ssl_sessions
影响 摘要: 攻击者可以通过特制的 SSL 会话文件触发双重释放漏洞,导致拒绝服务或其他潜在危险行为。 攻击先决条件:
- 需要启用 SSLS-EXPORT 功能。
- 攻击者能够影响 SSL 会话文件的内容,或能够影响会话数据的生成过程。
附件: 1个附件 F5019678: .curl_ssl_sessions
讨论记录
bagder (curl 工作人员) 发表了一条评论。10天前
感谢您的报告! 我们将花些时间调查您的报告,并尽快给您回复详情和可能的后续问题!很可能在接下来的24小时内。 我们始终致力于尽快修复报告的问题。严重性为低或中的问题,我们会在常规发布周期内将其合并到下一个版本中。只有针对更严重的问题,我们才可能提前发布修复。
bagder (curl 工作人员) 发表了一条评论。10天前
我理解项目应该针对新功能可能存在的不稳定向用户提供适当的提醒。但作为一名贡献者,我真诚希望维护者能基于代码事实和实际范围进行评估,而不是政策标签。
我不太明白。我们将某些功能作为 EXPERIMENTAL 引入,是为了在实际使用前对其进行测试和完善,所以这正是预期流程的运作方式,我们对此表示赞赏。这给了我们尝试新事物的勇气,而不必担心一出错就会天下大乱。如果我们了解到需要重构和修改行为,这也能让我们在不惩罚整个世界的情况下进行修改。 正是因为有了这个标签和对在生产中使用它的强烈劝阻,我们才不认为 EXPERIMENTAL 代码中的问题是安全问题。
jimfuller2024 (curl 工作人员) 发表了一条评论。10天前
补充一下 @bagder 所说的 - 拥有 EXPERIMENTAL 标签意味着我们可以在将坏东西强加给整个世界之前发现它……我明白你的意思,这可能会降低分析积极性(或促使产生错误的态度,例如你可能可以等到 EXPERIMENTAL 标签被移除再报告)……或者,这本来可以是一个针对该项目的 PR。 值得一提的是,我们确实非常感谢清晰明了的报告(就像你的报告一样)。
xkernel 发表了一条评论。10天前
感谢您的回复! 我一直尊重您的选择。我只是想表达,这也会让贡献者在测试这些功能时缺乏足够的成就感。 特别是对于安全问题,这些问题通常无法通过预期/正常使用触发。在早期阶段发现它们实际上是在阻止未来潜在的真实影响,但这尚未得到充分认可,这有点令人受伤。仅此而已。
xkernel 发表了一条评论。10天前
只是一个小小的抱怨哈哈,没关系,我希望 curl 越来越好。
bagder (curl 工作人员) 关闭了报告并将状态更改为信息性。10天前
考虑到问题出现在 EXPERIMENTAL 代码中,因此不被视为安全问题。
bagder (curl 工作人员) 发表了一条评论。10天前
@xkernel 顺便问一下,你用来做所有这些出色发现的是什么工具?
xkernel 发表了一条评论。10天前
我仍在为研究目的开发它。其背后的基本技术构件是符号执行。还有一个模糊测试工具在开发中,但它需要针对特定目标/选项进行一些配置。
bagder (curl 工作人员) 请求披露此报告。10天前
根据项目的透明政策,我们希望所有报告都被披露并公开。
bagder (curl 工作人员) 披露了此报告。9天前
报告详情 报告时间 2025年11月18日,UTC 时间上午11:19 报告者 xkernel 报告给 curl 参与者 Report Id: #3431180 状态 信息性 严重性 未评级 (—) 披露时间 2025年11月18日,UTC 时间下午11:32 漏洞类型 双重释放 CVE ID 无 赏金 无 账户详情 无