curl非OpenSSL后端静默忽略SSL安全选项漏洞分析摘要受影响版本已在最新的 master 版本commit2d5a063121202acaa23bb77975b2739bec4551ce以及 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错误。returnCURLE_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标志。三个漏洞中有两个不仅可以通过自定义程序也可以通过命令行利用。FINISHEDbiOK/hzhVF2yKaGc5mK8oeejIYuUYW8I3RsXQCFCiXWteYlwHYYXwn/OoRebmyRo更多精彩内容 请关注我的个人公众号 公众号办公AI智能小助手对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号网络安全技术点滴分享