[高危] 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权限即可复现。
- 创建伪造根CA:
1 2 3openssl req -x509 -newkey rsa:2048 -nodes \ -keyout fake.key -out fake.crt \ -subj "/CN=FakeMITMRoot" -days 365 - 准备目录:
1 2mkdir -p /tmp/fake-ca cp fake.crt /tmp/fake-ca - 运行易受攻击的cURL命令:
1curl --capath /tmp/fake-ca https://example.com - 如果服务器的TLS证书由该伪造CA签名,cURL将成功连接并暴露解密的HTTPS数据。
测试环境: curl 7.85.0 (x86_64-pc-linux-gnu) libcurl/7.85.0 OpenSSL/3.0.2
支持材料/参考
- 参考:
- CWE-494: https://cwe.mitre.org/data/definitions/494.html
- 类似CVE:CVE-2022-32221
- cURL文档:https://curl.se/docs/manpage.html
建议
- 添加受信任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
- 赏金: 无
- 账户详情: 无