CVE-2026-55699: pnpm path traversal and directory deletion via malicious manifest bin keys

CVE-2026-55699 · Severity: medium · CVSS 6.5 · Published 2026-06-25

pnpm is a fast Node.js package manager used by developers to install and manage project dependencies. When removing a globally-installed package, pnpm can be tricked into deleting critical system directories if the package contains specially-crafted bin entries with reserved names like ".." (parent directory). An attacker can distribute a malicious package that, once uninstalled globally, destroys the pnpm installation directory itself, preventing further package management operations.

Technologies: pnpm (npm). Vendors: npm.

Quick answers

Is CVE-2026-55699 exploited in the wild?
No. Junglewise Threat Intelligence has no report of CVE-2026-55699 being exploited in the wild.
How severe is CVE-2026-55699?
Medium severity, with a CVSS score of 6.5, published 25 June 2026.
Which products and versions are affected?
pnpm (npm) SEMVER:introduced=0,fixed=10.34.2.
Is there a fix for CVE-2026-55699?
Yes. pnpm (npm): upgrade to 10.34.2 or later. Junglewise finds every place you run it, drafts the upgrade and applies it once you approve.
How is CVE-2026-55699 attacked?
It is attacked over the network or with local access, in a software library.
Am I affected by CVE-2026-55699?
Check whether you run pnpm (npm) at an affected version. Junglewise does that check for you around the clock: connect your code, cloud and domains, and it matches new vulnerabilities like this one against what you actually run and tells you when one reaches you.

How to fix

  • pnpm (npm): upgrade to 10.34.2 or later
    npm install pnpm@10.34.2

Technical details

The vulnerability is a path traversal flaw in pnpm's global package removal flow (CWE-22, CWE-73). The bins/resolver component accepts reserved bin names (empty string, ".", "..") that bypass validation checks for URL-safe text. When global remove, update, or add-replacement commands scan installed manifests and call path.join(globalBinDir, binName), reserved names cause path traversal: "." targets the global bin directory itself, ".." targets its parent. The removal sink (bins/remover/removeBins.ts) recursively deletes the resulting path. Install-time checks do not prevent this because conflict validation occurs on an already-escaped path and does not reject reserved segments. Attack requires a user to globally install a malicious package, then issue pnpm global remove. The fix (patched in pnpm 10.34.2 and 11.5.3+) validates and rejects reserved bin names in the resolver after scope stripping.

Affected products

  • pnpm pnpm <10.34.2 and >=11.0.0 <11.5.3

Identifiers

  • CVE-2026-55699
  • GHSA-4gxm-v5v7-fqc4

Timeline

  • 2026-06-26: disclosed
  • 2026-06-26: patched: pnpm 10.34.2 and 11.5.3+

References

This page as Markdown. Free to reuse under CC BY 4.0 with a link back.