CVE-2025-11579CVE-2025-11579 是 github.com/nwaples/rardecode 库中存在的一个拒绝服务(Denial of Service)漏洞。该库是一个用于解码 RAR 归档文件的纯 Rust 实现库,广泛应用于需要解析 RAR 格式压缩包的项目中。该漏洞由 Mattermost 团队的安全研究员通过 responsible disclosure 流程报告,并于 2025 年 10 月 10 日公开披露。
根据漏洞描述,rardecode 在解析 RAR 文件时,未对字典(dictionary)大小进行有效限制。RAR 压缩格式在文件头中会声明解压所需的字典大小,合法值通常在 64KB 到 4GB 之间。攻击者可以构造一个特殊的 RAR 文件,在文件头中将字典大小字段设置为异常巨大的数值(例如接近或超过系统可用内存的值),当 rardecode 解析该文件时,会尝试按照声明的字典大小分配内存缓冲区,从而导致进程消耗大量内存,最终因内存耗尽(Out of Memory)而崩溃。
该漏洞的 CVSS 3.1 评分为 5.3,属于中危级别。其攻击向量为网络(AV:N),攻击复杂度低(AC:L),无需任何特权或认证(PR:N),也无需用户交互(UI:N)。该漏洞仅影响系统的可用性(A:L),对机密性(C:N)和完整性(I:N)没有影响。这意味着攻击者可以通过远程投递恶意 RAR 文件,使使用 rardecode 的服务端应用程序(如文件处理服务、归档管理平台等)因内存耗尽而停止响应,从而实现拒绝服务攻击。
由于 rardecode 是一个被多个下游项目依赖的解码库,该漏洞的潜在影响范围较广。任何使用 rardecode 解析用户上传的 RAR 文件的服务都面临被攻击的风险。
RAR 压缩格式使用基于滑动窗口的字典压缩算法(如 PPMII、Lempel-Ziv 等),其字典大小决定了压缩/解压过程中所需的内存缓冲区大小。正常的 RAR 文件头中会包含字典大小信息,解码器据此分配适当大小的内存。
在 rardecode 版本 <= 2.1.1 中,解析 RAR 文件头时未对声明的字典大小进行上限校验。攻击者可以修改 RAR 文件头中的字典大小字段,将其设置为远超系统可用内存的值(如 0xFFFFFFFF 或更大值)。当 rardecode 读取该字段后,会尝试分配相应大小的内存缓冲区。在大多数系统上,这会导致内存分配失败或触发操作系统的 OOM Killer,使进程异常终止。
利用方式:攻击者构造一个 RAR 文件,在其头部将字典大小字段篡改为极大值,然后通过任何使用 rardecode 的应用程序(如文件上传服务、自动化归档处理系统等)上传该文件。服务端在尝试解压时即会触发 OOM,导致服务不可用。修复方案已在 commit 52fb4e825c936636f251f7e7deded39ab11df9a9 中实现,对字典大小增加了合理的上限校验。