Skip to main content

pnpm pacquet EUVDEUVD-2026-87975

| CVE-2026-101044 HIGH
Path Traversal (CWE-22)
2026-09-27 VulnCheck GHSA-qj85-gv7w-fqmr
7.1
CVSS 4.0 · Vendor: VulnCheck
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Craft lockfile with traversal alias key
  2. Delivery
    Victim installs project with --trust-lockfile
  3. Exploit
    Alias path used in install-time filesystem join
  4. Execution
    Symlink/directory created outside node_modules boundary
  5. Impact
    Files written/linked outside project (integrity impact)

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V5 - File Handling Path canonicalization, traversal prevention
MITRE ATT&CK

2 techniques across 2 tactics: Discovery, Collection

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

Requires an attacker-supplied lockfile AND the victim explicitly running pacquet install with --trust-lockfile or a frozen lockfile - the trust flag deliberately bypasses re-resolution, so it is the enabling condition. Only pnpm npm-package versions 12.0.0-alpha.0 through 12.0.0-alpha.4 that ship the Rust pacquet component are affected; the TypeScript pnpm CLI, the lockfile format, and stable pnpm releases are NOT affected. Limiting factors: mandatory user interaction (UI:P), reliance on the user opting into trust-lockfile/frozen-install mode, and the extremely narrow alpha-only version window.

Impact

This is a genuine but conditional supply-chain integrity risk, not a widely-exploitable network vulnerability. The vendor CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:N/UI:P/VC:N/VI:H/VA:L) scores 7.1 (High) with integrity as the dominant impact (VI:H) and no confidentiality impact (VC:N), which is consistent with a path-traversal flaw that creates symlinks/directories outside the node_modules boundary rather than leaking data. UI:P is the key limiter: exploitation is not autonomous - a victim must actively install an attacker-supplied lockfile using --trust-lockfile or a frozen lockfile. No EPSS score, no CISA KEV listing, and no standalone public exploit were provided; the GHSA advisory describes an internal 'exploit replay' (pacquet install --frozen-lockfile --trust-lockfile accepting a ../../escaped-link key) but this is reproduction detail from the fix, not released weaponized code. Critically, the affected surface is narrow - only the Rust pacquet component shipped in pnpm pre-release versions 12.0.0-alpha.0 through 12.0.0-alpha.4; stable pnpm and the TypeScript CLI are unaffected. Net: real bug, cleanly patched, but low real-world exposure and requiring social engineering, so priority is low-to-medium.

Exploit ScenarioDerived

An attacker publishes or contributes a project (e.g. a repo or package) containing a crafted pnpm lockfile whose dependency alias keys embed traversal segments like '../../escaped-link'. A developer clones it and runs a pacquet install with --trust-lockfile or --frozen-lockfile on an affected pnpm 12.0.0-alpha build; during link/bin/hoist/virtual-store materialization the alias path is joined without containment, creating symlinks or directories outside the intended project. No public exploit code was identified, though the advisory documents a working reproduction.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.3% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Sep 27, 2026

Path traversal in the Rust-based pacquet package-manager component shipped inside pnpm allows a crafted lockfile to create symlinks and directories outside the project or node_modules boundary during installation. Only pnpm npm-package versions 12.0.0-alpha.0 through 12.0.0-alpha.4 that bundle pacquet are affected, and exploitation requires the victim to explicitly run an install with --trust-lockfile or a frozen lockfile against an attacker-supplied lockfile, so the trust flag that bypasses re-resolution is the enabling condition rather than a remotely reachable flaw. Impact is integrity-focused (CVSS 7.1, CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:N/VI:H/VA:L), and no public exploit code was identified at time of analysis.

RemediationAI

