node-tar解析差异漏洞:PAX头部污染导致文件隐藏与安全工具绕过
node-tar(CVE-2026-53655)存在解析差异漏洞,攻击者可利用PAX扩展头部size覆盖污染中间元数据头部,导致tar流不同步。该漏洞影响npm生态,允许恶意文件隐藏于安全扫描器之外,是供应链攻击的重要组件。本文提供技术细节、PoC和修复建议。
⛓️ Medium 供应链攻击
攻击者可利用node-tar在处理PAX扩展头部时,将size覆盖错误应用于中间的GNU长名称/长链接头,导致解析器流位置偏移,产生与其他主流tar实现(如GNU tar、libarchive)不同的成员列表。这种解释差异可用于隐藏恶意文件,绕过依赖node-tar的安全扫描器。
来源:OSV | 2026-06-15 | 原文链接
🔍 关键发现
- node-tar在解码任何类型头部时,无条件应用PAX扩展头部的size覆盖,包括GNU长名称(L)和长链接(K)等中间元数据头部。
- 该漏洞导致node-tar与其他主流tar实现(GNU tar、libarchive、Python tarfile)产生流光标不同步,形成解析差异。
- 攻击者通过构造一个包含恶意PAX size记录的tar归档,可使node-tar列出与系统tar不同的文件集合,从而隐藏恶意文件。
⚔️ 攻击链分析
1. 攻击者构造恶意tar归档,在PAX扩展头部中设置虚假的size记录。2. 在PAX头部后放置GNU长名称头部,该头部被PAX size污染,导致node-tar读取错误长度的元数据。3. 后续文件头部和内容在node-tar中被错误解析或跳过,而其他tar实现正常读取。4. 安全扫描器(使用node-tar)漏检隐藏文件,而实际提取(使用系统tar)时该文件落地。
🚩 失陷指标 (IOC)
tar归档中PAX记录包含非预期的size=字段,且后续紧跟L/K/x等元数据头部使用tar@7.5.15及之前版本解析的归档产生与GNU tar不同的成员列表
🛡️ 缓解建议
- ✅ 升级node-tar至修复版本(≥7.5.16或官方补丁版本),避免PAX size覆盖应用于元数据头部。
- ✅ 在安全关键场景中,使用多种tar实现(如libarchive、GNU tar)交叉验证解析结果,确保一致性。
涉及漏洞:["CVE-2026-53655"]
⚠️ 本文仅供安全研究与学习,IOC 信息请勿用于非法目的。
🤖 常见问题解答(FAQ)
❓ 该漏洞如何影响npm包管理器?
node-tar是npm处理包归档的核心依赖,攻击者可通过恶意npm包利用此漏洞隐藏恶意文件,绕过npm的安全扫描和审计流程。
❓ 如何检测是否受此漏洞影响?
检查node_modules/tar/package.json版本是否≤7.5.15;或运行`npm ls tar`查看依赖树。使用PoC归档测试解析结果是否与GNU tar不同。
❓ 修复后如何验证?
使用官方PoC(pax-desync.tar)运行tar.list(),应正确列出所有文件且无警告;与GNU tar输出一致。