Severity by source
AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H
Malicious package served over network (AV:N), no complexity beyond publishing a package (AC:L), no privileges needed (PR:N), victim must install and re-trigger a global operation (UI:R), impact is solely directory destruction (A:H).
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H
Lifecycle Timeline
2DescriptionCVE.org
pnpm is a package manager. Prior to 10.34.2 and 11.5.3, Manifest bin object keys such as "", ".", and ".." passed pnpm's bin-name guard. When a malicious package was installed globally, later global remove, update, or add-replacement flows could re-derive those names from the installed manifest and pass path.join(globalBinDir, binName) to removeBin. For "." this targets the global bin directory; for ".." this targets its parent. This vulnerability is fixed in 10.34.2 and 11.5.3.
AnalysisAI
Path traversal in pnpm's global package management flows allows deletion of the global bin directory or its parent when a malicious package with specially crafted bin keys is installed. Packages carrying ".", "..", or "" as bin object keys in their manifest bypass pnpm's bin-name guard; subsequent global remove, update, or add-replacement operations re-derive those names and pass them through path.join(globalBinDir, binName) into removeBin, resolving to the bin directory itself or its parent. No public exploit has been identified at time of analysis, but fixed versions 10.34.2 and 11.5.3 are available and should be applied immediately given the supply-chain delivery mechanism.
Technical ContextAI
pnpm is a disk-efficient JavaScript/Node.js package manager that uses hard links and a content-addressable store. The vulnerability is rooted in CWE-22 (Improper Limitation of a Pathname to a Restricted Directory - Path Traversal). When a package's package.json declares a bin field as an object, pnpm extracts the keys as bin names and associates them with executable paths. A guard is supposed to reject names that would escape the global bin directory, but the implementation failed to reject the empty string (""), the current-directory token ("."), and the parent-directory token (".."). Because pnpm's remove, update, and add-replacement code paths re-read these names from the installed manifest rather than from a sanitized cache, a package installed globally re-introduces the traversal strings into later flows. Node.js's path.join(globalBinDir, ".") resolves to globalBinDir itself, and path.join(globalBinDir, "..") resolves to the directory containing it, so removeBin effectively targets and destroys those directories. Affected CPE: cpe:2.3:a:pnpm:pnpm:*:*:*:*:*:*:*:* covering all versions prior to the fixed releases.
RemediationAI
Upgrade to pnpm 10.34.2 (for v10 users) or 11.5.3 (for v11 users), which introduce proper rejection of ".", "..", and "" as bin name keys. Run pnpm self-update or install via your preferred package manager specifying the fixed version. The vendor advisory is at https://github.com/pnpm/pnpm/security/advisories/GHSA-4gxm-v5v7-fqc4. If immediate upgrade is not possible, the most effective compensating control is to audit installed global packages - run pnpm list -g and inspect each package's package.json bin field for keys matching ".", "..", or empty strings before performing any global remove, update, or replacement operations. Avoid installing global packages from untrusted or unverified registries, and consider restricting scoped registry resolution to known-good sources in .npmrc/.pnpmfile.cjs. These workarounds reduce exposure but do not eliminate it, as the guard bypass exists in the installed pnpm binary itself.
Arbitrary code execution in the pnpm package manager (versions 10.0.0 through 10.25) lets a git-hosted dependency run co
pnpm is a package manager. Rated critical severity (CVSS 9.8), this vulnerability is remotely exploitable, no authentica
Path traversal in pnpm before 10.34.0 and 11.4.0 lets a malicious registry package smuggle '../' segments inside a trans
Arbitrary code execution in the pnpm package manager (versions prior to 10.34.2 and 11.5.3) lets a malicious repository
Arbitrary command execution in pnpm before 10.34.2 and 11.5.3 allows a malicious repository to run attacker-chosen nativ
Supply-chain integrity bypass in pnpm package manager (versions ≤10.26.2, per description; GHSA states <10.26.0) allows
PNPM v6.15.1 and below was discovered to contain an untrusted search path which causes the application to behave in unex
Integrity-check bypass in the pnpm package manager (versions before 10.34.0/10.34.1 and 11.0.0-11.3.x) lets tampered pac
Command injection in pnpm versions 6.25.0 through 10.26.2 allows attackers controlling environment variables to execute
Arbitrary file write and deletion in pnpm package manager (versions prior to 10.34.0 and 11.4.0) lets a malicious contri
Arbitrary command execution in pnpm before 10.34.0 and 11.4.0 allows a malicious lockfile to run code on a developer's m
Path traversal in pnpm's `pnpm stage download` command (versions 11.3.0 through 11.5.2) lets a malicious or compromised
Same weakness CWE-22 – Path Traversal
View allSame technique Path Traversal
View allVendor StatusVendor
Share
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-39485
GHSA-4gxm-v5v7-fqc4