Upgrade pnpm to 12.0.0-alpha.5 or later, which is the vendor-released patch that adds the shared safe-join containment check before any symlink, bin, hoist, or virtual-store directory is created (see https://github.com/pnpm/pnpm/security/advisories/GHSA-2rx9-3g3h-c2jv and the fixes in PR https://github.com/pnpm/pnpm/pull/12872 and commit 51300fd41c5e4c8f47635108e373cc3d1f324fa7). If upgrading immediately is not possible, stop invoking pacquet with --trust-lockfile or frozen-lockfile against lockfiles you did not generate yourself, since disabling that trust bypass forces re-resolution and prevents the malicious alias from reaching the filesystem joins; treat lockfiles as untrusted input and inspect dependency alias keys for path separators or '..' segments before installation. Because the flaw is isolated to the Rust pacquet alpha component, staying on the stable TypeScript pnpm CLI or any stable pnpm release removes the exposure entirely with no functional loss. Note that these mitigations are compensating controls with real trade-offs: avoiding trust-lockfile weakens reproducible/CI install guarantees and adds resolution overhead, while manual lockfile review is error-prone at scale, so patching remains the only complete fix.

Affected VersionsENISA

pnpm 12.0.0-alpha.0 <12.0.0-alpha.5

Affected Packages

euvd pnpm fix: 12.0.0-alpha.5

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

The vulnerability is a classic CWE-22 path traversal rooted in the install-time filesystem join logic of pacquet, the Rust re-implementation of the pnpm package manager. Dependency alias and name keys taken from a lockfile were passed into filesystem path joins without containment checks, so alias entries such as '../../escaped-link' escaped the intended project or node_modules root when pacquet materialized dependency links, transitive package links, bin destinations, public/private hoist entries, and virtual-store slots. Because --trust-lockfile and frozen-lockfile installs intentionally skip re-resolution, the malicious alias survived straight into the install phase, and the warm-install fast path plus global virtual-store slot paths (including version-derived components) widened the attack surface further. The fix introduces a shared safe-join containment helper (pacquet/crates/package-manager/src/safe_join_modules_dir.rs) that validates dependency names and every virtual-store slot path before any filesystem materialization, rejecting traversal, absolute, platform-specific, and reserved names with ERR_PNPM_INVALID_DEPENDENCY_NAME; valid scoped and unscoped aliases continue to work, and neither the TypeScript CLI nor the lockfile format was changed because the escape was specific to pacquet.

Know when Rust gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (VulnCheck) PRIMARY 7.1 HIGH
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:N/VI:H/VA:L/SC:N/SI:N/SA:N
vuln.today AI 7.1 HIGH

Lockfile is attacker-supplied over the network (AV:N) but the victim must run a trust/frozen install (UI:R); no auth (PR:N); arbitrary out-of-tree symlink/file creation gives I:H, minor A:L, no data disclosure (C:N).

3.1 AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:H/A:L
4.0 AV:N/AC:L/AT:N/PR:N/UI:P/VC:N/VI:H/VA:L/SC:N/SI:N/SA:N
SUSE HIGH
Red Hat 7.1 HIGH

Primary rating from Vendor (VulnCheck).

CVSS VectorVendor: VulnCheck

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
None
Privileges Required
None
User Interaction
Passive
Vulnerable system: Confidentiality
None
Vulnerable system: Integrity
High
Vulnerable system: Availability
Low
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

Lifecycle Timeline

2
Patch available
Sep 27, 2026 - 18:01 EUVD
CVE Published
Sep 27, 2026 - 17:02 cve.org
HIGH 7.1

DescriptionCVE.org

pacquet, the Rust package-manager component shipped in the pnpm npm package versions >=12.0.0-alpha.0 and <12.0.0-alpha.5, does not validate dependency alias/name paths taken from a lockfile before using them in install-time filesystem joins. When a user installs a project with an attacker-supplied lockfile using --trust-lockfile or a frozen lockfile, alias entries containing path traversal segments (for example '../../escaped-link') are used when creating dependency and package links, bin destinations, hoisted entries, and virtual-store slots, allowing symlinks and directories to be created outside the intended project and node_modules boundary. Version 12.0.0-alpha.5 validates dependency names and every virtual-store slot path with a shared safe-join containment helper before any filesystem materialization, rejecting traversal, absolute, platform-specific, and reserved names with ERR_PNPM_INVALID_DEPENDENCY_NAME.

Technical POC Analysis

CWE-22 (path traversal) in pacquet, the Rust package-manager component shipped inside the pnpm npm package.

Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.

Executive ViewAI

Why It Matters

The Rust-based pacquet component bundled in pnpm npm-package versions 12.0.0-alpha.0 through 12.0.0-alpha.4 has a high-severity path traversal issue that can let a malicious lockfile create symlinks and directories outside the intended project or node_modules boundary during installation. The issue is unauthenticated per the CVSS vector but requires user interaction, specifically an install with --trust-lockfile or a frozen lockfile against an attacker-supplied lockfile, so engineering teams and CI/CD pipelines that consume untrusted lockfiles are the primary exposure. Leadership should care because successful exploitation can compromise build integrity and write files outside project boundaries, though no public exploit identified at time of analysis and no vendor-released patch identified at time of analysis.

Business Impact: High
Compensating Controls

No vendor-released patch identified at time of analysis. Interim mitigations include removing or blocking pnpm npm-package versions 12.0.0-alpha.0 through 12.0.0-alpha.4 that bundle pacquet; prohibiting --trust-lockfile and frozen-lockfile installs with untrusted lockfiles; requiring lockfiles only from trusted repositories and validating them before use; running installs in least-privilege, isolated environments; and monitoring the vendor advisory for a patched release.

Threat Intelligence Overview

EPSS Score
0.3%
Top 84% exploitable
Prevalence
Low
affected only in pnpm 12.0.0 alpha pre-releases via Rust pacquet component
Data Quality
7 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment Vendor GitHub

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity HIGH
CISA KEV No
Public POC No
EPSS 0.3%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
No
Human Impact
High
Technical Impact
Partial

Priority Score

36
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +36
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Path traversal exploits occur when applications use user-controlled input to construct file system paths without proper validation.

More in Rust

View all
CVE-2024-3566 CRITICAL POC
9.8 Apr 10

Command injection via Windows CreateProcess argument parsing affects multiple language runtimes and tooling (Node.js, PH

CVE-2021-31162 CRITICAL POC
9.8 Apr 14

In the standard library in Rust before 1.52.0, a double free can occur in the Vec::from_iter function if freeing the ele

CVE-2021-28879 CRITICAL POC
9.8 Apr 11

In the standard library in Rust before 1.52.0, the Zip implementation can report an incorrect size due to an integer ove

CVE-2026-58491 CRITICAL POC
9.3 Sep 21

Stored cross-site scripting and open redirect in Warpgate's SSO endpoints (versions prior to 0.25.5) allow an unauthenti

CVE-2021-29922 CRITICAL POC
9.1 Aug 07

library/std/src/net/parser.rs in Rust before 1.53.0 does not properly consider extraneous zero characters at the beginni

CVE-2026-77620 HIGH POC
8.7 Sep 22

Denial of service in the Vector observability pipeline's `logstash` source (versions 0.15.0 through 0.56.x) allows a rem

CVE-2019-12083 HIGH POC
8.1 May 13

The Rust Programming Language Standard Library 1.34.x before 1.34.2 contains a stabilized method which, if overridden, c

CVE-2021-28878 HIGH POC
7.5 Apr 11

In the standard library in Rust before 1.52.0, the Zip implementation calls __iterator_get_unchecked() more than once fo

CVE-2021-28875 HIGH POC
7.5 Apr 11

In the standard library in Rust before 1.50.0, read_to_end() does not validate the return value from Read in an unsafe c

CVE-2019-16760 HIGH POC
7.5 Sep 30

Cargo prior to Rust 1.26.0 may download the wrong dependency if your package.toml file uses the `package` configuration

CVE-2024-24576 CRITICAL POC
10.0 Apr 09

Rust is a programming language. Rated critical severity (CVSS 10.0), this vulnerability is remotely exploitable, no auth

CVE-2018-1000810 CRITICAL
9.8 Oct 08

The Rust Programming Language Standard Library version 1.29.0, 1.28.0, 1.27.2, 1.27.1, 127.0, 126.2, 126.1, 126.0 contai

Vendor StatusVendor

SUSE

Severity: Important

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy