curl | 报告 #3250117 - 未受控文件写入/任意文件创建
漏洞描述
提供的代码片段中的dumpeasysrc
函数允许攻击者通过global->libcurl
变量指定任意文件路径来输出生成的libcurl源代码。如果global->libcurl
值未经过适当清理或限制,恶意用户可以提供敏感系统文件(例如/etc/passwd
、/etc/cron.d/malicious_job
、用户的.bashrc
等)或设备文件(例如/dev/null
、/dev/random
)的路径。
核心问题是直接调用fopen(o, FOPEN_WRITETEXT)
,其中o = global->libcurl
,而对提供的路径没有任何检查。
漏洞代码
|
|
概念验证(POC)证明真实漏洞及逐步演示
我将演示在标准临时目录中覆盖用户创建的非关键文件。这很容易复现,并且清楚地显示了完整性影响,而不会尝试直接破坏关键系统文件(普通用户的OS权限可能会阻止这样做)。
在临时位置创建一个独特的虚拟文件:
|
|
执行易受攻击的curl命令来覆盖文件:
假设您的curl可执行文件(使用易受攻击代码构建的)可在PATH中访问,或者您正在使用./curl
运行它。
curl版本:
|
|
|
|
使用http://example.com
比google.com
更好,因为它避免了潜在的重定向,并使curl输出更简单,专注于--libcurl
方面。
curl执行后验证文件内容:
|
|
/tmp/curl_test_overwrite.txt
的内容将被生成的libcurl C代码替换。
影响
数据损坏/丢失:任意文件可以被生成的libcurl C源代码覆盖。
时间线
- tryhackplanet 向curl提交报告(7天前)
- bagder (curl staff) 发表评论(7天前):“不,这是curl按设计工作的。用户提供文件名让curl创建源代码。这不是攻击。”
- bagder 关闭报告并将状态更改为"不适用"(7天前)
- bagder 请求披露此报告(7天前):“根据项目的透明政策,我们希望所有报告都公开披露并公开。”
- jimfuller2024 (curl staff) 发表评论(7天前):“也许我漏掉了什么 - 我也没看到这里有任何安全问题。”
- bagder 发表评论(7天前):“curl可以在OS允许的文件系统中的任何地方创建文件,使用许多不同的命令行选项。这是设计使然。”
- bagder 披露此报告(7天前)
报告详情
- 报告时间:2025年7月13日 4:50pm UTC
- 报告者:tryhackplanet
- 报告对象:curl
- 报告ID:#3250117
- 严重性:高 (7 ~ 8.9)
- 披露时间:2025年7月13日 5:12pm UTC
- 弱点:代码注入
- CVE ID:无
- 赏金:无