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

本文披露了curl存在的严重安全漏洞,攻击者可通过CURL_CA_BUNDLE环境变量静默劫持TLS信任模型,导致中间人攻击可解密和操纵HTTPS流量,完全破坏连接机密性和完整性。

通过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安全模型。

复现步骤

  1. 准备两个终端

  2. 在第一个终端中安装并运行mitmproxy:

    1
    2
    
    sudo apt install mitmproxy
    mitmproxy
    
  3. 在第二个终端中设置环境变量并执行curl请求:

    1
    2
    
    export 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按照文档设计运行

报告状态最终被标记为"不适用"并公开披露。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计