Описание
pnpm scoped bin name Path Traversal allows arbitrary file creation outside node_modules/.bin
Summary
A path traversal vulnerability in pnpm's bin linking allows malicious npm packages to create executable shims or symlinks outside of node_modules/.bin. Bin names starting with @ bypass validation, and after scope normalization, path traversal sequences like ../../ remain intact.
Details
The vulnerability exists in the bin name validation and normalization logic:
1. Validation Bypass (pkg-manager/package-bins/src/index.ts)
The filter allows any bin name starting with @ to pass through without validation:
2. Incomplete Normalization (pkg-manager/package-bins/src/index.ts)
3. Exploitation (pkg-manager/link-bins/src/index.ts:288)
The normalized name is used directly in path.join() without validation.
PoC
- Create a malicious package:
- Install the package:
- Observe
.npmrccreated in project root (outside node_modules/.bin).
Impact
- All pnpm users who install npm packages
- CI/CD pipelines using pnpm
- Can overwrite config files, scripts, or other sensitive files
Verified on pnpm main @ commit 5a0ed1d45.
Пакеты
pnpm
< 10.28.1
10.28.1
Связанные уязвимости
pnpm is a package manager. Prior to version 10.28.1, a path traversal vulnerability in pnpm's bin linking allows malicious npm packages to create executable shims or symlinks outside of `node_modules/.bin`. Bin names starting with `@` bypass validation, and after scope normalization, path traversal sequences like `../../` remain intact. This issue affects all pnpm users who install npm packages and CI/CD pipelines using pnpm. It can lead to overwriting config files, scripts, or other sensitive files. Version 10.28.1 contains a patch.
pnpm is a package manager. Prior to version 10.28.1, a path traversal ...
Уязвимость менеджера пакетов pnpm, связанная с неверным ограничением имени пути к каталогу, позволяющая нарушителю записывать произвольные файлы