通过CURL_CA_BUNDLE环境变量实现TLS信任模型静默劫持导致中间人攻击
漏洞概述
curl存在静默中间人攻击漏洞,由于其设计隐式信任CURL_CA_BUNDLE环境变量中指定的CA证书路径。该机制允许攻击者在没有任何用户警告或通知的情况下劫持curl的整个TLS信任模型,从根本上违反了HTTPS连接的安全承诺。
技术细节
受影响版本
- curl/libcurl版本:8.15.0
- 平台:x86_64-pc-linux-gnu
- 发布日期:2025-07-16,安全补丁:8.15.0-1
漏洞原理
curl在处理信任存储替换时存在设计缺陷。当CURL_CA_BUNDLE环境变量被设置时,curl会静默使用该路径替换系统默认信任存储,而不将此操作视为需要向用户明确警告的高度安全敏感操作。这种静默替换破坏了HTTPS安全模型。
复现步骤
-
准备两个终端
-
在第一个终端中安装并运行mitmproxy:
1 2sudo apt install mitmproxy mitmproxy -
在第二个终端中设置环境变量并执行curl请求:
1 2export CURL_CA_BUNDLE=~/.mitmproxy/mitmproxy-ca-cert.pem curl --proxy http://localhost:8080 https://example.com
漏洞验证
- 在curl终端中:命令成功执行且无任何SSL/TLS错误,证明curl已静默接受伪造CA并错误报告连接安全
- 在mitmproxy窗口中:可看到example.com的HTTPS流量以明文显示,证明MITM攻击成功,连接机密性和完整性完全被破坏
影响分析
严重性:关键
-
完全丧失机密性和完整性:攻击者可读取和修改curl通过HTTPS连接发送或接收的所有数据,包括:
- 登录凭据
- API密钥和认证令牌
- 会话cookies
- 个人和财务数据
-
制造虚假安全感:用户看到https://认为连接安全且已验证,但curl已秘密违反此安全承诺
相关参考
- CWE-295:证书验证不当
- 漏洞根源:src/tool_operate.c文件中的环境变量处理逻辑
项目方回应
curl开发团队认为这不是安全漏洞,理由包括:
- 如果攻击者能够操纵运行curl的进程环境,那么所有安全假设都已失效
- 攻击者可以操纵PATH或设置LD_PRELOAD等变量实现更直接的攻击方式
- curl按照文档设计运行
报告状态最终被标记为"不适用"并公开披露。