Use-After-Free in OpenSSL Keylog Callback via SSL_get_ex_data() in libcurl
摘要
在libcurl中设置OpenSSL SSL_CTX_set_keylog_callback时存在释放后使用(UAF)漏洞。当通过SSL_free()释放相关的SSL对象后,回调可能被调用,导致访问悬空指针,并通过SSL_get_ex_data()可能造成崩溃或信息泄露。
受影响版本
测试环境:
- curl 8.8.0 (OpenSSL 3.3.0)
- 发布日期:2024-06-26
- 平台:Termux (Android 11, aarch64)
- OpenSSL:3.3.0(从源码构建)
复现步骤
构建以下最小C程序(使用gcc -o segv segv.c -lssl -lcrypto测试):
|
|
运行二进制文件:
|
|
是否涉及AI?
否,该漏洞是通过手动审计和测试发现的。然而,AI(ChatGPT)仅用于协助编写文档和估算CVSS/弱点分类(例如,CWE-416)。
影响
在特定条件下(当配置了密钥日志回调时),会导致段错误(DoS)。如果可能进行进一步的堆整理或ex_data滥用,可能导致代码执行。
讨论与状态更新
dfandrich (curl staff) 评论于12天前: 您的概念验证程序根本没有使用libcurl。您是在报告libcurl还是OpenSSL中的问题?
jimfuller2024 (curl staff) 评论于12天前: 您是否忘记包含curl.h示例?如果作者省略信息或说话“含糊其辞”,我们真的无法认为他们的提交有效……我看不到(curl)安全问题。
bagder (curl staff) 评论于12天前: 您是如何“发现”这个问题的?我猜涉及了AI?
回调可能在通过SSL_free()释放相关的SSL对象后被调用。
快速查看curl中的回调代码显示,我们在回调中根本不访问“相关的SSL对象”。那么这又是如何成为问题的呢?
导致通过SSL_get_ex_data()访问悬空指针和潜在的崩溃或信息泄露。
在libcurl代码中,SSL_get_ex_data()的使用次数恰好为零。
bagder (curl staff) 于12天前关闭报告并将状态更改为“不适用”。
bagder (curl staff) 于11天前请求披露此报告: 根据项目的透明政策,我们希望所有报告都被披露并公开。
brobagazzzx 评论于11天前: 明白了,感谢澄清。您是对的——这不会直接影响libcurl。感谢审核和透明度。
bagder (curl staff) 于11天前披露此报告。
报告详情
- 报告时间:2025年7月9日,UTC时间3:04
- 报告者:brobagazzzx
- 报告对象:curl
- 报告ID:#3242005
- 严重性:高(7 ~ 8.9)
- 披露时间:2025年7月9日,UTC时间13:45
- 弱点:释放后使用
- CVE ID:无
- 赏金:无
- 账户详情:无