IPBUF安全漏洞报告
English
CVE-2026-23745 CVSS 6.1 中危

CVE-2026-23745 node-tar路径遍历导致符号链接投毒和任意文件覆盖

披露日期: 2026-01-16

漏洞信息

漏洞编号
CVE-2026-23745
漏洞类型
路径遍历/符号链接投毒/硬链接攻击
CVSS评分
6.1 中危
攻击向量
本地 (AV:L)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
node-tar (Node.js tar处理库)

相关标签

CVE-2026-23745node-tar路径遍历符号链接投毒硬链接攻击任意文件覆盖Node.jstar解压preservePaths绕过中危漏洞

漏洞概述

node-tar是Node.js生态中广泛使用的tar文件处理库,用于解析和解压tar归档文件。该漏洞存在于node-tar 7.5.2及更早版本中,当preservePaths选项设置为false(默认的安全配置)时,库未能正确验证和清理Link(硬链接)以及SymbolicLink(符号链接)条目中的linkpath字段。攻击者可以通过精心构造包含恶意路径的tar归档文件,绕过提取目录的根限制,将文件提取到目标系统任意位置。此漏洞可能导致任意文件覆盖攻击(通过硬链接)和符号链接投毒攻击(通过绝对路径符号链接),对系统完整性造成威胁。由于CVSS评分为6.1,属于中危漏洞,但结合实际利用场景可能造成严重后果。

技术细节

node-tar库在处理tar归档文件时,会遍历归档中的各个条目并提取文件。当preservePaths为false时,库应该阻止提取路径逃离指定的提取根目录。然而,在处理硬链接和符号链接类型条目时,库直接使用了归档文件中提供的linkpath而未进行路径规范化检查。攻击者可以构造包含绝对路径符号链接(如指向/etc/passwd)或穿越路径硬链接的恶意tar文件。当用户或应用程序解压此类归档文件时,符号链接会在提取目录外创建指向敏感文件的链接,后续操作可能覆盖目标文件。对于硬链接攻击,攻击者可以创建指向系统关键文件的硬链接,然后在后续归档解压过程中覆盖这些文件。修复版本7.5.3通过在处理linkpath时应用与普通文件相同的路径清理逻辑来解决此问题。

攻击链分析

STEP 1
步骤1
攻击者创建恶意tar归档文件,包含指向系统敏感文件(如/etc/passwd)的符号链接或硬链接条目
STEP 2
步骤2
恶意归档文件通过邮件、下载或其他渠道分发给目标用户或系统
STEP 3
步骤3
目标用户或应用程序使用node-tar(<=7.5.2)解压该归档文件,preservePaths选项使用默认值false
STEP 4
步骤4
node-tar库在处理符号链接/硬链接条目时,未对linkpath进行路径规范化检查,直接使用归档中提供的路径
STEP 5
步骤5
符号链接绕过提取根目录限制,在目标系统任意位置创建指向敏感文件的链接
STEP 6
步骤6
后续操作(如归档中同名文件的提取)通过符号链接覆盖或修改目标系统关键文件,导致任意文件覆盖

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
const tar = require('node-tar'); const fs = require('fs'); const path = require('path'); // PoC for CVE-2026-23745: Path Traversal via symlink poisoning // Create a malicious tar archive that exploits the vulnerability // Step 1: Create a symbolic link entry with absolute path const maliciousLinkPath = '/etc/passwd'; const symlinkTarget = '../etc/passwd'; // Step 2: Demonstrate the vulnerable extraction async function exploitVulnerability() { // Create extraction directory const extractDir = './vulnerable_extract'; if (!fs.existsSync(extractDir)) { fs.mkdirSync(extractDir, { recursive: true }); } // This demonstrates the vulnerability - linkpath not sanitized // In vulnerable version (<=7.5.2), absolute paths in symlinks bypass root restriction try { // Create a tar with malicious symlink entry // The linkpath should be sanitized but isn't in vulnerable versions const maliciousArchive = { name: 'malicious.txt', linkname: '/etc/passwd', // Absolute path - should be blocked type: 'symlink' // or 'link' for hardlink attack }; // Extract using vulnerable code path await tar.extract({ cwd: extractDir, preservePaths: false, // Default secure option onReadEntry: (entry) => { // entry.linkname is not properly sanitized in vulnerable versions console.log('Entry linkname:', entry.linkname); } }); } catch (err) { console.error('Error:', err.message); } } // Mitigation: Upgrade to node-tar >= 7.5.3 console.log('Vulnerable versions: node-tar <= 7.5.2'); console.log('Fixed version: node-tar >= 7.5.3');

影响范围

node-tar < 7.5.3
node-tar <= 7.5.2

防御指南

临时缓解措施
立即将node-tar升级到7.5.3版本以修复此漏洞。在升级前,如需处理来自不可信来源的tar归档文件,建议使用chroot环境或容器进行隔离解压,并对归档文件进行预扫描以检测包含绝对路径或相对路径遍历符号链接的恶意条目。同时,确保运行node-tar的服务账户具有最小权限,避免解压操作对系统关键文件造成影响。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表