通过CURL_CA_BUNDLE环境变量实现TLS信任模型静默劫持导致中间人攻击

本文详细分析了curl工具中存在的严重安全漏洞,攻击者可通过设置CURL_CA_BUNDLE环境变量静默劫持TLS信任模型,导致HTTPS连接遭受中间人攻击而用户完全无感知,造成敏感数据泄露风险。

通过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

漏洞复现步骤

准备两个终端

第一个终端:

  1. 安装mitmproxy工具:sudo apt install mitmproxy
  2. 运行mitmproxy
  3. 点击n

第二个终端:

  1. 在终端中输入命令:
    1
    
    export CURL_CA_BUNDLE=~/.mitmproxy/mitmproxy-ca-cert.pem
    
  2. 通过mitmproxy代理运行curl发起HTTPS请求:
    1
    
    curl --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:
  • 赏金:
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计