cURL文件协议漏洞:本地文件泄露风险与利用分析

本文详细分析了cURL中file://协议的安全漏洞,攻击者可通过该漏洞读取系统敏感文件如/etc/shadow,特别在特权执行环境下风险极高。包含漏洞复现步骤、代码分析和影响评估。

漏洞报告:cURL中通过file://协议实现的本地文件泄露

摘要

发现cURL中存在安全漏洞,允许通过file://协议未授权访问本地文件系统,特别是在提升权限(如sudo)执行时。这可能导致敏感数据泄露,包括存储在/etc/shadow中的密码哈希值。

复现步骤

定位协议处理程序

首先,在cURL源码中搜索协议注册:

1
2
3
4
5
6
7
// 位于lib/url.c
static const struct Curl_handler * const protocols[] = {
  &Curl_handler_dict,
  &Curl_handler_file,  // ← 这是我们关注的重点
  &Curl_handler_ftp,
  ...
};

关键发现:文件处理程序在协议数组中默认启用。

检查文件协议处理程序

追踪文件处理程序实现:

1
2
3
4
5
6
7
// lib/file.c
static CURLcode file_do(struct Curl_easy *data, bool *done)
{
  char *path = data->state.up.path; // ← 来自URL的原始路径
  FILE *file = fopen(path, "rb");   // ← 直接文件系统访问
  ...
}

发现的漏洞

  • 未验证路径遍历序列(../)
  • 未处理符号链接
  • 未检查文件系统权限

基本本地文件读取

1
curl "file:///etc/passwd"  # 读取系统用户信息

特权文件访问(使用sudo)

1
2
3
4
5
sudo curl "file:///etc/shadow"  # 暴露密码哈希值

echo "test" > /tmp/test_file
curl "file:///tmp/test_file"
sudo curl "file:///etc/shadow"  #

预期输出

1
2
3
root:*:
kali:$
[...]

参考资料

影响

  • 机密性破坏:对敏感系统文件的读取访问
  • 权限提升:通过哈希破解可能获得root访问权限

业务影响

  • 对处理敏感数据的系统至关重要
  • 在容器化环境中经常被忽略

时间线

  • ahmedqc1 提交报告给curl - 2天前
  • bagder (curl staff) 关闭报告并将状态改为"不适用" - 2天前
    • “这是cURL按文档工作的方式。不是安全问题。”
  • bagder (curl staff) 请求披露此报告 - 2天前
    • “根据项目透明度政策,我们希望所有报告都被披露并公开。”
  • bagder (curl staff) 披露此报告 - 2天前

报告详情

  • 报告时间:2025年8月10日,UTC时间20:24
  • 报告者:ahmedqc1
  • 报告对象:curl
  • 报告ID:#3293884
  • 严重程度:中等(4 ~ 6.9)
  • 披露时间:2025年8月10日,UTC时间21:37
  • 弱点类型:路径遍历
  • CVE ID:无
  • 赏金:无

附件

  • F4664084: Screenshot_2025-08-10_230246.png
  • F4664086: Screenshot_2025-08-10_230435.png
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计