
提供的代码片段中的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,且未对提供的路径进行任何检查。
void dumpeasysrc(struct GlobalConfig *global)
{
struct curl_slist *ptr;
char *o = global->libcurl; // <--- 'o'保存用户提供的文件路径
FILE *out;
bool fopened = FALSE;
if(strcmp(o, "-")) {
out = fopen(o, FOPEN_WRITETEXT); // <--- 在fopen()中直接使用用户提供的路径
fopened = TRUE;
}
else
out = stdout;
// ... 函数其余部分向'out'写入数据
}为了证明真实漏洞并逐步演示,我将展示在标准临时目录中覆盖用户创建的非关键文件。这易于复现,并清楚地显示了完整性影响,而不会尝试直接破坏关键系统文件(普通用户的操作系统权限可能会阻止此类操作)。
echo "This is the ORIGINAL content of the file." > /tmp/curl_test_overwrite.txt
ls -l /tmp/curl_test_overwrite.txt
cat /tmp/curl_test_overwrite.txt./curl运行它。Curl版本信息:
└─# ./curl -V
WARNING: this libcurl is Debug-enabled, do not use in production
curl 8.15.0-DEV (x86_64-pc-linux-gnu) libcurl/8.15.0-DEV zlib/1.3.1 libpsl/0.21.2
Release-Date: [unreleased]
Protocols: dict file ftp gopher http imap ipfs ipns mqtt pop3 rtsp smtp telnet tftp ws
Features: alt-svc AsynchDNS Debug IPv6 Largefile libz PSL threadsafe TrackMemory UnixSockets执行覆盖命令:
./curl --libcurl /tmp/curl_test_overwrite.txt http://example.com使用http://example.com比google.com更好,因为它避免了潜在的重定向,并使curl输出更简单,专注于--libcurl方面。
cat /tmp/curl_test_overwrite.txt/tmp/curl_test_overwrite.txt的内容将被生成的libcurl C代码替换。
数据损坏/丢失:任意文件可以被生成的libcurl C源代码覆盖。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。