通过CURL_CA_BUNDLE环境变量实现TLS信任模型静默劫持导致中间人攻击
摘要
curl因设计缺陷容易遭受静默中间人攻击,该漏洞源于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
漏洞复现步骤
准备两个终端
第一个终端:
- 安装mitmproxy工具:
sudo apt install mitmproxy - 运行mitmproxy
- 点击n
第二个终端:
- 在终端中输入命令:
1export CURL_CA_BUNDLE=~/.mitmproxy/mitmproxy-ca-cert.pem - 通过mitmproxy代理运行curl发起HTTPS请求:
1curl --proxy http://localhost:8080 https://example.com
漏洞验证
第二个curl终端: 命令成功执行且没有任何SSL/TLS错误,证明curl已静默接受伪造CA并错误报告连接安全。
第一个mitmproxy终端: 可看到example.com的HTTPS流量以明文形式显示,证明中间人攻击成功,连接的机密性和完整性已完全被破坏。
根本原因分析
该安全问题的根本原因在于curl处理信任库替换的方式。curl允许通过环境变量替换系统默认信任库,但未将此操作视为需要明确警告用户的高度安全敏感操作。正是这种静默替换破坏了HTTPS安全模型。
影响评估
影响总结: 此设计漏洞的影响为严重级别,允许通过中间人攻击完全拦截和操纵HTTPS流量。
具体影响
-
完全丧失机密性和完整性: 攻击者可读取和修改curl通过HTTPS连接发送或接收的所有数据,包括:
- 登录凭证(用户名、密码)
- API密钥和认证令牌
- 会话Cookie
- 个人和财务数据
-
制造虚假安全感: 这是最危险的影响。用户看到https://并相信其连接是安全且经过验证的,然而curl已秘密违反了此安全承诺。curl未能警告用户信任库已被替换,使其从安全工具转变为攻击向量。
技术支持材料
- CWE-295: 不当证书验证
- 文件来源: src/tool_operate.c
项目方回应
curl工作人员认为:“如果攻击者可以操纵运行curl的进程环境,那么所有安全保证都将失效。攻击者可以操纵PATH或设置LD_PRELOAD或任何其他允许更直接攻击方式的变量。这是curl按文档操作的行为,不认为这是一个漏洞。”
报告最终被标记为"不适用"并关闭,但根据项目透明度政策,报告已被公开披露。
报告详情
- 报告ID: #3418776
- 严重程度: 严重(9~10分)
- 弱点: 不当证书验证
- CVE ID: 无
- 赏金: 无