CVE-2026-102422 — shell-quote
Fix: ljharb/shell-quote@6002b2eCVE-2026-102422 is a OS Command Injection vulnerability in shell-quote. A fix is available for shell-quote — see the affected versions and patch details below.
shell-quote `quote()` command injection via a line terminator in a token after a `{ comment }` token
Exploitation Status
No confirmed exploitation observed yet
- A successful exploit gives an attacker total control of the affected component, not partial access.
- CISA’s own triage has not observed active exploitation or public proof-of-concept code for this CVE as of its last assessment.
Exploitation and automatability from CISA’s SSVC triage for CVE-2026-102422.
EPSS Exploitation Probability
Probability of exploitation in the next 30 days, from FIRST.org EPSS.
Real-World Exposure
shell-quoteReal-time download stats are indexed for npm and PyPI packages. This vulnerability affects npm packages — download data is not available via public APIs for these ecosystems.
Description
Impact
quote() emits a { comment } token as # followed by its text, which comments out the rest of the shell line, including the opening quote of any later string token. A line terminator in that later string ends the comment, and the rest of the string is parsed as shell input:
quote(['echo', 'ok', { comment: 'x' }, 'a\nid;#']);
// echo ok #x 'a
// id;#'
Passed to sh, bash, dash, ksh, or zsh, this runs id.
parse() emits a comment token for a # in the middle of a word (for example http://example.com/#frag), so callers that combine parse() output with another untrusted string, such as quote(parse(untrustedCommand).concat(untrustedArg)), are affected. The fix for CVE-2026-9277 rejected line terminators in the comment's own text, but not in the tokens after it.
Exploitation requires an attacker-controlled string containing a line terminator that follows a { comment } token in the same quote() call.
Patches
Fixed in v1.11.0: quote() throws a TypeError when a string after a { comment } token contains a line terminator (\n, \r, U+2028, or U+2029).
Workarounds
Drop every token after a { comment } token before calling quote(), or reject line terminators in untrusted strings. Separately, do not append other shell text after quote() output that contains a comment, since the comment swallows it.
Affected Packages
| Ecosystem | Package | Vulnerable range | Fix |
|---|---|---|---|
| 📦npm | shell-quote | ≥ 1.8.4&&< 1.11.0 | 1.11.0npm install shell-quote@1.11.0 |
Detection & mitigation playbook
Open-source dependencyDetect
Scan your dependency tree (package-lock.json, pnpm-lock.yaml, requirements.txt, go.sum, etc.) for shell-quote, including transitive dependencies — a direct dependency you never call can still pull in a vulnerable version.
Fix
Update shell-quote to 1.11.0 or later, then make sure no transitive (indirect) dependency still pins the vulnerable range — O3 confirms CVE-2026-102422 is resolved across your whole dependency graph.
Workarounds
Stop passing untrusted input into the interpreter or shell: call the affected binary with an argument array rather than a composed command string, reject anything outside a strict allowlist of expected values, and run the component under an account that cannot reach beyond the work it legitimately does.
Fixing This On Your OS
If you run this on a Linux distribution, patch through your package manager against the distro's own security advisory below — it tracks the exact backported fix for your release, which can ship on a different timeline (and sometimes a different severity) than the upstream project.
This issue is rated Important. Exploitation leads to arbitrary command execution with the privileges of the calling application, but only when that application passes the output of shell-quote's parse(), combined with another attacker-controlled string, to quote() and then runs the result through a shell. Red Hat…
Mitigation for this issue is either not available or the currently available options do not meet the Red Hat Product Security criteria comprising ease of use and deployment, applicability to widespread installation base, or stability.Source: Red Hat security advisory for CVE-2026-102422 (CC BY 4.0)
| Product | Fixed in | Advisory |
|---|---|---|
| Red Hat Hardened Images | jaeger-main-2.20.0-0.11.hum1 | RHSA-2026:69544 |
| Red Hat Hardened Images | grafana13-1-main-13.1.6-0.4.hum1 | RHSA-2026:72498 |
| Red Hat Hardened Images | grafana13-2-main-13.2.1-0.8.hum1 | RHSA-2026:72507 |
| Red Hat Hardened Images | prometheus3-13-main-3.13.3-0.2.hum1 | RHSA-2026:72750 |
Frequently Asked Questions
Is CVE-2026-102422 in your dependencies?
Find it across npm, including transitive dependencies.