IPBUF安全漏洞报告
English
CVE-2026-24131 CVSS 5.5 中危

CVE-2026-24131 pnpm directories.bin 路径遍历权限变更漏洞

披露日期: 2026-01-26

漏洞信息

漏洞编号
CVE-2026-24131
漏洞类型
路径遍历
CVSS评分
5.5 中危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
pnpm

相关标签

路径遍历权限变更pnpmnpm包管理器本地提权CVE-2026-24131

漏洞概述

pnpm是一款流行的JavaScript包管理工具。在10.28.2之前的版本中,pnpm处理包的directories.bin字段时,使用path.join()对路径进行拼接,但未验证拼接后的路径是否仍保持在包根目录内。攻击者可构造恶意npm包,通过设置"directories": {"bin": "../../../../tmp"}来逃逸包目录,导致pnpm对任意位置的文件执行chmod 755操作,从而改变目标文件的权限。该漏洞仅影响Unix/Linux/macOS系统,Windows系统不受影响(fixBin受EXECUTABLE_SHEBANG_SUPPORTED限制)。攻击者可利用此漏洞提升目标文件的执行权限,可能导致本地权限提升或代码执行。

技术细节

漏洞根源在于pnpm的fixBin函数在处理包的bin目录时,直接使用path.join()将package.json中声明的directories.bin路径与包目录拼接。攻击者可在恶意包的package.json中设置"directories": {"bin": "../../../../tmp"},使得拼接后的绝对路径指向包目录外部(如/tmp/evil.sh)。当pnpm安装该恶意包时,会对目标路径执行fs.chmod(0o755)操作,将目标文件权限设置为可执行。由于chmod操作发生在符号链接解析之后,攻击者可利用符号链接指向任意系统文件。此漏洞的利用需要攻击者诱使受害者安装恶意包,可通过发布到npm仓库或直接分发恶意tarball实现。修复方案为在path.join()后增加路径验证,确保结果路径仍处于包根目录内。

攻击链分析

STEP 1
步骤1
攻击者创建恶意npm包,在package.json中设置directories.bin为路径穿越字符串(如../../../../tmp)
STEP 2
步骤2
攻击者将恶意包发布到npm仓库或通过其他渠道分发(如直接提供tarball)
STEP 3
步骤3
受害者使用pnpm安装该恶意包,pnpm解析package.json的directories.bin字段
STEP 4
步骤4
pnpm使用path.join()拼接路径,未验证路径是否在包目录内,生成指向/tmp的绝对路径
STEP 5
步骤5
pnpm对目标路径下的文件执行fs.chmod(0o755),将任意文件权限设置为可执行
STEP 6
步骤6
攻击者通过符号链接或其他方式指向系统关键文件(如/etc/passwd的shell脚本),实现权限提升或代码执行

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
{ "name": "evil-pkg", "version": "1.0.0", "directories": { "bin": "../../../../tmp" } } # Malicious package.json that escapes package directory # When pnpm installs this package, it will chmod 755 files in /tmp # Create a malicious bin file: echo '#!/bin/bash' > evil.sh echo 'echo pwned' >> evil.sh # Place it in the expected location for pnpm to process # pnpm will chmod 755 the file specified by directories.bin

影响范围

pnpm < 10.28.2

防御指南

临时缓解措施
如果无法立即升级,可暂时避免使用来源不可信的npm包。在安装前检查package.json的directories字段是否存在异常路径穿越模式。使用npm audit等工具扫描已安装包的可疑配置。

参考链接

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