任意文件读取漏洞:通过file://
路径遍历与--path-as-is
选项
漏洞概述
使用--path-as-is
选项配合file://
URL时,curl会跳过..
段的规范化处理,允许进程读取其有权访问的任何本地文件。
受影响版本
- curl 8.15.0-DEV(提交2a9dfe275,2025年6月27日)在Kali Linux 2024.3,x86_64架构
复现步骤
构建带调试和ASan的curl:
|
|
读取/etc/passwd:
|
|
读取/etc/hosts:
|
|
缓解措施
即使在使用了--path-as-is
选项时,也应在文件URL处理程序中规范化和清理..
段,或者禁止在本地路径上使用该选项。
影响
可泄露任何全局可读文件,例如/etc/passwd、/etc/hosts、私钥等。
附加PoC
创建了一个基于Flask的Python Web应用,该应用接受URL并在内部调用curl --path-as-is
。
当使用file:///etc/passwd
测试时,应用返回完整的文件内容。
这证明了该漏洞会影响依赖curl进行内部获取的应用程序,例如SSRF场景或代理端点。
Flask应用(测试服务器):
|
|
确保将编译的curl二进制文件放在同一文件夹中或相应更新路径。
利用测试:
|
|
结果:
返回/etc/passwd的内容:
|
|
时间线
- 2025年6月27日 9:42 UTC:demsese提交报告
- 2025年6月27日 9:49 UTC:bagder(curl工作人员)发表评论
- 2025年6月27日 10:11 UTC:demsese提供附加PoC
- 2025年6月27日 10:15 UTC:dgustafsson(curl工作人员)发表评论
- 2025年6月27日 10:17 UTC:demsese确认这是预期行为
- 2025年6月28日 5:59 UTC:报告被关闭,状态改为"不适用"
- 2025年6月28日 12:21 UTC:请求披露此报告
- 2025年7月1日 14:08 UTC:报告被披露
报告详情
- 报告ID:#3226502
- 严重程度:中等(4 ~ 6.9)
- 披露时间:2025年7月1日 14:08 UTC
- 弱点类型:路径遍历
- CVE ID:无
- 赏金:无