cURL高危漏洞:通过不安全CA路径处理实现中间人攻击(MITM)

本文详细分析了cURL中--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 staff) 发表评论 — 2025年5月1日, 6:13am UTC
    “我不理解这个问题。如果用户提供CA路径,curl使用它。如果用户放入好的证书,curl使用它们。如果用户放入坏的证书,curl使用它们。你是说curl应该以某种方式猜测用户的意图吗?”
  • bagder (curl staff) 关闭报告并将状态改为“不适用” — 2025年5月1日, 9:29am UTC
    “这是curl按设计工作的。”
  • jimfuller2024 (curl staff) 发表评论 — 2025年5月2日, 4:44am UTC
    “这属于‘不要那样做’的范畴……期望curl不应使用全局可写文件路径是错误的。”
  • bagder (curl staff) 请求披露此报告 — 2025年6月28日, 12:24pm UTC
  • bagder (curl staff) 披露此报告 — 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 设计