Skip to main content

Nx CVE-2026-104853

| EUVDEUVD-2026-91761 MEDIUM
Path Traversal (CWE-22)
2026-10-02 GitHub_M GHSA-hrvq-x7jp-36xv
5.8
CVSS 4.0 · Vendor: GitHub_M
View

Attack ChainAIDerived

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

  1. Access
    Publish/introduce hostile dependency in tree
  2. Delivery
    Set malicious nx-migrations.migrations path (.. or absolute)
  3. Exploit
    Victim runs nx migrate with local-handoff bypass
  4. Execution
    Path join escapes temp directory during planning
  5. Impact
    Write attacker bytes or truncate writable file outside temp dir

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 (1) a hostile direct dependency, or a package introduced through a trusted package's packageGroup, that supplies an nx-migrations.migrations value containing '..' segments or an absolute path; (2) the victim invoking nx migrate where the normal nx@latest handoff is bypassed so the vulnerable installed Nx copy runs - triggered by NX_USE_LOCAL, NX_MIGRATE_USE_LOCAL, NX_MIGRATE_CLI_VERSION, --run-id, or the fallback after a temporary-install failure. Affected range is Nx 13.10.0 up to (not including) 22.7.10, and 23.2.x before 23.2.1. Limiting factors: it is a local vector (AV:L) requiring victim action (running migrate), the handoff bypass is non-default behavior, and a malicious package must already be present; however, it fires during migration planning BEFORE the migration list is reviewed or --run-migrations is used, so it is not gated by migration approval.

Impact

This is a moderate-risk path traversal (CWE-22) with a vendor-assigned CVSS 4.0 base score of 5.8. The provided vector (AV:L/AC:L/AT:P/PR:N/UI:P) tells a nuanced story that matters more than the headline number: although PR:N marks it unauthenticated, AV:L means it is NOT a remote network attack, AT:P signals a specific attack precondition must hold, and UI:P means a victim must perform an action (running nx migrate). Exploitation is effectively a supply-chain / local scenario, not an internet-facing one. No EPSS score, KEV listing, or public POC is present in the supplied data, so the exploitation status is 'no public exploit identified at time of analysis' - this is not a mass-exploitation candidate. The realistic risk is gated heavily by the requirement that the victim bypass the normal nx@latest handoff (via NX_USE_LOCAL, NX_MIGRATE_USE_LOCAL, NX_MIGRATE_CLI_VERSION, --run-id, or a temporary-install fallback) AND that a hostile dependency is already present in the tree. Technical impact is genuine where conditions hold (arbitrary file write/truncation outside the temp directory, with potential to clobber writable files even when no archive entry matches), so for CI pipelines and developer machines that use local-migration flags this warrants timely patching, but it is a contained developer-tooling risk rather than a high-urgency internet-exposed emergency. Note the vendor's VC:L assignment is debatable: the described primitive is arbitrary file write/truncation (integrity/availability), not data disclosure - verify confidentiality impact with the vendor advisory.

Exploit ScenarioDerived

A developer adds or transitively pulls in a malicious npm package whose manifest sets nx-migrations.migrations to a value like '../../../../etc/profile' or an absolute path. When the developer or a CI job runs nx migrate with the local-handoff bypass active (e.g. NX_MIGRATE_USE_LOCAL set), Nx joins the escaping path onto its temp directory during migration planning and writes attacker-controlled bytes - or truncates an existing writable file - outside that directory, before any migration review. No public exploit code is identified at time of analysis.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.2% exploitation probability (EPSS)

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

Alert me

AnalysisAIv1 – Oct 02, 2026

Path traversal in Nx's migration planner lets a hostile dependency write attacker-controlled bytes outside the temporary migration directory - or truncate an existing writable file - because the nx-migrations.migrations value read from a target package manifest is joined onto the temp directory without being validated as a contained relative path. The affected range is Nx 13.10.0 through 22.7.9 and 23.2.x before 23.2.1 (fixed in 22.7.10 and 23.2.1), and exploitation requires both a malicious package already present (a direct dependency or one injected through a trusted package's packageGroup) and the victim running nx migrate with the normal nx@latest handoff bypassed via NX_USE_LOCAL, NX_MIGRATE_USE_LOCAL, NX_MIGRATE_CLI_VERSION, --run-id, or the fallback after a temporary-install failure; the write occurs during migration planning, before the migration list is reviewed or --run-migrations is used. This is a moderate-risk path traversal (CWE-22) with a vendor-assigned CVSS 4.0 base score of 5.8 and an independent assessment of CVSS:3.1/AV:L/AC:H/PR:N/UI:R/S:U/C:N/I:H/A:L (high integrity impact, no confidentiality impact); no public exploit identified at time of analysis, and the vulnerability is not listed in CISA KEV.

RemediationAI

