Jvr2022/CVE-2026-29786
GitHub: Jvr2022/CVE-2026-29786
演示 node-tar 包中硬链接路径遍历漏洞的概念验证,该漏洞允许通过特制 tar 存档覆盖解压目录外的文件。
Stars: 1 | Forks: 0
# CVE-2026-29786
**研究:** [Joshua van Rijswijk](https://github.com/Jvr2022)
## 描述
本仓库包含 **CVE-2026-29786** 的 **概念验证**,这是 `tar` npm 包中的一个漏洞,允许精心构造的存档创建一个**指向预期解压目录之外的硬链接**。
该问题发生在 tar 存档包含**驱动器相对链接目标**(例如 `C:../target.txt`)时。由于库在解压过程中执行验证和路径规范化的顺序问题,路径遍历保护机制可以被绕过。
经过规范化后,路径变为 `../target.txt`,允许链接目标逃离配置的解压目录。
当写入被解压的文件时,外部文件会被修改,因为两个路径引用的是同一个硬链接。
## 漏洞详情
该漏洞发生在负责处理绝对路径的解压逻辑中(`Unpack[STRIPABSOLUTEPATH]`)。
遍历检测是在绝对路径剥离**之前**执行的。
恶意标头值示例
`linkpath: C:../target.txt`
处理行为:
1. 路径被分割为多个段以进行遍历检测。
2. 遍历检查会查找 `".."` 段。
3. 因为该段显示为 `"C:.."`,检查未被触发。
4. 函数 `stripAbsolutePath()` 随后移除了驱动器前缀(`C:`)。
5. 结果路径变为:
`../target.txt`
6. 硬链接目标随后相对于解压目录进行解析。
这允许路径逃离预期的解压根目录。
## 影响
攻击者可以利用执行解压进程的权限,覆盖**解压目录之外**的文件。
潜在的现实场景包括:
• 解压**不受信任的 tar 存档**的 CLI 工具
• 处理**第三方构件**的构建流水线
• 导入**用户提供的 tar 文件**的服务
• 解压存档的包管理器或插件系统
## 用法
1. 安装易受攻击的依赖项
`npm install tar@7.5.9`
2. 运行 PoC
`node poc.cjs`
该脚本生成一个恶意的 tar 存档,并演示写入解压后的文件会导致解压目录之外的文件被覆盖。
## 参考资料
- GitHub 安全公告
[https://github.com/isaacs/node-tar/security/advisories/GHSA-qffp-2rhf-9h96](https://github.com/isaacs/node-tar/security/advisories/GHSA-qffp-2rhf-9h96)
- CVE https://nvd.nist.gov/vuln/detail/CVE-2026-29786
标签:CVE-2026-29786, DNS 解析, JavaScript安全, Maven, MITM代理, node-tar, NPM包安全, PoC, Tar归档, Unpack漏洞, Zero-Day, 任意文件写入, 文件覆盖, 文档安全, 暗色界面, 暴力破解, 漏洞验证, 目录穿越, 硬链接攻击, 自定义脚本, 自定义脚本, 规范化攻击, 路径遍历