curl非OpenSSL后端静默忽略SSL安全选项漏洞分析
·
curl非OpenSSL后端静默忽略SSL安全选项漏洞分析
摘要
受影响版本
已在最新的 master 版本(commit 2d5a063121202acaa23bb77975b2739bec4551ce)以及 mbedTLS 3.6 和 4.0 版本上进行测试。
复现步骤
在Linux系统上安装Docker,并运行 test.sh 脚本。该脚本会编译两个版本的curl:一个使用 mbedTLS 后端,另一个使用 OpenSSL 后端。随后,它通过一个自定义的C程序(这是复现漏洞所必需的)测试这三个bug,此外还会在命令行测试 EC_CURVES 漏洞。
预期输出:
=== mbedTLS ===
===========================================
curl 8.19.0-DEV (mbedTLS/4.0.0)
===========================================
setopt: No error
perform: No error
Result: VULNERABLE - silently ignored!
Setting: "INVALID_CURVE_NAME"
setopt: No error
perform: No error
Result: VULNERABLE - silently ignored!
Setting: "fake_crl.pem"
setopt: No error
perform: Failed to load CRL file (path? access rights?, format?)
Result: CORRECT - CRL check enforced
===========================================
SUMMARY
===========================================
CURLOPT_SSL_EC_CURVES VULNERABLE
CURLOPT_CRLFILE OK
FOUND 2 VULNERABILITIES
=== OpenSSL ===
===========================================
curl 8.19.0-DEV (OpenSSL/3.0.13)
===========================================
setopt: No error
Setting: "INVALID_CURVE_NAME"
setopt: No error
perform: Could not use specified SSL cipher
Result: CORRECT - EC curve validated
Setting: "fake_crl.pem"
setopt: No error
perform: Failed to load CRL file (path? access rights?, format?)
Result: CORRECT - CRL check enforced
===========================================
SUMMARY
===========================================
CURLOPT_SSL_EC_CURVES OK
CURLOPT_CRLFILE OK
No vulnerabilities found.
########################################
# CLI TEST (--curves)
########################################
=== mbedTLS CLI ===
Running: curl --curves INVALID_CURVE https://curl.se
200 -> VULNERABLE (silently ignored)
=== OpenSSL CLI ===
Running: curl --curves INVALID_CURVE https://curl.se
000 -> CORRECT (rejected invalid curve)
########################################
# RESULT
########################################
VULNERABILITIES CONFIRMED: mbedTLS ignores SSL options that OpenSSL enforces
这个问题很可能也存在于使用 Schannel 后端的Windows系统中,但未经过测试。
支持材料/参考资料
附件中包含以下文件:
- Dockerfile: 使用 mbedTLS 和 OpenSSL 后端构建 curl。
- test_ssl_options.c: 测试所有SSL选项的测试程序。
- run_test.sh: 测试脚本(在容器内运行)。
- test.sh: 构建和运行脚本(宿主机入口点)。
修复建议
修复方法应很简单:对于未实现这些特性的后端,返回 CURLE_NOT_BUILT_IN 错误。
return CURLE_NOT_BUILT_IN;
这需要:
- 每个后端声明其支持的特性。
- 在接受选项之前检查支持情况。
影响
总结
- 加密降级:
CURLOPT_SSL_EC_CURVES/--curves选项被忽略,允许服务器(或MITM攻击者)协商比预期更弱的椭圆曲线,从而可能利用已知的加密弱点。 - 静默失败:最关键的是,这些选项是静默失败的,返回
CURLE_OK并继续执行,而没有进行安全检查。应用程序无法检测到其安全要求未被强制执行。
受影响平台
所有使用受影响后端的系统。例如 OpenWrt(在新版本中用 mbedTLS 替换了 WolfSSL)、使用 Schannel 的 Windows 构建版本,以及许多物联网设备和 Docker 容器。WolfSSL 可能也存在相同的bug。
攻击面
这些bug同时影响 libcurl 应用程序(通过 curl_easy_setopt())和 curl 命令行用户(通过 --curves 和 --crlfile 标志)。三个漏洞中有两个不仅可以通过自定义程序,也可以通过命令行利用。FINISHED
biOK/hzhVF2yKaGc5mK8oeejIYuUYW8I3RsXQCFCiXWteYlwHYYXwn/OoRebmyRo
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)
更多推荐

所有评论(0)