curl file:// 协议处理程序中的路径遍历漏洞允许未经授权的文件访问
报告时间:2026年1月3日 UTC 18:59 报告者:7hackerstar 报告 ID:#3485930 披露时间:2026年1月4日 UTC 10:34 严重性:高危 (7 ~ 8.9) 漏洞类型:路径遍历 CVE ID:CVE-2021-22901
摘要
在对curl源代码中文件路径处理逻辑进行手动审查时,我注意到缺乏对目录遍历序列的适当验证,随后通过实际测试进行了验证。我发现,当使用目录遍历序列(../)时,curl允许通过file://协议处理程序未经授权访问任意文件。
受影响版本
- curl 8.13.0_8(官方Windows构建版)
- 平台:Windows 10
curl版本输出信息:
|
|
漏洞代码位置
漏洞存在于 lib/file.c 的第229-262行,在打开文件之前没有对文件路径进行适当验证:
|
|
这段代码在打开文件之前未能检查目录遍历序列。当我审查这些代码行时,注意到没有验证机制来防止包含 ../ 的路径访问预期目录结构之外的文件。
复现步骤
- 从以下地址下载官方curl Windows构建版:https://curl.se/windows/dl-8.13.0_8/curl-8.13.0_8-win64-mingw.zip
- 解压存档并导航到
bin目录。 - 在
C:\test\poc_test.txt创建一个测试文件,内容如下:This is a test file for Path Traversal vulnerability - 在与 curl.exe 相同的目录下执行以下命令:
1curl "file://../../../../test/poc_test.txt"
在我的测试过程中,我观察到文件内容被成功显示,这证明了可以未经授权访问预期目录之外的文件。
支持材料/参考资料
- 显示成功访问文件的截图(Capture.PNG)——在我于Windows 10上的实际测试中捕获。
- 证明漏洞的分步概念验证脚本(final_poc.bat)。
- 复现过程中使用的测试文件(poc_test.txt),包含我测试时使用的确切内容。
- 类似漏洞参考:CVE-2021-22901(表明此类模式此前已发生过)。
影响
此漏洞允许攻击者在处理恶意的 file:// URL 时读取系统中的任意文件。影响包括:
- 敏感数据泄露:可以访问系统文件(hosts文件、密码数据库)、用户文档和私钥。在我的测试中,我能够读取来自完全不同目录的文件,这表明了问题的严重性。
- 信息披露:可以枚举系统配置、已安装软件详情和网络设置。这可能为攻击者提供目标系统的详细信息。
- 链式攻击:可与其他漏洞结合以实现完全系统入侵。例如,读取配置文件可能会泄露其他服务的凭据。
- 远程利用:处理用户提供的URL的应用程序(如网络爬虫、API客户端、下载管理器)可能会被远程利用。许多开发人员没有意识到 file:// URL 可能是危险的。
严重性为高危的原因:
- 利用无需认证——任何攻击者都可以制作恶意URL。
- 影响敏感系统数据的机密性——核心安全边界被破坏。
- 存在于最新的官方发布版本中——影响当前版本的所有Windows用户。
- 利用简单,所需技术门槛低——我仅用几条简单命令即可复现。
这不仅仅是一个理论问题。我在Windows 10上的实际操作测试中,成功地访问了预期目录结构之外的文件,证明了其现实世界的可利用性。此漏洞尤其令人担忧,因为curl在全球无数的应用程序和系统中被使用。
时间线与讨论
- 8天前:7hackerstar 向 curl 提交了报告。
- 8天前:7hackerstar 发表评论:
Welcome! I hope my report is clear, taking into account my limited English. - 8天前:bagder (curl 工作人员) 发表评论:
I don‘t understand the claim. What is the vulnerability? - 7天前:bagder (curl 工作人员) 关闭报告并将状态更改为 Not Applicable。更新说明:
- curl 默认会移除点序列(dotdot sequences)。
- curl 已经可以通过 file:// 访问整个本地磁盘,这是设计使然。
- 7天前:bagder (curl 工作人员) 请求披露此报告:
Per project policy for transparency, we want all reports disclosed and made public. - 7天前:bagder (curl 工作人员) 披露了此报告。