CVE-2026-119282
Mở trang đầy đủCVSS 7.3 HIGH RCE
@nx/maven and @nx/gradle have OS command injection via nx.json plugin options
Mô tả
Summary
@nx/maven and @nx/gradle spawn their project-graph analyzers through a shell and interpolate plugin options read from nx.json straight into the command line. Because a shell parses the whole line, an option value containing shell syntax is executed as a command by any nx command that constructs the project graph. Anyone who clones a hostile repository, or who checks out a pull request that edits nx.json, runs the injected command with their own privileges.
Severity
A victim who runs an ordinary nx command in an attacker-supplied Maven or Gradle workspace gets code execution as themselves. In most such workspaces an attacker who can write nx.json can already run code through the repository's build files (./mvnw, pom.xml, and the Gradle equivalents), so the genuinely new exposure is narrow — for example CI building a fork's pull request where nx.json is writable but the build files are not. We have no evidence of exploitation in the wild.
Affected & Patched Versions
| Package | Vulnerable | Patched |
|---|---|---|
@nx/maven |
>= 22.0.2, < 22.7.9; >= 23.0.0, < 23.1.2 |
22.7.9, 23.1.2 |
@nx/gradle |
>= 21.0.0, < 22.7.9; >= 23.0.0, < 23.1.2 |
22.7.9, 23.1.2 |
[!IMPORTANT]
Workspaces that register neither@nx/mavennor@nx/gradleinnx.jsonare unaffected — the vulnerable code only runs from those plugins' graph-construction paths, and no other Nx plugin shares this pattern.
Remediation
Upgrade to 22.7.9 (22.x line) or 23.1.2 (23.x line) or later:
nx migrate 23.1.2
Upgrade both nx and the affected plugin (@nx/maven and/or @nx/gradle). The plugin's fix depends on code that ships in the nx package, so bumping the plugin without a matching nx upgrade will not resolve it.
There is no configuration to change — upgrading is the whole fix. If you cannot upgrade yet, only run nx commands in repositories you trust, since a malicious nx.json can execute code on a vulnerable version.
Details
Both plugins spawn their analyzer through a shell and interpolate nx.json plugin options into the command, so those option values are shell source. For Maven the injectable value is the targetNamePrefix option; for Gradle it is broader, since every plugin option is mapped into a -P argument and arbitrary option names are accepted, making both the name and value of any option injectable.
Credits
- Arkadiusz Marta (RE:SOURCE) — Reporter
Điểm và phân loại
- CVSS
- 7.3 HIGH v4.0
- Nguồn điểm
- NVD
- Mức độ (theo nguồn)
- HIGH
- EPSS
- 0.14%
Vector CVSS:4.0/AV:L/AC:L/AT:P/PR:N/UI:P/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
Ảnh hưởng
| Package | Bản bị ảnh hưởng | Bản đã sửa |
|---|---|---|
npm @nx/maven |
>= 22.0.2, < 22.7.9 |
22.7.9
|
npm @nx/maven |
>= 23.0.0, < 23.1.2 |
23.1.2
|
npm @nx/gradle |
>= 21.0.0, < 22.7.9 |
22.7.9
|
npm @nx/gradle |
>= 23.0.0, < 23.1.2 |
23.1.2
|
Sản phẩm
- nrwl nx
- @nx maven
- @nx gradle
Vì sao bị lọc
- CVSS 7.3 < 8.0 và không thuộc CISA KEV
Loại tác động
- RCE
- CWE-78; từ khoá "command injection"
Dữ liệu riêng của nguồn
- CVE.org · Đơn vị cấp mã
- GitHub_M
- OSV.dev · ID
- GHSA-qm8w-vx34-5j9j
Tham khảo
- https://github.com/advisories/GHSA-qm8w-vx34-5j9j
- https://github.com/nrwl/nx/security/advisories/GHSA-qm8w-vx34-5j9j
- https://nvd.nist.gov/vuln/detail/CVE-2026-119282
- https://github.com/nrwl/nx/pull/36626
- https://github.com/nrwl/nx/commit/02c5d59e8dbbbe30963c0181c6a22cd8c1190a25
- https://github.com/nrwl/nx/commit/60196b7cfcffcada35b6b90e53bf1a78d049b548
- https://github.com/nrwl/nx/commit/c227f4780b054c512965c73aa480a48f9f781409
- https://github.com/nrwl/nx/releases/tag/22.7.9
- https://github.com/nrwl/nx/releases/tag/23.1.2
- https://osv.dev/vulnerability/GHSA-qm8w-vx34-5j9j
- https://github.com/nrwl/nx