CVE-2026-54753: Nx `nx Graph` Dev Server Permissive Vulnerability

MODERATE
Advisory Identifier: GHSA-g2r8-wvmj-jf5w
CVSS 5.9
CWE-749 CWE-942
Published
Advisory Summary

CVE-2026-54753 is a MODERATE (CVSS 5.9) `nx graph` dev server permissive vulnerability (CWE-749: Exposed Dangerous Method or Function) affecting Nx libraries in the npm ecosystem. The issue involves `nx graph` dev server permissive cors policy. Remediation is available by upgrading affected packages to version 22.7.2, 23.0.0-beta.2.

CVE-2026-54753 at a Glance

CVE Identifier CVE-2026-54753
GHSA Identifier GHSA-g2r8-wvmj-jf5w
Severity MODERATE
CVSS v3.1 Base Score 5.9
CWE Classification CWE-749: Exposed Dangerous Method or Function
Affected Product Nx
Package Ecosystem npm
Published Date
Last Updated

Security Impact

CVSS: 5.9

The security impact metrics below are parsed directly from the CVSS v3.1 vector string (CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:H/I:L/A:N).

Attack Vector Network (AV:N)
Attack Complexity High (AC:H)
Privileges Required None (PR:N)
User Interaction Required (UI:R)
Scope Unchanged (S:U)
Confidentiality High (C:H)
Integrity Low (I:L)
Availability None (A:N)

How to Fix CVE-2026-54753

To remediate this vulnerability, upgrade all affected Nx dependencies to a patched release. Both direct and transitive dependencies should be checked, as frameworks or security libraries may pull in vulnerable versions transitively.

nx fixed: 22.7.2
npm install nx@22.7.2
nx fixed: 23.0.0-beta.2
npm install nx@23.0.0-beta.2
Verify Direct and Transitive Dependencies

Run the following command in your project directory to verify that all resolved dependencies use the patched release:

npm ls nx

How to Check if You Are Affected

To determine whether your Node.js application is affected by CVE-2026-54753, inspect your project dependencies using npm:

npm ls nx

Analyze the terminal output to locate any version of Nx in your dependency tree. If any resolved version matches the vulnerable ranges listed in the table below (for example, versions earlier than 22.7.2), your application is affected.

Note: The npm ls nx command inspects dependencies declared in your package.json and lockfile; it does not perform automated runtime dynamic scanning.

Technical Details

Vulnerability Mechanism & Technical Analysis

This vulnerability is classified under CWE-749: Exposed Dangerous Method or Function, where the product provides an applications programming interface (api) or similar interface for interaction with external actors, but the interface includes a dangerous method or function that is not properly restricted. In Nx, software state validation or input boundaries are circumvented during processing. Review the official source advisory statement below for specific affected components, classes, and reproduction details.

Source Advisory Statement

