CVE-2026-9277
shell-quote `quote()` does not validate object-token shapes, allowing command injection via line terminators in `.op`
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.
Attack profile
How easy it is to exploit
- Attack vector
- Network
- Complexity
- Low
- Privileges needed
- None
- User interaction
- None
What an attacker can affect
- Confidentiality
- High
- Integrity
- High
- Availability
- High
Exploit likelihood
What each source reports
CVE List Score used
9.2
shell-quote `quote()` does not validate object-token shapes, allowing command injection via line terminators in `.op`
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.
- Record
CVE-2026-9277- CVSS 4.0
- 9.2 Critical
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N - CVSS 3.1
- 8.1 High
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H - CVSS 3.1
- 8.1 High
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H - Weakness
- CWE-78, CWE-77, CWE-78
- Updated
- 2026-11-02
EUVDEUVD-2026-31440
9.2
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.
- Record
EUVD-2026-31440- CVSS 4.0
- 9.2 Critical
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-w7jw-789q-3m8p
9.2
shell-quote quote() does not escape newlines in object .op values
Summary
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 \n as a command separator, so any content after it would execute as a second command.
The vulnerable code path is reachable in two ways. Neither requires the parser to misbehave — parse() only emits ops from a fixed control set — but both are documented API surface:
- Direct construction. A caller builds
{ op: '...\n...' }from external input (e.g. a deserialized argument array) and passes it toquote(). envFnreturn.parse(cmd, envFn)is documented to splice the return value ofenvFninto the result array when it is an object. An attacker-influenced data source consulted byenvFncan introduce an object token whose.opreachesquote().
Impact
Shell command injection in callers that pass object tokens with attacker-influenced .op values to quote() and then hand the result to a shell. The preconditions are narrower than ordinary string injection — they require the caller to feed object tokens into quote() — but object tokens are a public, documented part of the API surface, and quote() is intended to be a shell-safety boundary.
PoC
const { parse, quote } = require('shell-quote');
// Direct construction
quote([{ op: ';\nid' }]);
// → "\;\n\\i\\d" ← literal newline; second line executes as a command
// Via parse() with an envFn returning attacker-shaped objects
const tokens = parse('echo $X', () => ({ op: ';\nid' }));
require('child_process').execSync(quote(tokens), { shell: true });
// Executes `id` after `echo \;`.
Confirmed under sh, bash, dash, and zsh.
Patch
Fixed by replacing the per-character escape with strict shape validation in quote(). The object-token branch now:
{ op }—.opmust be a string from the same allowlist the parser emits (||,&&,;;,|&,<(,<<<,>>,>&,<&,&,;,(,),|,<,>). Anything else throwsTypeError. This is the direct fix for the reported issue and removes the entire class of.opinjection.{ op: 'glob', pattern }—.patternmust be a string with no line terminators. Glob metacharacters (*,?,[,],{,},,) pass through; all other shell-special characters are backslash-escaped. (Previously the pattern field was discarded entirely and the literal string\g\l\o\bwas emitted — a latent bug, not security-relevant.){ comment }—.commentmust be a string with no line terminators (line terminators would end the shell comment and resume command parsing — same injection shape).- Any other object shape —
TypeError.
The fix is allowlist-based rather than a targeted regex tweak, so it closes the reported vector and forecloses adjacent ones (U+2028 / U+2029 line separators in .op, line terminators in comments, unknown-shape objects coerced through .replace).
Workarounds
Prior to upgrading, callers that build object tokens from untrusted input should validate .op against the parser's operator set themselves, and never construct { op } from attacker-controlled strings.
Credits
Reported by Akshat Sinha
- Record
GHSA-w7jw-789q-3m8p- CVSS 4.0
- 9.2 Critical
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N - CVSS 3.1
- 8.1 High
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H - Weakness
- CWE-77, CWE-78
- Updated
- 2026-11-02
NVD
9.2
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.
- Record
CVE-2026-9277- CVSS 4.0
- 9.2 Critical
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/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 - CVSS 3.1
- 8.1 High
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H - Weakness
- CWE-77, CWE-78
- Updated
- 2026-11-02
OSV
9.2
shell-quote `quote()` does not validate object-token shapes, allowing command injection via line terminators in `.op`
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.
- Record
CVE-2026-9277- CVSS 4.0
- 9.2 Critical
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N - Weakness
- CWE-77, CWE-78
- Updated
- 2026-11-02
OSVDEBIAN-CVE-2026-9277
9.2
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.
- Record
DEBIAN-CVE-2026-9277- CVSS 4.0
- 9.2 Critical
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/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 - Updated
- 2026-11-02
Show 13 moreShow less
OSVGHSA-w7jw-789q-3m8p
9.2
shell-quote quote() does not escape newlines in object .op values
Summary
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 \n as a command separator, so any content after it would execute as a second command.
The vulnerable code path is reachable in two ways. Neither requires the parser to misbehave — parse() only emits ops from a fixed control set — but both are documented API surface:
- Direct construction. A caller builds
{ op: '...\n...' }from external input (e.g. a deserialized argument array) and passes it toquote(). envFnreturn.parse(cmd, envFn)is documented to splice the return value ofenvFninto the result array when it is an object. An attacker-influenced data source consulted byenvFncan introduce an object token whose.opreachesquote().
Impact
Shell command injection in callers that pass object tokens with attacker-influenced .op values to quote() and then hand the result to a shell. The preconditions are narrower than ordinary string injection — they require the caller to feed object tokens into quote() — but object tokens are a public, documented part of the API surface, and quote() is intended to be a shell-safety boundary.
PoC
const { parse, quote } = require('shell-quote');
// Direct construction
quote([{ op: ';\nid' }]);
// → "\;\n\\i\\d" ← literal newline; second line executes as a command
// Via parse() with an envFn returning attacker-shaped objects
const tokens = parse('echo $X', () => ({ op: ';\nid' }));
require('child_process').execSync(quote(tokens), { shell: true });
// Executes `id` after `echo \;`.
Confirmed under sh, bash, dash, and zsh.
Patch
Fixed by replacing the per-character escape with strict shape validation in quote(). The object-token branch now:
{ op }—.opmust be a string from the same allowlist the parser emits (||,&&,;;,|&,<(,<<<,>>,>&,<&,&,;,(,),|,<,>). Anything else throwsTypeError. This is the direct fix for the reported issue and removes the entire class of.opinjection.{ op: 'glob', pattern }—.patternmust be a string with no line terminators. Glob metacharacters (*,?,[,],{,},,) pass through; all other shell-special characters are backslash-escaped. (Previously the pattern field was discarded entirely and the literal string\g\l\o\bwas emitted — a latent bug, not security-relevant.){ comment }—.commentmust be a string with no line terminators (line terminators would end the shell comment and resume command parsing — same injection shape).- Any other object shape —
TypeError.
The fix is allowlist-based rather than a targeted regex tweak, so it closes the reported vector and forecloses adjacent ones (U+2028 / U+2029 line separators in .op, line terminators in comments, unknown-shape objects coerced through .replace).
Workarounds
Prior to upgrading, callers that build object tokens from untrusted input should validate .op against the parser's operator set themselves, and never construct { op } from attacker-controlled strings.
Credits
Reported by Akshat Sinha
- Record
GHSA-w7jw-789q-3m8p- CVSS 4.0
- 9.2 Critical
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N - CVSS 3.1
- 8.1 High
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H - Weakness
- CWE-77, CWE-78
- Updated
- 2026-11-02
OSVUBUNTU-CVE-2026-9277
9.2
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.
- Record
UBUNTU-CVE-2026-9277- CVSS 4.0
- 9.2 Critical
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N - CVSS 3.1
- 8.1 High
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H - Updated
- 2026-11-02
OSVCLSA-2026-1783558964 No score
TuxCare security update for shell-quote (1 CVE)
TuxCare rebuilt shell-quote to address 1 CVE. Fixed in 1.7.2-tuxcare.2.
- Record
CLSA-2026-1783558964- Updated
- 2026-11-02
OSVCLSA-2026-1784683086 No score
TuxCare security update for shell-quote (2 CVEs)
TuxCare rebuilt shell-quote to address 2 CVEs. Fixed in 1.7.3-tuxcare.1.
- Record
CLSA-2026-1784683086- Updated
- 2026-11-02
OSVCLSA-2026-1791201398 No score
TuxCare security update for shell-quote (2 CVEs)
TuxCare rebuilt shell-quote to address 2 CVEs. Fixed in 1.8.1-tuxcare.2.
- Record
CLSA-2026-1791201398- Updated
- 2026-11-02
OSVCLSA-2026-1791359284 No score
TuxCare security update for shell-quote (1 CVE)
TuxCare rebuilt shell-quote to address 1 CVE. Fixed in 1.8.3-tuxcare.1.
- Record
CLSA-2026-1791359284- Updated
- 2026-11-02
OSVCLSA-2026-1792163710 No score
TuxCare security update for shell-quote (2 CVEs)
TuxCare rebuilt shell-quote to address 2 CVEs. Fixed in 1.8.2-tuxcare.1.
- Record
CLSA-2026-1792163710- Updated
- 2026-11-02
OSVopenSUSE-SU-2026:10861-1 No score
python311-pytest-html-4.2.0-2.1 on GA media
These are all security issues fixed in the python311-pytest-html-4.2.0-2.1 package on the GA media of openSUSE Tumbleweed.
- Record
openSUSE-SU-2026:10861-1- Updated
- 2026-11-02
OSVopenSUSE-SU-2026:10979-1 No score
agama-web-ui-21+360.16caae772-44.1 on GA media
These are all security issues fixed in the agama-web-ui-21+360.16caae772-44.1 package on the GA media of openSUSE Tumbleweed.
- Record
openSUSE-SU-2026:10979-1- Updated
- 2026-11-02
OSVopenSUSE-SU-2026:20839-1 No score
Security update for python-pytest-html
This update for python-pytest-html fixes the following issues:
Changes in python-pytest-html:
- CVE-2026-9277: shell-quote: improper escaping of newlines (bsc#1266254) Update the vendored shell-quote to 1.8.4 node_modules
- Record
openSUSE-SU-2026:20839-1- Updated
- 2026-11-02
OSVopenSUSE-SU-2026:20919-1 No score
Security update for agama-web-ui
This update for agama-web-ui fixes the following issues
- CVE-2025-7339: on-headers: incorrect array handling may lead to HTTP response header manipulation (bsc#1246678).
- CVE-2026-9277: shell-quote: improper escaping of newlines in object .op values by quote() can lead to shell command injection (bsc#1266256).
- CVE-2026-42041: axios: authentication bypass via validateStatus prototype pollution gadget due to suppression of HTTP error (bsc#1264160).
- CVE-2026-42264: axios: prototype pollution read-side gadgets in HTTP adapter can lead to credential injection and request h (bsc#1264802).
Changes for agama-web-ui:
- Update other dependencies reported by "npm audit".
- Record
openSUSE-SU-2026:20919-1- Updated
- 2026-11-02
OSVROOT-APP-NPM-CVE-2026-9277 No score
CVE-2026-9277 in shell-quote - Patched by Root
Root has patched CVE-2026-9277 in the shell-quote package for Root:npm. Multiple fixed versions available.
- Record
ROOT-APP-NPM-CVE-2026-9277- Updated
- 2026-11-02
OSVUSN-8410-1 No score
node-shell-quote vulnerability
Akshat Sinha discovered that shell-quote improperly validated object-token inputs. An attacker could possibly use this issue to cause shell-quote to crash, resulting in a denial of service, or execute arbitrary code.
- Record
USN-8410-1- Updated
- 2026-11-02
Affected products
- red hat cluster observability operator 1.5.0
- red hat cryostat 4
- red hat cryostat 4 on rhel 9
- red hat gatekeeper 3
- red hat node healthcheck operator
- red hat openshift lightspeed
- red hat openshift pipelines
- red hat openshift service mesh 3
- red hat amq broker 7
- red hat ansible automation platform 2
- red hat ansible automation platform 2.1
- red hat build of apache camel - hawtio 4
Show 36 moreShow less
- red hat build of podman desktop
- red hat build of podman desktop - tech preview
- red hat data grid 8
- red hat developer hub 1.10
- red hat developer hub 1.9
- red hat discovery 2
- red hat enterprise linux 10
- red hat enterprise linux 8
- red hat enterprise linux 9
- red hat enterprise linux ai (rhel ai) 3
- red hat fuse 7
- red hat migration toolkit 1.8
- red hat openshift ai (rhoai)
- red hat openshift container platform 4.14
- red hat openshift container platform 4.15
- red hat openshift container platform 4.16
- red hat openshift container platform 4.17
- red hat openshift container platform 4.18
- red hat openshift container platform 4.19
- red hat openshift container platform 4.20
- red hat openshift container platform 4.21
- red hat openshift container platform 4.22
- red hat openshift dev spaces 3.30
- red hat openshift service mesh 2.6
- red hat openshift service mesh 3.0
- red hat openshift service mesh 3.1
- red hat openshift service mesh 3.2
- red hat openshift service mesh 3.3
- red hat openshift virtualization 4
- red hat quay 3.10
- red hat quay 3.12
- red hat quay 3.15
- red hat quay 3.16
- red hat quay 3.9
- red hat satellite 6.18
- red hat trusted artifact signer
Affected packages
| Package | Affected | Fixed |
|---|---|---|
shell-quotenpm |
1.1.0 to 1.8.3 | 1.8.4 |
shell-quoteTuxCare:npm |
1.7.2-tuxcare.0 up to 1.7.2-tuxcare.2, plus listed versions 1.7.21.7.2-tuxcare.1 |
1.7.2-tuxcare.2 |
shell-quoteTuxCare:npm From an advisory covering 2 CVEs |
1.7.3-tuxcare.0 up to 1.7.3-tuxcare.1, plus listed versions 1.7.3 |
1.7.3-tuxcare.1 |
shell-quoteTuxCare:npm From an advisory covering 2 CVEs |
1.8.1-tuxcare.0 up to 1.8.1-tuxcare.2, plus listed versions 1.8.11.8.1-tuxcare.1 |
1.8.1-tuxcare.2 |
shell-quoteTuxCare:npm |
1.8.3-tuxcare.0 up to 1.8.3-tuxcare.1, plus listed versions 1.8.3 |
1.8.3-tuxcare.1 |
shell-quoteTuxCare:npm From an advisory covering 2 CVEs |
1.8.2-tuxcare.0 up to 1.8.2-tuxcare.1, plus listed versions 1.8.2 |
1.8.2-tuxcare.1 |
node-shell-quoteDebian:12 |
before 1.7.4+~1.7.1-1+deb12u1, plus listed versions 1.7.4+~1.7.1-1 |
1.7.4+~1.7.1-1+deb12u1 |
node-shell-quoteDebian:13 |
before 1.7.4+~1.7.1-1+deb13u1, plus listed versions 1.7.4+~1.7.1-1 |
1.7.4+~1.7.1-1+deb13u1 |
node-shell-quoteDebian:14 |
before 1.8.4+~1.7.5-1, plus listed versions 1.7.4+~1.7.1-11.7.4+~1.7.1-21.8.3+~1.7.5-1 |
1.8.4+~1.7.5-1 |
shell-quotenpm |
1.1.0 up to 1.8.4 | 1.8.4 |
Show 11 moreShow less
| Package | Affected | Fixed |
|---|---|---|
shell-quoteRoot:npm |
before 1.6.3-aikido.3 | 1.6.3-aikido.31.8.1-aikido.11.7.2-aikido.21.8.0-aikido.21.7.3-aikido.11.8.3-aikido.21.8.3-aikido.31.7.3-aikido.21.8.2-aikido.11.8.0-aikido.11.8.2-aikido.21.7.2-aikido.1 |
@rootio/shell-quoteRoot:npm |
before 1.6.3-root.io.3 | 1.6.3-root.io.31.8.1-root.io.11.7.2-root.io.21.8.0-root.io.21.7.3-root.io.11.8.3-root.io.21.8.3-root.io.31.7.3-root.io.21.8.2-root.io.11.8.0-root.io.11.8.2-root.io.21.7.2-root.io.1 |
node-shell-quoteUbuntu:Pro:18.04:LTS |
before 1.6.1+20160617-git72fb5a8ce29b-1ubuntu0.1~esm1, plus listed versions 1.6.1+20160617-git72fb5a8ce29b-1 |
1.6.1+20160617-git72fb5a8ce29b-1ubuntu0.1~esm1 |
node-shell-quoteUbuntu:Pro:22.04:LTS |
before 1.7.3+~1.7.1-1ubuntu0.1~esm1, plus listed versions 1.7.3+~1.7.1-1 |
1.7.3+~1.7.1-1ubuntu0.1~esm1 |
node-shell-quoteUbuntu:24.04:LTS |
before 1.7.4+~1.7.1-1ubuntu0.24.04.1, plus listed versions 1.7.4+~1.7.1-1 |
1.7.4+~1.7.1-1ubuntu0.24.04.1 |
node-shell-quoteUbuntu:25.10 |
before 1.7.4+~1.7.1-1ubuntu0.25.10.1, plus listed versions 1.7.4+~1.7.1-1 |
1.7.4+~1.7.1-1ubuntu0.25.10.1 |
node-shell-quoteUbuntu:26.10 |
All versions, plus listed versions 1.8.3+~1.7.5-11.9.0+~1.7.5-11.10.0-1 |
None known |
node-shell-quoteUbuntu:Pro:26.04:LTS |
before 1.8.3+~1.7.5-1ubuntu0.1~esm1, plus listed versions 1.7.4+~1.7.1-11.8.3+~1.7.5-1 |
1.8.3+~1.7.5-1ubuntu0.1~esm1 |
python-pytest-htmlopenSUSE:Tumbleweed |
before 4.2.0-2.1 | 4.2.0-2.1 |
agama-web-uiopenSUSE:Tumbleweed From an advisory covering 2 CVEs |
before 21+360.16caae772-44.1 | 21+360.16caae772-44.1 |
agama-web-uiopenSUSE:Leap 16.0 From an advisory covering 4 CVEs |
before 17+612.d8bf69336-160000.11.1 | 17+612.d8bf69336-160000.11.1 |
Public exploits
Links only. Every CVE stores no exploit code.
| Source | Link | Date |
|---|---|---|
| PoC in GitHub | DylanZahedi/CVE-2026-9277 | 2026-06-15 |
History
| Recorded | Changed | Sources |
|---|---|---|
| affected, facts | ||
| first indexed | CVE List, EUVD, GitHub Advisories, NVD, OSV, PoC in GitHub |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2026-9277 is a critical vulnerability (CVSS 9.2) in Shell-quote, published May 22, 2026. Public exploit code exists. EPSS puts the chance of exploitation in the next 30 days at 0.79%, the 56th percentile. Fixed in shell-quote 1.8.4.
References
github.com/ljharb/shell-quote/security/advisories/GHSA-w7jw-789q-3m8p
github.com/ljharb/shell-quote/commit/1518179
github.com/ljharb/shell-quote
npmjs.com/package/shell-quote
openwall.com/lists/oss-security/2026/05/23/2
access.redhat.com/security/cve/CVE-2026-9277
Show 51 moreShow less
bugzilla.redhat.com/show_bug.cgi?id=2480741
security.access.redhat.com/data/csaf/v2/vex/2026/cve-2026-9277.json
access.redhat.com/errata/RHSA-2026:28010
access.redhat.com/errata/RHSA-2026:34342
access.redhat.com/errata/RHSA-2026:50850
access.redhat.com/errata/RHSA-2026:36754
access.redhat.com/errata/RHSA-2026:33574
access.redhat.com/errata/RHSA-2026:29197
access.redhat.com/errata/RHSA-2026:41928
access.redhat.com/errata/RHSA-2026:62410
access.redhat.com/errata/RHSA-2026:56912
access.redhat.com/errata/RHSA-2026:56854
access.redhat.com/errata/RHSA-2026:60023
access.redhat.com/errata/RHSA-2026:48699
access.redhat.com/errata/RHSA-2026:40765
access.redhat.com/errata/RHSA-2026:44263
access.redhat.com/errata/RHSA-2026:34791
access.redhat.com/errata/RHSA-2026:44267
access.redhat.com/errata/RHSA-2026:29834
access.redhat.com/errata/RHSA-2026:44237
access.redhat.com/errata/RHSA-2026:29795
access.redhat.com/errata/RHSA-2026:62260
access.redhat.com/errata/RHSA-2026:26072
access.redhat.com/errata/RHSA-2026:26080
access.redhat.com/errata/RHSA-2026:26077
access.redhat.com/errata/RHSA-2026:26079
access.redhat.com/errata/RHSA-2026:26090
access.redhat.com/errata/RHSA-2026:33683
access.redhat.com/errata/RHSA-2026:30076
access.redhat.com/errata/RHSA-2026:42796
access.redhat.com/errata/RHSA-2026:41066
access.redhat.com/errata/RHSA-2026:28571
access.redhat.com/errata/RHSA-2026:26225
nvd.nist.gov/vuln/detail/CVE-2026-9277
github.com/advisories/GHSA-w7jw-789q-3m8p
github.com/CVEProject/cvelistV5/tree/main/cves/2026/9xxx/CVE-2026-9277.json
security-tracker.debian.org/tracker/CVE-2026-9277
ubuntu.com/security/CVE-2026-9277
cve.org/CVERecord?id=CVE-2026-9277
github.com/ljharb/shell-quote/commit/4378a6e613db5948168684864e49b42b83134d2d
ubuntu.com/security/notices/USN-8410-1
suse.com/security/cve/CVE-2026-9277
suse.com/security/cve/CVE-2026-6402
bugzilla.suse.com/1266254
bugzilla.suse.com/1246678
bugzilla.suse.com/1264160
bugzilla.suse.com/1264802
bugzilla.suse.com/1266256
suse.com/security/cve/CVE-2025-7339
suse.com/security/cve/CVE-2026-42041
suse.com/security/cve/CVE-2026-42264