node-tar 易受通过硬链接路径遍历进行任意文件创建/覆盖的攻击
平台
nodejs
组件
tar
已修复版本
7.5.7
### 摘要 node-tar 包含一个漏洞,其中硬链接条目的安全检查使用的路径解析语义与实际的硬链接创建逻辑不同。这种不匹配允许攻击者制作恶意 TAR 存档,绕过路径遍历保护,并创建指向提取目录之外的任意文件的硬链接。 ### 详情 该漏洞存在于 `lib/unpack.js` 中。提取硬链接时,两个函数以不同的方式处理 linkpath: **`[STRIPABSOLUTEPATH]` 中的安全检查:** ```javascript const entryDir = path.posix.dirname(entry.path); const resolved = path.posix.normalize(path.posix.join(entryDir, linkpath)); if (resolved.startsWith('../')) { /* block */ } ``` **`[HARDLINK]` 中的硬链接创建:** ```javascript const linkpath = path.resolve(this.cwd, entry.linkpath); fs.linkSync(linkpath, dest); ``` **示例:** 应用程序使用 `tar.extract({ cwd: '/var/app/uploads/' })` 提取 TAR。 TAR 包含条目 `a/b/c/d/x` 作为指向 `../../../../etc/passwd` 的硬链接。 - **安全检查** 解析相对于条目父目录的 linkpath:`a/b/c/d/ + ../../../../etc/passwd` = `etc/passwd`。没有 `../` 前缀,所以
修复方法
暂无官方补丁。请查找临时解决方案或持续关注更新。