## Summary The local HTTP server started by `nx graph` sent `Access-Control-Allow-Origin: *` on every response, letting any website a developer visited read the server's responses cross-origin — including the full project graph and the output of the `/help` endpoint, which runs a target's configured help command. The practical impact is typically **cross-origin information disclosure**, but can be arbitrary command injection in rare cases. ## Severity Exploitation requires the developer to be running `nx graph` and to visit an attacker page. Any execution beyond benign help commands also requires a malicious target to already be present in the workspace (see Details). ## Affected & Patched Versions Package: `nx` (npm). - **Affected:** `>= 17.0.4, < 22.7.2` and `>= 23.0.0-beta.0, < 23.0.0-beta.2` - **Patched:** `22.7.2`+ (backport) and `23.0.0` (first in `23.0.0-beta.2`) The wildcard CORS header was introduced in `17.0.4`; the `/help` execution endpoint in `19.4.0`. **The `21.x` line is not patched** — `21.x` users should upgrade to `22.7.2` or later. ## Details `nx graph` starts a local server (default `http://127.0.0.1:4211`). Before the fix, its request handler set a wildcard CORS header on every response: ```ts res.setHeader('Access-Control-Allow-Origin', '*'); ``` The `/help` endpoint runs a target's configured command: ```ts const command = target.metadata?.help?.command; return execSync(command, { cwd: target.options?.cwd ?? workspaceRoot }).toString(); ``` A `GET /help` is a CORS "simple request", so a malicious page could `fetch()` it with no preflight, and the wildcard header let the page read the result. This exposes the project graph (project names, file paths, dependencies, build configuration) and the output of any configured help command. The command is not attacker-controlled through the request — it comes from the workspace's project configuration, and first-party plugins (jest, vite, cypress) populate it with benign, read-only help commands. For `/help` to run anything malicious, a target carrying a malicious `help.command` must already exist in the project graph, which can only be introduced by **installing a malicious package** or by **altering the workspace's own code/configuration** — both of which already grant code execution independent of this flaw. The fix ([#35494](https://github.com/nrwl/nx/pull/35494)) removes the header; the browser's same-origin policy then blocks cross-origin reads. ## References - Fix: [nrwl/nx#35494](https://github.com/nrwl/nx/pull/35494) - Introduced: [nrwl/nx#20744](https://github.com/nrwl/nx/pull/20744) (CORS), [nrwl/nx#26629](https://github.com/nrwl/nx/pull/26629) (`/help`) ## Credits Thanks to Nozomu Sasaki (Paul) ([@morimori-dev](https://github.com/morimori-dev)) for finding and responsibly reporting this issue.

CVE-2026-54753 Affected Nx Versions

2 component(s)
Fixed Versions:
22.7.223.0.0-beta.2
Product / Package Ecosystem Affected Versions Fixed Version
nx
npm
≥ 17.0.4
< 22.7.2
22.7.2
nx
npm
≥ 23.0.0-beta.0
< 23.0.0-beta.2
23.0.0-beta.2

References

Frequently Asked Questions

