CVE-2026-23745:毁灭之沥青坑:在 node-tar 中逃离根目录
发布: (2026年1月17日 GMT+8 06:08)
3 min read
原文: Dev.to
Source: Dev.to
末日陷阱:逃离 node-tar 的根目录
漏洞编号: CVE-2026-23745
CVSS 分数: 8.2
发布时间: 2026-01-16
在广泛使用的 node-tar 库中存在一个关键的路径遍历漏洞,恶意归档可以绕过提取根目录的限制。通过对硬链接和符号链接目标使用绝对路径进行操控,攻击者能够覆盖任意系统文件或投毒符号链接,实质上将普通的解压操作变成了武器化的文件系统攻击。
TL;DR
node-tar ≤ 7.5.2 未对硬链接和符号链接的目标进行清理。如果归档中包含指向绝对路径(例如 /etc/passwd)的链接,node-tar 会直接创建它,忽略预期的提取目录。这导致 任意文件覆盖 并可能通过配置文件篡改实现 RCE。
⚠️ 利用状态: 概念验证
技术细节
- CWE 编号: CWE‑22(路径遍历)
- CVSS 4.0: 8.2(高危)
- 攻击向量: 本地(归档上传)
- 受影响组件:
unpack.ts(链接/符号链接处理) - 影响: 任意文件覆盖 / 符号链接投毒
- 利用状态: 已提供概念验证
受影响系统
- 使用
node-tar的 Node.js 应用程序 - 处理不可信归档的 CI/CD 流水线
- 具备文件上传/解压功能的服务器端应用
易受攻击的版本: node-tar ≤ 7.5.2
已修复于: 7.5.3
代码分析
Commit: 340eb28 – Fix: strip absolute paths from link targets
@@ -150,7 +150,8 @@
- if (!this[CHECKPATH](entry))
+ if (
+ !this[STRIPABSOLUTEPATH](entry, 'path') ||
+ !this[STRIPABSOLUTEPATH](entry, 'linkpath')
+ )
利用细节
- 带有 PoC 的安全通报: GitHub Security Advisory (GHSA‑8qq5‑rm4j‑mr97) 演示了任意文件覆盖。
缓解策略
- 输入验证: 在执行文件系统操作前,确保对所有归档条目进行路径遍历检查。
- 最小特权原则: 在受限的沙箱环境中运行解压进程,限制文件系统访问。
- 依赖管理: 定期审计并更新深层依赖。
修复步骤
- 使用
npm audit或yarn audit识别易受攻击的实例。 - 将
node-tar升级至 7.5.3 或更高版本。 - 确认未在非必要情况下启用
preservePaths。 - 重新生成 lock 文件,确保子依赖使用已修补的版本。