Curl工具中tool_ssls_load()函数的双重释放漏洞分析

本文详细分析了curl工具中tool_ssls_load()函数存在的双重释放漏洞,包括漏洞触发条件、影响版本范围、复现步骤以及相应的修复方案,涉及SSL会话文件处理和内存管理技术细节。

报告 #3431180 - tool_ssls_load()中的双重释放漏洞 | HackerOne

摘要

tool_ssls_load()函数中存在双重释放漏洞,可能发生在第83-84行或第129-130行(tool_ssls.c):

1
2
curl_free(shmac);
curl_free(sdata);

根本原因是第83-84行没有将shmacsdata重置为NULL。如果会话格式异常,将触发双重释放。

未使用AI来发现此问题或生成报告。

受影响版本

该漏洞在2025年1月9日的提交515a21f350b89f0676e5df7f904c62c8f67be377中引入。因此,可能影响v8.12.0~v8.17.0版本。仅影响curl工具。

复现步骤

  1. 从源代码构建curl-8_17_0(配置为:"./configure --enable-debug --with-openssl --enable-static --disable-shared --enable-ssls-export")。--enable-ssls-export是启用易受攻击代码的关键。

  2. 创建一个格式异常的会话文件(请参考附带的文件)。逻辑是使代码在通过curlx_base64_decode()重置shmacsdata之前继续执行。我的选择是直接利用https://github.com/curl/curl/blob/master/src/tool_ssls.c#L81-L91处的内容检查。

  3. 运行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会话文件触发双重释放漏洞,导致DoS或其他潜在危险行为。

攻击前提条件

  • 需要启用SSLS-EXPORT功能
  • 攻击者可以影响SSL会话文件内容,或可以影响会话数据生成过程

附件

1个附件 F5019678: .curl_ssl_sessions

bagder curl staff 发表了评论。8天前

感谢您的报告! 我们将花些时间调查您的报告,并尽快向您提供详细信息和可能的后续问题!很可能在接下来的24小时内。

我们始终努力尽快修复报告的问题。严重性为低或中的问题我们会在普通发布周期中合并到下一个版本中。只有更严重的问题我们可能会提前发布修复。

bagder curl staff 发表了评论。8天前

我理解项目应该因新功能可能的不稳定性而向用户提供适当的提醒。但作为贡献者,我真诚希望维护者能基于代码事实和实际范围进行评估,而不是政策标签。

我不确定我理解。我们将一些功能作为EXPERIMENTAL引入,以便在它们"真正"使用之前进行测试和优化,所以这正是按预期工作的过程,我们对此表示赞赏。它给了我们勇气去做新的事情,而不必担心在第一次犯错时世界会崩溃。它还允许我们在了解到需要时重构和修改行为,而不会惩罚整个世界。

由于标签和强烈建议不要在生产中使用,我们不将EXPERIMENTAL代码中的问题视为安全问题。

jimfuller2024 curl staff 发表了评论。8天前

补充@bagder所说的 - 拥有EXPERIMENTAL标签意味着我们可以在将其强加给整个世界之前捕捉到不好的事情…我能理解您的意思,这可能会抑制分析(或激发错误的态度,例如您可能等到EXPERIMENTAL标签被移除)…或者这可能是针对项目的PR。

无论如何,我们确实感谢清晰明了的报告(正如您的报告一样)。

xkernel 发表了评论。8天前

感谢您的回复! 我始终尊重您的选择。我只是想表达,这也会让贡献者在测试它们时缺乏足够的成就感。

特别是对于安全问题,这些问题通常无法通过预期/正常使用触发。在早期阶段发现它们实际上阻止了未来潜在的真正影响,但这一点尚未得到充分认可,这有点令人伤心。仅此而已。

xkernel 发表了评论。8天前

只是小小的抱怨哈哈,没关系,我希望curl越来越好。

bagder curl staff 关闭了报告并将状态更改为Informative。8天前

由于在EXPERIMENTAL代码中,不被视为安全问题。

bagder curl staff 发表了评论。8天前

@xkernel 顺便问一下,您使用什么工具来进行所有这些出色的发现?

xkernel 发表了评论。8天前

我仍在为研究开发它。其背后的基本技术构建块是符号执行。还有一个fuzzing工具在开发中,但它需要针对特定目标/选项进行一些配置。

bagder curl staff 请求披露此报告。8天前

根据项目的透明政策,我们希望所有报告都被披露并公开。

bagder curl staff 披露了此报告。8天前

报告于 2025年11月18日,UTC时间上午11:19

报告者 xkernel

报告给 curl

参与者

报告ID #3431180

信息性

严重性 无评级(—)

披露时间 2025年11月18日,UTC时间下午11:32

弱点 双重释放

CVE ID 无

奖金 无

账户详情 无

看起来您的JavaScript被禁用了。要使用HackerOne,请在浏览器中启用JavaScript并刷新此页面。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计