CVE-2026-33055Rust的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)或文件越界写入,严重影响系统完整性和可用性。