curl文件协议路径遍历漏洞深度解析:攻击者可未经授权访问任意文件

本文详细报告了curl软件在file://协议处理器中存在的一个路径遍历漏洞。攻击者通过构造包含../序列的恶意URL,可绕过安全限制,读取目标系统上的任意文件,导致敏感数据泄露,安全风险较高。

Path Traversal in curl file:// Protocol Handler Allows Unauthorized File Access

时间线:报告者 7hackerstar 向 curl 项目提交了一份报告。 8天前

摘要

在我手动审查curl源代码中的文件路径处理逻辑时,我注意到其缺乏对目录遍历序列的适当验证,随后通过实际测试进行了验证。我发现,当使用目录遍历序列(../)时,curl允许通过 file:// 协议处理器未经授权访问任意文件。

受影响版本

  • curl 8.13.0_8(官方Windows版本)
  • 平台:Windows 10
  • curl版本输出:
1
2
3
4
curl 8.13.0 (x86_64-pc-win32) libcurl/8.13.0 OpenSSL/3.0.16 (Schannel) zlib/1.3.1 brotli/1.1.0 zstd/1.5.7 libidn2/2.3.7 libpsl/0.21.5 (+libidn2/2.3.7) libssh2/1.11.1 nghttp2/1.64.0 ngtcp2/1.12.0 nghttp3/1.8.0
Release-Date: 2025-04-02
Protocols: dict file ftp ftps gopher gophers http https imap imaps ldap ldaps mqtt pop3 pop3s rtsp smb smbs smtp smtps telnet tftp ws wss
Features: alt-svc AsynchDNS brotli GSS-API HSTS HTTP2 HTTP3 HTTPS-proxy IDN IPv6 Kerberos Largefile libz MultiSSL NTLM PSL SPNEGO SSL SSPI TLS-SRP UnixSockets zstd

漏洞代码位置

该漏洞存在于 lib/file.c 的第229-262行,文件路径在打开前未得到适当验证:

1
2
3
4
5
6
7
/* 第229行:未对 "../" 序列进行验证 */
fd = curlx_open(actual_path, O_RDONLY | CURL_O_BINARY);

/* 类似问题出现在第253、258、262行 */
fd = curlx_open(real_path + 1, O_RDONLY);  // 第253行
fd = curlx_open(real_path, O_RDONLY);     // 第258行
fd = curlx_open(real_path, O_RDONLY);     // 第262行

这段代码在打开文件前未能检查目录遍历序列。当我审查这些代码行时,我注意到没有验证机制来防止包含 ../ 的路径访问预期目录结构之外的文件。

重现步骤

  1. 从以下网址下载官方curl Windows版本:https://curl.se/windows/dl-8.13.0_8/curl-8.13.0_8-win64-mingw.zip
  2. 解压归档文件并导航到 bin 目录
  3. C:\test\poc_test.txt 创建一个测试文件,内容为:
1
This is a test file for Path Traversal vulnerability
  1. 在与 curl.exe 相同的目录下执行以下命令:
1
curl "file://../../../../test/poc_test.txt"

在我的测试过程中,我观察到文件内容被成功显示,这证明了存在对预期目录之外文件的未经授权访问。

支持材料/参考资料

  • 显示成功文件访问的截图(Capture.PNG)- 我在Windows 10上实际测试时捕获
  • 分步演示漏洞的概念验证脚本(final_poc.bat)
  • 重现过程中使用的测试文件(poc_test.txt),包含我测试时使用的确切内容
  • 类似漏洞参考:CVE-2021-22901(表明此模式以前曾出现过)

影响

此漏洞允许攻击者在处理恶意的 file:// URL时读取系统中的任意文件。影响包括:

  1. 敏感数据泄露:可以访问系统文件(hosts、密码数据库)、用户文档和私钥。在我的测试中,我能够读取完全来自不同目录的文件,这表明了问题的严重性。
  2. 信息披露:可以枚举系统配置、已安装软件详情和网络设置。这可能为攻击者提供有关目标系统的详细信息。
  3. 链式攻击:可以与其他漏洞结合以实现完整的系统入侵。例如,读取配置文件可能会泄露其他服务的凭据。
  4. 远程利用:处理用户提供URL并使用curl的应用程序(如网络爬虫、API客户端、下载管理器)可能被远程利用。许多开发者并未意识到 file:// URL可能很危险。

严重性为 ,因为:

  • 利用无需身份验证 - 任何攻击者都可以构造恶意URL
  • 影响敏感系统数据的机密性 - 核心安全边界被突破
  • 存在于最新的官方版本中 - 影响当前版本的所有Windows用户
  • 易于利用,技术要求极低 - 我仅用几个简单的命令就能重现它

这不仅仅是一个理论问题。我在Windows 10上的实际操作测试中,成功访问了预期目录结构之外的文件,证明了其现实世界中的可利用性。此漏洞尤其令人担忧,因为curl在全球范围内被无数应用程序和系统所使用。

附件

3个附件:

  • F5182166: final_poc.bat
  • F5182167: poc_test.txt
  • F5182169: Capture.PNG

7hackerstar 发表了评论。8天前

欢迎! 希望我的报告足够清晰,考虑到我的英语水平有限。

bagder (curl工作人员) 发表了评论。8天前

我不理解这个说法。漏洞是什么?

bagder (curl工作人员) 关闭了报告并将状态更改为“不适用”。更新于 8天前

  • curl默认会移除dotdot序列
  • curl已经可以通过 file:// 访问整个本地磁盘,这是设计使然

bagder (curl工作人员) 请求披露此报告。8天前

根据项目的透明度政策,我们希望所有报告都被披露并公开。

bagder (curl工作人员) 披露了此报告。7天前

报告日期:2026年1月3日,下午6:59(UTC) 报告者:7hackerstar 报告对象:curl 报告ID:#3485930 严重性:高 (7 ~ 8.9) 披露日期:2026年1月4日,上午10:34(UTC) 弱点:路径遍历 CVE ID:CVE-2021-22901 赏金:无 账户详情:无

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计