Vendor-released patch: upgrade Nx to 22.7.10 or 23.2.1 (or a later release on the corresponding line), per advisory GHSA-hrvq-x7jp-36xv at https://github.com/nrwl/nx/security/advisories/GHSA-hrvq-x7jp-36xv and the release notes at https://github.com/nrwl/nx/releases/tag/22.7.10 and https://github.com/nrwl/nx/releases/tag/23.2.1; because the flaw fires during migration planning before the migration list is reviewed or --run-migrations is passed, upgrading is the only fully effective fix. As a compensating control until you can upgrade, run nx migrate only in its default mode so it hands off to nx@latest instead of executing the vulnerable installed copy - do not set NX_USE_LOCAL, NX_MIGRATE_USE_LOCAL, or NX_MIGRATE_CLI_VERSION, and do not pass --run-id or proceed through the fallback path that runs after a temporary-install failure; the trade-off is that those variables and flags exist for offline, air-gapped, or pinned-version workflows, so the workaround requires registry network access. In addition, audit the dependency graph - including transitive packages pulled in through a trusted package's packageGroup - for any package whose nx-migrations.migrations value is absolute or contains .. segments, and remove or pin it; this is a detection step rather than a reliable blocker because the malicious value is read from the package manifest at plan time, and a strict no-bypass policy materially reduces exposure but does not eliminate risk for automated pipelines that depend on those flags.

Affected VersionsENISA

NX 13.10.0, < 22.7.10
NX 23.0.0, < 23.2.1

Affected Packages

npm nx fix: 22.7.10, 23.2.1

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in npm

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

Technical ContextAI · show details

Nx is a monorepo build/task-orchestration toolset whose nx migrate command reads a nx-migrations.migrations field (or the string shorthand) from the manifest of each package participating in a migration in order to locate migration scripts. The pre-fix implementation built a destination path by joining that value onto a temporary extraction directory but never checked that the value was a contained relative path; because path.join silently treats absolute paths as relative and normalizes .. segments, a value such as ../../../../etc/profile or /etc/profile escapes the temp directory, letting the migration archive write attacker-controlled bytes elsewhere and letting the opened destination stream truncate an existing writable file even when no archive entry matches. The root cause class is CWE-22 (improper limitation of a pathname to a restricted directory). The upstream fix adds an isContainedRelativePath helper that rejects absolute paths and parent traversal, and applies it both when reading nx-migrations configuration in packages/nx/src/utils/package-json.ts and when resolving prompt files in packages/nx/src/command-line/migrate/prompt-files.ts (PR 36887, commits 38cd82a0c05e8212e538bdb87ccb198d6504e58f, 95474ab457e8e1dbdbefad29040c166105a8fb90, de37c5ebd1852fac700d70726326236ac398af3f). The CPE cpe:2.3:a:nrwl:nx:*:*:*:*:*:*:*:* identifies the Nrwl-published Nx package as the affected product.

Know when Nx 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 (GitHub_M) PRIMARY 5.8 MEDIUM
CVSS:4.0/AV:L/AC:L/AT:P/PR:N/UI:P/VC:L/VI:H/VA:L/SC:N/SI:N/SA:N
vuln.today AI 5.3 MEDIUM

AV:L and UI:R because a local victim must run nx migrate; AC:H because a hostile dependency and non-default local-handoff bypass are required; I:H for arbitrary file write, A:L for truncation, C:N as no disclosure occurs.

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

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Local
Attack Complexity
Low
Attack Requirements
Present
Privileges Required
None
User Interaction
Passive
Vulnerable system: Confidentiality
Low
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
Oct 02, 2026 - 18:02 EUVD
CVE Published
Oct 02, 2026 - 16:52 cve.org
MEDIUM 5.8

DescriptionCVE.org

Nx is a monorepo solution for TypeScript and polyglot codebases. From 13.10.0 until 22.7.10 and 23.2.1, Nx migration planning reads the nx-migrations.migrations value from a target package manifest without validating that it is a contained relative path. A hostile direct dependency or a package introduced through a trusted package's packageGroup can supply .. segments or an absolute path, causing nx migrate to join an escaping destination onto its temporary directory. The migration archive can then write attacker-controlled bytes outside the temporary directory, while opening the destination stream can truncate an existing writable file even when no archive entry matches. This occurs during migration planning before review of the migration list or use of --run-migrations; the vulnerable installed Nx copy is reached when the normal nx@latest handoff is bypassed with NX_USE_LOCAL, NX_MIGRATE_USE_LOCAL, NX_MIGRATE_CLI_VERSION, --run-id, or fallback after a temporary-install failure. This issue is fixed in versions 22.7.10 and 23.2.1.

Blast Radius

ecosystem impact
† from your stack dependencies † transitive graph · vuln.today resolves 4-path depth
  • 27 npm packages depend on nx (8 direct, 19 indirect)

Ecosystem-wide dependent count for version 13.10.0.

Threat Intelligence Overview

EPSS Score
0.2%
Top 94% exploitable
Prevalence
High
widely adopted JS/TS monorepo build tool in enterprise development
Threat Intel
1
1 source
Social Media
1
Sightings
Data Quality
4 sources
Confidence: Medium
EUVD NVD CVE.org EPSS Vulnrichment GHSA Vendor CIRCL GitHub VulDB

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 MEDIUM
CISA KEV No
Public POC No
EPSS 0.2%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.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· derived
Scheduled
Exploitation
None
System Exposure· derived
Small
Automatable
No
Human Impact· derived
High
Technical Impact
Partial

Priority Score

29
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +29
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.

Vendor StatusVendor

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