cURL高危漏洞:不安全CA路径处理导致中间人攻击(MITM)

本文详细分析了cURL和libcurl中--capath和CURLOPT_CAPATH选项的安全漏洞。攻击者可通过伪造根证书目录实现HTTPS流量中间人攻击,影响版本7.82.0至8.4.0,涵盖所有操作系统平台。

[高危] cURL中不安全CA路径处理导致的中间人攻击(–capath, CURLOPT_CAPATH)(CWE-494:无完整性检查的代码下载)

摘要

cURL中的--capath选项和libcurl中的CURLOPT_CAPATH接受任何目录路径而不进行验证。如果攻击者提供包含伪造根证书的自定义CA路径,cURL将信任使用该伪造根证书签名的恶意HTTPS端点。这允许完整的中间人(MITM)攻击,并在无用户警告的情况下静默解密HTTPS流量。

受影响版本

受影响资产:

  • 组件:cURL CLI和libcurl
  • 版本:7.82.0至8.4.0
  • 平台:所有操作系统(Linux、macOS、Windows)

复现步骤

跨操作系统工作,无需用户交互,且无需root权限即可复现。

  1. 创建伪造根CA:

    1
    2
    3
    
    openssl req -x509 -newkey rsa:2048 -nodes \
    -keyout fake.key -out fake.crt \
    -subj "/CN=FakeMITMRoot" -days 365
    
  2. 准备目录:

    1
    2
    
    mkdir -p /tmp/fake-ca
    cp fake.crt /tmp/fake-ca
    
  3. 运行易受攻击的cURL命令:

    1
    
    curl --capath /tmp/fake-ca https://example.com
    
  4. 如果服务器的TLS证书由此伪造CA签名,cURL将成功连接并暴露解密的HTTPS数据。

测试环境: curl 7.85.0 (x86_64-pc-linux-gnu) libcurl/7.85.0 OpenSSL/3.0.2

支持材料/参考

建议

  • 添加受信任CA目录的白名单或允许列表(例如/etc/ssl/certs//usr/share/ca-certificates/)。
  • 如果使用非标准--capath,向用户发出警告。
  • 考虑使用签名清单或校验和哈希验证内容。

披露政策

  • 可根据请求提供PoC和完整漏洞利用细节。
  • 遵循90天负责任披露时间表。

影响

向量 风险描述
MITM和解密 攻击者静默解密HTTPS(凭据、令牌、会话)。
静默利用 不显示TLS警告,使攻击隐蔽。
跨平台滥用 影响Linux、Windows、macOS、容器和使用libcurl的CI/CD工具。
供应链攻击 可自动滥用动态设置CURLOPT_CAPATH的工具和应用程序。

时间线

  • oicus 向curl提交报告 - 2025年5月1日,5:57am UTC
  • dfandrich (curl员工) 发表评论 - 2025年5月1日,6:13am UTC
    “我不理解这个问题。如果用户提供CA路径,curl使用它。如果用户放置好的证书在CA路径中,curl使用它们。如果用户放置坏的证书在CA路径中,curl使用它们。你是说curl应该以某种方式猜测用户的意图吗?”
  • bagder (curl员工) 关闭报告并将状态改为“不适用” - 2025年5月1日,9:29am UTC
    “这是curl按预期工作。”
  • jimfuller2024 (curl员工) 发表评论 - 2025年5月2日,4:44am UTC
    “这属于‘不要那样做’的范畴……期望curl永远不使用世界可写文件路径是错误的。”
  • bagder (curl员工) 请求披露此报告 - 2025年6月28日,12:24pm UTC
  • bagder (curl员工) 披露此报告 - 2025年6月30日,6:55pm UTC

报告详情

  • 报告时间: 2025年5月1日,5:57am UTC
  • 报告者: oicus
  • 报告对象: curl
  • 报告ID: #3120969
  • 严重性: 高危(7 ~ 8.9)
  • 披露时间: 2025年6月30日,6:55pm UTC
  • 弱点: 安全决策中依赖不可信输入
  • CVE ID: CVE-2022-32221
  • 赏金:
  • 账户详情:
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计