Summary
pnpm: stage download writes outside its destination directory via manifest name/version traversal
The staged-tarball filename traversal reported as GHSA-v23m-ccfg-pq9h / CAND-PNPM-038 is fixed on main by pnpm/pnpm#12303, merged as 65443f4bdf1f0db9c8c7dc58fee25252607e9234.
Before the fix, pnpm stage download derived a local filename from registry-controlled package name and version fields. A crafted manifest could escape the selected download directory and overwrite another reachable file. The merged fix validates both fields, derives one safe filename, and verifies the final destination before writing.
Security boundary
- Package names and semantic versions are validated before they can influence a local filename.
- POSIX and Windows path separators are rejected by basename checks.
- Stage download and tarball summary paths use the same filename helper.
- The resolved output path must remain an immediate child of the selected download directory.
- The stage identifier is already constrained to a UUID.
Exploit replay
Before 65443f4bdf, a traversal-bearing manifest version could make the command write outside the selected directory. After the fix, malicious package names fail with ERR_PNPM_INVALID_PACKAGE_NAME, malicious versions fail with ERR_PNPM_INVALID_PACKAGE_VERSION, no outside file is created, and the download directory remains empty.
Files changed
releasing/commands/src/tarball/safeTarballFilename.tsvalidates manifest identity and rejects cross-platform path separators.releasing/commands/src/stage/download.tsverifies the resolved destination before writing.releasing/commands/src/tarball/summarizeTarball.tsuses the same filename contract.releasing/commands/test/stage.test.tscovers traversal through both package name and version..changeset/stale-stage-tarballs.mdincludes patch bumps for@pnpm/releasing.commandsandpnpm.
Commands run
$ git diff --check 65443f4bdf^ 65443f4bdf
PASS
$ gh pr view 12303 --repo pnpm/pnpm --json state,mergeCommit,statusCheckRollup
MERGED as 65443f4bdf
Validation
- Upstream regression coverage rejects traversal through both manifest name and version and verifies that no outside file is created.
- Compile and lint, dependency audit, Linux Node.js 22/24/26, CodeQL, and zizmor checks passed on the merged public PR.
- The Windows Node.js 22 full-suite job timed out in the unrelated
pnpm/test/dlx.tscache test after 512 other tests passed. The PR was merged by the maintainer; the failure did not involve the staging code. - The earlier private candidate's focused exploit regression, positive control, package compile, ESLint, and
git diff --checkalso passed.
Compatibility
Staging and release commands are TypeScript-only. Pacquet does not expose this command family, so no Rust-side port is required.
Remaining risk
The final fs.writeFile follows a pre-existing symlink at the exact in-directory output name. That requires separate local filesystem access and is not controllable through the registry manifest traversal described here.
Written by an agent (Codex, GPT-5).
Impact
Input manipulates file paths to reach files outside the intended directory, such as configuration or credential files. Typical impact: unauthorized file read or write outside the intended directory.
CVE-2026-55700 has a CVSS score of 7.1 (High). The vector is network-reachable, no privileges required, and user interaction required. A CVSS score reflects the worst-case severity of the vulnerability, not your specific exposure. Whether this affects your application depends on whether the vulnerable code is present and reachable in your environment. A fixed version is available (11.5.3); upgrading removes the vulnerable code path.
Affected versions
Security releases
Kodem intelligence
Severity tells you how bad this could be in the worst case. It does not tell you whether you are exposed. Exploitability and impact are functions of runtime truth: whether the vulnerable code is present, reachable, and actually executes in your application. A vulnerable package can sit in your dependency tree and never run.
Kodem, an Intelligent Application Security platform, uses runtime intelligence to reveal which vulnerabilities actually execute in production, so teams prioritize the ones that genuinely matter. Kodem's runtime-powered SCA identifies whether this CVE is reachable in your applications.
Already deployed Kodem?
See it in your environmentNew to Kodem? Get a demo →Remediation advice
- Merged PR: https://github.com/pnpm/pnpm/pull/12303
- Fix commit:
65443f4bdf1f0db9c8c7dc58fee25252607e9234 - The private candidate branch was not submitted because it conflicts with and is superseded by the merged fix. The upstream patch is slightly stronger because it covers malicious package names as well as versions.
Frequently Asked Questions
- What is CVE-2026-55700? CVE-2026-55700 is a high-severity path traversal vulnerability in pnpm (npm), affecting versions >= 11.3.0, < 11.5.3. It is fixed in 11.5.3. Input manipulates file paths to reach files outside the intended directory, such as configuration or credential files.
- How severe is CVE-2026-55700? CVE-2026-55700 has a CVSS score of 7.1 (High). This score reflects the worst-case severity of the vulnerability, not your specific exposure. Whether it represents real risk in your environment depends on whether the vulnerable code is present and reachable.
- Which versions of pnpm are affected by CVE-2026-55700? pnpm (npm) versions >= 11.3.0, < 11.5.3 is affected.
- Is there a fix for CVE-2026-55700? Yes. CVE-2026-55700 is fixed in 11.5.3. Upgrade to this version or later.
- Is CVE-2026-55700 exploitable, and should I be worried? Whether CVE-2026-55700 is exploitable in your environment depends on whether the vulnerable code is present and reachable. A CVSS score is a worst-case rating; it does not account for your specific deployment, configuration, or usage patterns. Kodem, an Intelligent Application Security platform, uses runtime intelligence to show which vulnerabilities actually execute in production, so you can focus on the ones that represent real risk. Get a demo
- What actually determines whether CVE-2026-55700 is exploitable, and how bad it is? Exploitability and impact are not fixed properties of a CVE. They depend on runtime truth: whether the vulnerable code is present, reachable, and actually executes in your application. A high CVSS score on a dependency that never runs is not the same as real risk. Kodem, an Intelligent Application Security platform, uses runtime intelligence to reveal which vulnerabilities actually execute in production, so teams prioritize the ones that genuinely matter.
- How do I fix CVE-2026-55700? Upgrade
pnpmto 11.5.3 or later.