漏洞关键信息 ##漏洞描述 pnnpm 的二进制文件提取逻辑存在路径遍历漏洞,允许恶意包写入提取目录之外的文件。该漏洞有两个攻击向量: 1. 使用包含 "../" 或绝对路径的恶意 ZIP 条目,通过 AdmZip 的 extractAllTo 函数逃逸提取根目录。 2. BinaryResolution.prefix 字段在没有验证的情况下被连接到提取路径中,允许构造前缀 (如 ../../evil) 将提取文件重定向到 targetDir 之外。 漏洞细节 1. ZIP 条目路径遍历(fetching/binary-fetcher/src/index.ts) - AdmZip 的 extractAllTo 方法没有验证路径遍历的条目路径。 2. BinaryResolution 中的未验证前缀(resolving/resolver-base/src/index.ts) - basename 变量来自 BinaryResolution.prefix 并直接用于路径构造,允许其指向 nodeDir 之外的位置。 修复版本 受影响版本:= 10.28.1 CWE 包含 CWE-22: Path Traversal 漏洞利用方法 存在两种攻击向量: 攻击向量 1:ZIP Entry Path Traversal 使用包含"../../"的路径创建生成 ZIP 文件,使其在解压缩时文件位于任意目录下。 攻击向量 2:Prefix Traversal via malicious resolution 修改 BinaryResolution.prefix 为它可以指向目标目录外的值并用于二进制文件路径的构建。 影响 可能影响待使用 pnpm 安装包含二进制文件的包的用户,配置自定义 Node.js 二进制文件位置的用户,以及自动安装二进制依赖项的 CI/CD 管道用户。