IPBUF安全漏洞报告
English
CVE-2026-33055 CVSS 8.1 高危

CVE-2026-33055 tar-rs库PAX头大小解析逻辑漏洞

披露日期: 2026-03-20

漏洞信息

漏洞编号
CVE-2026-33055
漏洞类型
解析逻辑错误
CVSS评分
8.1 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
tar-rs (Rust crate)

相关标签

Rusttar-rs逻辑漏洞文件解析CVE-2026-33055

漏洞概述

Rust的tar-rs库在0.4.44及以下版本中存在漏洞,涉及PAX扩展头文件大小的处理逻辑。当基础头大小非零时,该库会忽略PAX大小头,而其他解析器通常使用PAX覆盖。这种解析差异导致同一归档在不同工具中解压结果不同,可能影响依赖该库的应用程序的完整性与安全性。该问题已在0.4.45版本修复。

技术细节

漏洞根源在于tar-rs处理PAX扩展头的条件判断逻辑存在缺陷。在标准的tar归档处理中,PAX扩展头用于存储基础ustar头无法容纳的扩展属性,通常具有更高的优先级,用于覆盖基础头中的字段(如文件大小)。然而,tar-rs在0.4.44及以下版本中实现了一个错误的逻辑:当基础头中的size字段非零时,代码会跳过对PAX头中size属性的解析,直接使用基础头的大小。这种行为与Go标准库的archive/tar以及修复后的astral-tokio-tar(CVE-2025-62518)不一致。攻击者可利用这种解析器差异构造特制的tar文件。例如,攻击者创建一个文件,其基础头size为100字节(通过上传限制),但PAX头指定size为10GB。使用tar-rs的系统会认为文件很小并允许解压,而其他系统则识别出巨大的真实大小。这种不一致可用于绕过安全检查,导致磁盘空间被耗尽(DoS)或文件越界写入,严重影响系统完整性和可用性。

攻击链分析

STEP 1
1
攻击者构造特制的恶意tar归档文件,其中包含一个文件条目,该条目的基础头中size字段设置为一个较小的合法值(如100字节),同时在PAX扩展头中设置一个巨大的size值(如10GB)。
STEP 2
2
攻击者将此恶意归档文件上传至目标系统,目标系统使用存在漏洞的tar-rs库(版本<=0.4.44)进行解析或解压。
STEP 3
3
tar-rs库在解析时,检测到基础头size非零,错误地忽略了PAX头中的size覆盖值,仅读取基础头的小size值。
STEP 4
4
应用程序基于错误的小size值通过安全检查(如文件大小限制),允许文件入库或解压。随后,若该文件被其他标准解析器处理或实际写入磁盘,可能导致磁盘空间耗尽(DoS)或数据覆盖。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// PoC Concept: Create a tar with conflicting sizes to demonstrate the parsing difference. // This code conceptually generates a tar file where the base header size differs from the PAX header size. use std::io::Cursor; use std::path::PathBuf; // Note: This is a conceptual representation. Exploitation requires constructing raw bytes. fn main() { // 1. Construct a PAX header record specifying a large size (e.g., 100MB) let pax_data = b"50 size=104857600"; // 2. Construct a base header for the same file entry but with a small size (e.g., 10 bytes) // In a real exploit, these bytes are manually crafted to form valid ustar headers. // The vulnerability occurs because tar-rs <= 0.4.44 sees 'size=10' in the base header // and ignores 'size=104857600' in the PAX header. println!("PoC: Constructing tar archive with base_size=10 and pax_size=104857600"); println!("Vulnerable parser (tar-rs < 0.4.44) will report size: 10"); println!("Standard parser (Go tar, etc) will report size: 104857600"); // Impact: Bypass file upload size limits or cause DoS upon extraction. }

影响范围

tar-rs <= 0.4.44

防御指南

临时缓解措施
在无法立即升级的情况下,建议在解压归档文件前,使用非基于tar-rs的解析器(如系统自带的tar命令)对文件大小进行二次校验,或严格限制解压操作的目录权限与最大文件大小,防止磁盘耗尽攻击。

参考链接

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