CVE-2026-9277: shell-quote · OS Command Injection
Affects shell-quoteSource CVE Database V5
Not known to be exploited · CVSS 8.1 High : upgrade to 1.8.4 soon.
Data as of 30 Oct 2026, 11:52 UTC
- EPSS
- 0.7% chance of exploitation in 30 days – higher than 56% of CVEsExploit Prediction Scoring System: the likelihood attackers will use this flaw soon.
- Patch
- Available – fixed in 1.8.4
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:HExploitation evidence
Disclosed: evidence found.
CVE published 22 May 2026
Detectable: no evidence on record.
No public nuclei template indexed
Weaponized: evidence found.
Public exploit code: GitHub proofs of concept
Exploited in the wildExploited: no evidence on record.
Not in CISA KEV and no source reports exploitation
Observed by OffSeq MirageSeen by Mirage: no evidence on record.
No attack traffic recorded by OffSeq Mirage sensors
A missing step is not evidence of safety. Sources: cve.org (opens in a new tab), GitHub proofs of concept, the Metasploit, Exploit-DB and nuclei-templates index as of 24 Oct 2026.
What to do
Upgrade shell-quote to 1.8.4.
Affected software
| Product | Affected | Fixed in |
|---|---|---|
| shell-quote | Affected
| Fixed in
|
npmshell-quotepkg:npm/shell-quoteOther threats | Affected
| Fixed in– |
npmshell-quotepkg:npm/shell-quoteOther threats | Affected
| Fixed in
|
Check your own hosts for these packages with threat-finder (opens in a new tab), our free open-source scanner.
AI-suggested
An official fix is available and has been released that enforces strict validation of the .op field and forbids line terminators in tokens. Users should upgrade to the fixed version of shell-quote. The Red Hat advisory confirms the availability of a security update addressing this issue. No additional mitigations are specified beyond applying the official patch.
Description
shell-quote's `quote()` function did not validate object-token inputs against the operator model used by `parse()`. The `.op` field was backslash-escaped character by character using `/(.)/g`, which in JavaScript does not match line terminators (\n, \r, U+2028, U+2029). A line terminator in `.op` therefore passed through unescaped into the output; POSIX shells treat a literal newline as a command separator, so any content after it would execute as a second command. The vulnerable code path is reachable in two ways: (1) direct construction of `{ op: '...\n...' }` from external input, and (2) via `parse(cmd, envFn)` when `envFn` returns object tokens whose `.op` is attacker-influenced. Both are documented API surface. Fixed by replacing the per-character escape with strict shape validation: `.op` must match the parser's control-operator allowlist; `{ op: 'glob', pattern }` validates `pattern` and forbids line terminators; `{ comment }` validates `comment` and forbids line terminators; any other object shape throws `TypeError`.
References
- github.com/ljharb/shell-quote/security/advisories/GHSA-w7jw-789q-3m8p (opens in a new tab)
- github.com/ljharb/shell-quote/commit/1518179 (opens in a new tab)
- github.com/ljharb/shell-quote (opens in a new tab)
- npmjs.com/package/shell-quote (opens in a new tab)
- openwall.com/lists/oss-security/2026/05/23/2 (opens in a new tab)
- access.redhat.com/security/cve/CVE-2026-9277 (opens in a new tab)
- bugzilla.redhat.com/show_bug.cgi?id=2480741 (opens in a new tab)
- security.access.redhat.com/data/csaf/v2/vex/2026/cve-2026-9277.json (opens in a new tab)
- access.redhat.com/errata/RHSA-2026:28010 (opens in a new tab)
- access.redhat.com/errata/RHSA-2026:34342 (opens in a new tab)
- access.redhat.com/errata/RHSA-2026:36754 (opens in a new tab)
- access.redhat.com/errata/RHSA-2026:33574 (opens in a new tab)
- access.redhat.com/errata/RHSA-2026:26234 (opens in a new tab)
- access.redhat.com/errata/RHSA-2026:29197 (opens in a new tab)
- access.redhat.com/errata/RHSA-2026:41928 (opens in a new tab)
- access.redhat.com/errata/RHSA-2026:40765 (opens in a new tab)
- access.redhat.com/errata/RHSA-2026:44263 (opens in a new tab)
- access.redhat.com/errata/RHSA-2026:34791 (opens in a new tab)
- access.redhat.com/errata/RHSA-2026:44267 (opens in a new tab)
- access.redhat.com/errata/RHSA-2026:29834 (opens in a new tab)
- access.redhat.com/errata/RHSA-2026:44237 (opens in a new tab)
- access.redhat.com/errata/RHSA-2026:29795 (opens in a new tab)
- access.redhat.com/errata/RHSA-2026:26072 (opens in a new tab)
- access.redhat.com/errata/RHSA-2026:26080 (opens in a new tab)
- access.redhat.com/errata/RHSA-2026:26077 (opens in a new tab)
- access.redhat.com/errata/RHSA-2026:26079 (opens in a new tab)
- access.redhat.com/errata/RHSA-2026:26090 (opens in a new tab)
- access.redhat.com/errata/RHSA-2026:30076 (opens in a new tab)
- access.redhat.com/errata/RHSA-2026:42796 (opens in a new tab)
- access.redhat.com/errata/RHSA-2026:41066 (opens in a new tab)
- access.redhat.com/errata/RHSA-2026:33683 (opens in a new tab)
- access.redhat.com/errata/RHSA-2026:28571 (opens in a new tab)
- access.redhat.com/errata/RHSA-2026:26225 (opens in a new tab)
- access.redhat.com/errata/RHSA-2026:50850 (opens in a new tab)
- access.redhat.com/errata/RHSA-2026:48699 (opens in a new tab)
- access.redhat.com/errata/RHSA-2026:56912 (opens in a new tab)
- access.redhat.com/errata/RHSA-2026:56854 (opens in a new tab)
- access.redhat.com/errata/RHSA-2026:62260 (opens in a new tab)
- access.redhat.com/errata/RHSA-2026:60023 (opens in a new tab)
- access.redhat.com/errata/RHSA-2026:62410 (opens in a new tab)