What is CVE-2026-54753?
CVE-2026-54753 is a security vulnerability in Nx involving `nx graph` dev server permissive CORS policy under CWE-749: Exposed Dangerous Method or Function.
Which Nx versions are affected?
Affected versions include releases prior to 22.7.2, 23.0.0-beta.2 across affected packages: nx.
What version fixes CVE-2026-54753?
Upgrading to 22.7.2, 23.0.0-beta.2 (or the latest patched release for your respective branch) resolves the vulnerability.
Is nx affected?
Yes, nx is affected in releases prior to 22.7.2, 23.0.0-beta.2. Upgrade your dependency to 22.7.2, 23.0.0-beta.2 or later.
What is the CVSS score of CVE-2026-54753?
CVE-2026-54753 has a CVSS v3.1 base score of 5.9 (MODERATE) with vector string CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:H/I:L/A:N.
What CWE is associated with CVE-2026-54753?
CVE-2026-54753 is classified under CWE-749: Exposed Dangerous Method or Function (The product provides an Applications Programming Interface (API) or similar interface for interaction with external actors, but the interface includes a dangerous method or function that is not properly restricted.).
How can I check npm dependencies for CVE-2026-54753?
Run the dependency tree command: 'npm ls nx'. This command lists direct and transitive dependencies in your build configuration so you can verify if a vulnerable version is resolved.
Machine-readable OSV JSON OSV v1.5 Schema
Normalized schema output
{
  "schema_version" : "1.4.0",
  "id" : "GHSA-g2r8-wvmj-jf5w",
  "modified" : "2026-07-31T16:50:24Z",
  "published" : "2026-07-31T16:50:24Z",
  "aliases" : [ "CVE-2026-54753" ],
  "summary" : "`nx graph` dev server permissive CORS policy",
  "details" : "## Summary\n\nThe local HTTP server started by `nx graph` sent `Access-Control-Allow-Origin: *` on every response, letting any website a developer visited read the server's responses cross-origin — including the full project graph and the output of the `/help` endpoint, which runs a target's configured help command. The practical impact is typically **cross-origin information disclosure**, but can be arbitrary command injection in rare cases.\n\n## Severity\n\n\nExploitation requires the developer to be running `nx graph` and to visit an attacker page. Any execution beyond benign help commands also requires a malicious target to already be present in the workspace (see Details).\n\n## Affected & Patched Versions\n\nPackage: `nx` (npm).\n\n- **Affected:** `>= 17.0.4, < 22.7.2` and `>= 23.0.0-beta.0, < 23.0.0-beta.2`\n- **Patched:** `22.7.2`+ (backport) and `23.0.0` (first in `23.0.0-beta.2`)\n\nThe wildcard CORS header was introduced in `17.0.4`; the `/help` execution endpoint in `19.4.0`. **The `21.x` line is not patched** — `21.x` users should upgrade to `22.7.2` or later.\n\n## Details\n\n`nx graph` starts a local server (default `http://127.0.0.1:4211`). Before the fix, its request handler set a wildcard CORS header on every response:\n\n```ts\nres.setHeader('Access-Control-Allow-Origin', '*');\n```\n\nThe `/help` endpoint runs a target's configured command:\n\n```ts\nconst command = target.metadata?.help?.command;\nreturn execSync(command, { cwd: target.options?.cwd ?? workspaceRoot }).toString();\n```\n\nA `GET /help` is a CORS \"simple request\", so a malicious page could `fetch()` it with no preflight, and the wildcard header let the page read the result. This exposes the project graph (project names, file paths, dependencies, build configuration) and the output of any configured help command.\n\nThe command is not attacker-controlled through the request — it comes from the workspace's project configuration, and first-party plugins (jest, vite, cypress) populate it with benign, read-only help commands. For `/help` to run anything malicious, a target carrying a malicious `help.command` must already exist in the project graph, which can only be introduced by **installing a malicious package** or by **altering the workspace's own code/configuration** — both of which already grant code execution independent of this flaw.\n\nThe fix ([#35494](https://github.com/nrwl/nx/pull/35494)) removes the header; the browser's same-origin policy then blocks cross-origin reads.\n\n## References\n\n- Fix: [nrwl/nx#35494](https://github.com/nrwl/nx/pull/35494)\n- Introduced: [nrwl/nx#20744](https://github.com/nrwl/nx/pull/20744) (CORS), [nrwl/nx#26629](https://github.com/nrwl/nx/pull/26629) (`/help`)\n\n## Credits\n\nThanks to Nozomu Sasaki (Paul) ([@morimori-dev](https://github.com/morimori-dev)) for finding and responsibly reporting this issue.",
  "severity" : [ {
    "type" : "CVSS_V3",
    "score" : "CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:H/I:L/A:N"
  } ],
  "affected" : [ {
    "package" : {
      "ecosystem" : "npm",
      "name" : "nx"
    },
    "ranges" : [ {
      "type" : "ECOSYSTEM",
      "events" : [ {
        "introduced" : "17.0.4"
      }, {
        "fixed" : "22.7.2"
      } ]
    } ]
  }, {
    "package" : {
      "ecosystem" : "npm",
      "name" : "nx"
    },
    "ranges" : [ {
      "type" : "ECOSYSTEM",
      "events" : [ {
        "introduced" : "23.0.0-beta.0"
      }, {
        "fixed" : "23.0.0-beta.2"
      } ]
    } ]
  } ],
  "references" : [ {
    "type" : "WEB",
    "url" : "https://github.com/nrwl/nx/security/advisories/GHSA-g2r8-wvmj-jf5w"
  }, {
    "type" : "ADVISORY",
    "url" : "https://nvd.nist.gov/vuln/detail/CVE-2026-54753"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/nrwl/nx/pull/35494"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/nrwl/nx/commit/7620c1ffe598086ce5e66457c7e6e38799bb499d"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/nrwl/nx/commit/e59122c5569cf201561b9995ce4e34a304f4fb03"
  }, {
    "type" : "PACKAGE",
    "url" : "https://github.com/nrwl/nx"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/nrwl/nx/releases/tag/22.7.2"
  } ],
  "database_specific" : {
    "cwe_ids" : [ "CWE-749", "CWE-942" ],
    "severity" : "MODERATE",
    "github_reviewed" : true,
    "github_reviewed_at" : "2026-07-31T16:50:24Z",
    "nvd_published_at" : "2026-06-26T19:16:43Z"
  }
}