CVE-2026-13311
shell-quote parse() is quadratic in token count, enabling denial of service
shell-quote prior to 1.8.5 finalizes parsed tokens in parse() using Array.prototype.concat as a reduce accumulator, which reallocates and copies the entire growing array on every iteration. As a result parse() runs in O(n^2) time relative to the number of input tokens. An attacker who can supply an attacker-controlled string to any code path that calls parse() (no shell metacharacters are required; plain space-separated words suffice) can block the single-threaded Node.js event loop for an extended period with a small input, resulting in a denial of service. There is no code execution or data disclosure; impact is to availability only. Fixed in 1.8.5.
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
- None
- Integrity
- None
- Availability
- High
Exploit likelihood
What each source reports
CVE List Score used
8.7
shell-quote parse() is quadratic in token count, enabling denial of service
shell-quote prior to 1.8.5 finalizes parsed tokens in parse() using Array.prototype.concat as a reduce accumulator, which reallocates and copies the entire growing array on every iteration. As a result parse() runs in O(n^2) time relative to the number of input tokens. An attacker who can supply an attacker-controlled string to any code path that calls parse() (no shell metacharacters are required; plain space-separated words suffice) can block the single-threaded Node.js event loop for an extended period with a small input, resulting in a denial of service. There is no code execution or data disclosure; impact is to availability only. Fixed in 1.8.5.
- Record
CVE-2026-13311- CVSS 4.0
- 8.7 High
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N - CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Weakness
- CWE-407
- Updated
- 2026-11-02
EUVDEUVD-2026-39180
8.7
shell-quote prior to 1.8.5 finalizes parsed tokens in parse() using Array.prototype.concat as a reduce accumulator, which reallocates and copies the entire growing array on every iteration. As a result parse() runs in O(n^2) time relative to the number of input tokens. An attacker who can supply an attacker-controlled string to any code path that calls parse() (no shell metacharacters are required; plain space-separated words suffice) can block the single-threaded Node.js event loop for an extended period with a small input, resulting in a denial of service. There is no code execution or data disclosure; impact is to availability only. Fixed in 1.8.5.
- Record
EUVD-2026-39180- CVSS 4.0
- 8.7 High
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-395f-4hp3-45gv
8.7
shell-quote: Quadratic-complexity Denial of Service in `parse()` (CWE-407)
Summary
shell-quote's parse() finalizes its token list with a reduce that uses
Array.prototype.concat as the accumulator. Each prev.concat(arg) copies the entire growing
array, so parse() runs in O(n²) in the number of tokens. An unauthenticated attacker who
can submit a string to any code path that calls parse() on it can block the single-threaded
Node.js event loop for tens of seconds with a small input — a denial of service. The trigger
needs no shell metacharacters (plain space-separated words suffice), so input filters that
only screen for ;, |, $, or backticks do not help.
Root cause
parse.js (lines 200–203), in parseInternal — this path runs on every parse() call:
}).reduce(function (prev, arg) { // finalize parsed arguments
// TODO: replace this whole reduce with a concat
return typeof arg === 'undefined' ? prev : prev.concat(arg);
}, []);
prev.concat(arg) allocates a new array and copies all of prev on every iteration, so
producing an N-token result costs 1 + 2 + … + N = O(N²) copies. A second acc.concat(s)
reduce in the module.exports wrapper (lines 211–224, reached only when env is a function)
has the same shape. The maintainer's own // TODO: replace this whole reduce with a concat
already flags the construct.
Proof of Concept
const { parse } = require('shell-quote');
const ms = fn => { const t = process.hrtime.bigint(); fn(); return Number(process.hrtime.bigint()-t)/1e6; };
for (const N of [16000, 32000, 64000, 128000]) {
console.log(N, 'tokens ->', ms(() => parse('x '.repeat(N))).toFixed(0), 'ms');
}
Measured on [email protected], Node v24:
| input (N tokens) | bytes | parse() | ratio vs prev (2× input) |
|-----------------:|-------:|----------:|:------------------------:|
| 16 000 | 32 KB | 678 ms | — |
| 32 000 | 64 KB | 4 169 ms | ×6.2 |
| 64 000 | 128 KB | 14 914 ms | ×3.6 |
| 128 000 | 256 KB | 57 319 ms | ×3.8 |
Time grows ~×4 per 2× input → confirmed O(n²). A ~128 KB input blocks the event loop ~15 s; ~256 KB → ~57 s; a few hundred KB more → minutes. <img width="656" height="214" alt="image" src="https://github.com/user-attachments/assets/e8955b0e-0527-45ca-94b7-c3a2d8c0c82e" /> poc.js
Impact
parse() is synchronous on the main thread; while it copies arrays quadratically the entire
event loop is blocked and the process serves no other requests. Any service that calls parse()
on attacker-influenced input (command parsers, chat-ops / bot command handlers, REPLs,
build-script / arg-string splitters) can be driven to a sustained DoS with a single small
request. No code execution and no data disclosure — availability only.
End-to-end confirmation: a minimal HTTP server that calls parse() on the request body, hit
with one POST of 'x '.repeat(32000) (~63 KB), froze for ~4.5 s. An out-of-process probe
client issuing harmless GET /ping requests (normally ~1 ms) observed 27 consecutive pings
stalled by up to 4374 ms during that single request — i.e. every concurrent client was denied
service for the whole parse. Scaling the body to a few hundred KB extends the outage to minutes.
This is the same class as several accepted 2026 advisories for quadratic-parser DoS on
untrusted input (e.g. markdown-it CVE-2026-48988, js-yaml CVE-2026-53550,
python-multipart CVE-2026-53539). It is distinct from the known shell-quote
command-injection issues (CVE-2021-42740, CVE-2016-10541, CVE-2026-9277), which are all in
quote(), not parse().
Suggested remediation
Replace the O(n²) concat-in-reduce with a linear flatten that pushes into the
accumulator instead of reallocating and copying it on every iteration. Apply the
same shape to the wrapper's acc.concat(s) reduce.…
- Record
GHSA-395f-4hp3-45gv- CVSS 4.0
- 8.7 High
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N - CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Weakness
- CWE-407
- Updated
- 2026-11-02
NVD
8.7
shell-quote prior to 1.8.5 finalizes parsed tokens in parse() using Array.prototype.concat as a reduce accumulator, which reallocates and copies the entire growing array on every iteration. As a result parse() runs in O(n^2) time relative to the number of input tokens. An attacker who can supply an attacker-controlled string to any code path that calls parse() (no shell metacharacters are required; plain space-separated words suffice) can block the single-threaded Node.js event loop for an extended period with a small input, resulting in a denial of service. There is no code execution or data disclosure; impact is to availability only. Fixed in 1.8.5.
- Record
CVE-2026-13311- CVSS 4.0
- 8.7 High
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/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
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Weakness
- CWE-407
- Updated
- 2026-11-02
OSV
8.7
shell-quote parse() is quadratic in token count, enabling denial of service
shell-quote prior to 1.8.5 finalizes parsed tokens in parse() using Array.prototype.concat as a reduce accumulator, which reallocates and copies the entire growing array on every iteration. As a result parse() runs in O(n^2) time relative to the number of input tokens. An attacker who can supply an attacker-controlled string to any code path that calls parse() (no shell metacharacters are required; plain space-separated words suffice) can block the single-threaded Node.js event loop for an extended period with a small input, resulting in a denial of service. There is no code execution or data disclosure; impact is to availability only. Fixed in 1.8.5.
- Record
CVE-2026-13311- CVSS 4.0
- 8.7 High
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N - Weakness
- CWE-407
- Updated
- 2026-11-02
OSVDEBIAN-CVE-2026-13311
8.7
shell-quote prior to 1.8.5 finalizes parsed tokens in parse() using Array.prototype.concat as a reduce accumulator, which reallocates and copies the entire growing array on every iteration. As a result parse() runs in O(n^2) time relative to the number of input tokens. An attacker who can supply an attacker-controlled string to any code path that calls parse() (no shell metacharacters are required; plain space-separated words suffice) can block the single-threaded Node.js event loop for an extended period with a small input, resulting in a denial of service. There is no code execution or data disclosure; impact is to availability only. Fixed in 1.8.5.
- Record
DEBIAN-CVE-2026-13311- CVSS 4.0
- 8.7 High
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/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 12 moreShow less
OSVGHSA-395f-4hp3-45gv
8.7
shell-quote: Quadratic-complexity Denial of Service in `parse()` (CWE-407)
Summary
shell-quote's parse() finalizes its token list with a reduce that uses
Array.prototype.concat as the accumulator. Each prev.concat(arg) copies the entire growing
array, so parse() runs in O(n²) in the number of tokens. An unauthenticated attacker who
can submit a string to any code path that calls parse() on it can block the single-threaded
Node.js event loop for tens of seconds with a small input — a denial of service. The trigger
needs no shell metacharacters (plain space-separated words suffice), so input filters that
only screen for ;, |, $, or backticks do not help.
Root cause
parse.js (lines 200–203), in parseInternal — this path runs on every parse() call:
}).reduce(function (prev, arg) { // finalize parsed arguments
// TODO: replace this whole reduce with a concat
return typeof arg === 'undefined' ? prev : prev.concat(arg);
}, []);
prev.concat(arg) allocates a new array and copies all of prev on every iteration, so
producing an N-token result costs 1 + 2 + … + N = O(N²) copies. A second acc.concat(s)
reduce in the module.exports wrapper (lines 211–224, reached only when env is a function)
has the same shape. The maintainer's own // TODO: replace this whole reduce with a concat
already flags the construct.
Proof of Concept
const { parse } = require('shell-quote');
const ms = fn => { const t = process.hrtime.bigint(); fn(); return Number(process.hrtime.bigint()-t)/1e6; };
for (const N of [16000, 32000, 64000, 128000]) {
console.log(N, 'tokens ->', ms(() => parse('x '.repeat(N))).toFixed(0), 'ms');
}
Measured on [email protected], Node v24:
| input (N tokens) | bytes | parse() | ratio vs prev (2× input) |
|-----------------:|-------:|----------:|:------------------------:|
| 16 000 | 32 KB | 678 ms | — |
| 32 000 | 64 KB | 4 169 ms | ×6.2 |
| 64 000 | 128 KB | 14 914 ms | ×3.6 |
| 128 000 | 256 KB | 57 319 ms | ×3.8 |
Time grows ~×4 per 2× input → confirmed O(n²). A ~128 KB input blocks the event loop ~15 s; ~256 KB → ~57 s; a few hundred KB more → minutes. <img width="656" height="214" alt="image" src="https://github.com/user-attachments/assets/e8955b0e-0527-45ca-94b7-c3a2d8c0c82e" /> poc.js
Impact
parse() is synchronous on the main thread; while it copies arrays quadratically the entire
event loop is blocked and the process serves no other requests. Any service that calls parse()
on attacker-influenced input (command parsers, chat-ops / bot command handlers, REPLs,
build-script / arg-string splitters) can be driven to a sustained DoS with a single small
request. No code execution and no data disclosure — availability only.
End-to-end confirmation: a minimal HTTP server that calls parse() on the request body, hit
with one POST of 'x '.repeat(32000) (~63 KB), froze for ~4.5 s. An out-of-process probe
client issuing harmless GET /ping requests (normally ~1 ms) observed 27 consecutive pings
stalled by up to 4374 ms during that single request — i.e. every concurrent client was denied
service for the whole parse. Scaling the body to a few hundred KB extends the outage to minutes.
This is the same class as several accepted 2026 advisories for quadratic-parser DoS on
untrusted input (e.g. markdown-it CVE-2026-48988, js-yaml CVE-2026-53550,
python-multipart CVE-2026-53539). It is distinct from the known shell-quote
command-injection issues (CVE-2021-42740, CVE-2016-10541, CVE-2026-9277), which are all in
quote(), not parse().
Suggested remediation
Replace the O(n²) concat-in-reduce with a linear flatten that pushes into the
accumulator instead of reallocating and copying it on every iteration. Apply the
same shape to the wrapper's acc.concat(s) reduce.…
- Record
GHSA-395f-4hp3-45gv- CVSS 4.0
- 8.7 High
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N - CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Weakness
- CWE-407
- Updated
- 2026-11-02
OSVUBUNTU-CVE-2026-13311
8.7
shell-quote prior to 1.8.5 finalizes parsed tokens in parse() using Array.prototype.concat as a reduce accumulator, which reallocates and copies the entire growing array on every iteration. As a result parse() runs in O(n^2) time relative to the number of input tokens. An attacker who can supply an attacker-controlled string to any code path that calls parse() (no shell metacharacters are required; plain space-separated words suffice) can block the single-threaded Node.js event loop for an extended period with a small input, resulting in a denial of service. There is no code execution or data disclosure; impact is to availability only. Fixed in 1.8.5.
- Record
UBUNTU-CVE-2026-13311- CVSS 4.0
- 8.7 High
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N - CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - 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-1791584881 No score
TuxCare security update for shell-quote (1 CVE)
TuxCare rebuilt shell-quote to address 1 CVE. Fixed in 1.8.3-tuxcare.2.
- Record
CLSA-2026-1791584881- 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:11145-1 No score
heroic-games-launcher-2.22.0-3.1 on GA media
These are all security issues fixed in the heroic-games-launcher-2.22.0-3.1 package on the GA media of openSUSE Tumbleweed.
- Record
openSUSE-SU-2026:11145-1- Updated
- 2026-11-02
OSVopenSUSE-SU-2026:11149-1 No score
python311-pytest-html-4.2.0-3.1 on GA media
These are all security issues fixed in the python311-pytest-html-4.2.0-3.1 package on the GA media of openSUSE Tumbleweed.
- Record
openSUSE-SU-2026:11149-1- Updated
- 2026-11-02
OSVopenSUSE-SU-2026:11472-1 No score
agama-web-ui-23+75.1a877fb50-50.1 on GA media
These are all security issues fixed in the agama-web-ui-23+75.1a877fb50-50.1 package on the GA media of openSUSE Tumbleweed.
- Record
openSUSE-SU-2026:11472-1- Updated
- 2026-11-02
OSVopenSUSE-SU-2026:21176-1 No score
Security update for python-pytest-html
This update for python-pytest-html fixes the following issues:
Changes in python-pytest-html:
- Revendor updating shell-quote and js-yaml deps:
- CVE-2026-13311: shell-quote: inefficient input parsing can lead to a denial of service (bsc#1269361)
- CVE-2026-53550: js-yaml: quadratic complexity when processing a crafted YAML document can lead to CPU exhaustion (bsc#1268818)
- Record
openSUSE-SU-2026:21176-1- Updated
- 2026-11-02
OSVopenSUSE-SU-2026:21448-1 No score
Security update for agama-web-ui
This update for agama-web-ui fixes the following issues:
- CVE-2025-7783: form-data: unsafe
Math.random()function is used to select a boundary value for multipart form-encoded data (bsc#1246822). - CVE-2026-12143: form-data: CRLF injection via unescaped multipart field names and filenames (bsc#1272310).
- CVE-2026-13149: brace-expansion:
expand()function exhibits exponential-time complexity when processing non-expanding{}brace groups (bsc#1269927). - CVE-2026-13311: shell-quote: quadratic complexity in
parse()function when processing specially crafted strings (bsc#1269359). - CVE-2026-13676: fast-uri: host-based policy bypass due to failure to canonicalize Unicode/IDN hostnames for HTTP-family URLs (bsc#1269595).
- CVE-2026-27601: underscore: DoS via stack overflow due to missing depth limits in
_.flattenand_.isEqualfunctions (bsc#1259169). - CVE-2026-40181: react-router: open redirect to an external domain due to path values starting with
//being reinterpreted as protocol-relative URLs (bsc#1272311). - CVE-2026-49356: @babel/core: arbitrary file read via
sourceMappingURLcomment (bsc#1272317). - CVE-2026-53550: js-yaml: quadratic complexity in merge-key processing when processing a crafted YAML document (bsc#1268851).
- CVE-2026-53632: launch-editor: NTLMv2 hash disclosure via UNC path handling on Windows (bsc#1272319).
- CVE-2026-54466: websocket-driver: message corruption via abuse of protocol length headers (bsc#1272312).
- CVE-2026-54490: websocket-driver: resource limit bypass via message compression (bsc#1272313).
- CVE-2026-55602: http-proxy-middleware: Host-header-driven backend routing bypass via
routerhost+path substring matching (bsc#1272318).
- Record
openSUSE-SU-2026:21448-1- Updated
- 2026-11-02
OSVROOT-APP-NPM-CVE-2026-13311 No score
CVE-2026-13311 in shell-quote - Patched by Root
Root has patched CVE-2026-13311 in the shell-quote package for Root:npm. Multiple fixed versions available.
- Record
ROOT-APP-NPM-CVE-2026-13311- Updated
- 2026-11-02
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
shell-quotenpm |
through 1.8.4 | 1.9.0 |
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.2, plus listed versions 1.8.31.8.3-tuxcare.1 |
1.8.3-tuxcare.2 |
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 |
All versions, plus listed versions 1.10.0-11.12.0-11.7.4+~1.7.1-11.7.4+~1.7.1-1+deb12u11.7.4+~1.7.1-21.8.3+~1.7.5-11.8.4+~1.7.5-11.9.0+~1.7.5-1 |
None known |
node-shell-quoteDebian:13 |
before 1.7.4+~1.7.1-1+deb13u2, plus listed versions 1.7.4+~1.7.1-11.7.4+~1.7.1-1+deb13u1 |
1.7.4+~1.7.1-1+deb13u2 |
node-shell-quoteDebian:14 |
before 1.9.0+~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-11.8.4+~1.7.5-1 |
1.9.0+~1.7.5-1 |
shell-quotenpm |
before 1.9.0 | 1.9.0 |
shell-quoteRoot:npm |
before 1.7.2-aikido.2 | 1.7.2-aikido.21.8.0-aikido.21.8.3-aikido.31.7.3-aikido.21.8.2-aikido.2 |
Show 12 moreShow less
| Package | Affected | Fixed |
|---|---|---|
@rootio/shell-quoteRoot:npm |
before 1.7.2-root.io.2 | 1.7.2-root.io.21.8.0-root.io.21.8.3-root.io.31.7.3-root.io.21.8.2-root.io.2 |
node-shell-quoteUbuntu:Pro:18.04:LTS |
All versions, plus listed versions 1.6.1+20160617-git72fb5a8ce29b-11.6.1+20160617-git72fb5a8ce29b-1ubuntu0.1~esm1 |
None known |
node-shell-quoteUbuntu:Pro:22.04:LTS |
All versions, plus listed versions 1.7.3+~1.7.1-11.7.3+~1.7.1-1ubuntu0.1~esm1 |
None known |
node-shell-quoteUbuntu:24.04:LTS |
All versions, plus listed versions 1.7.4+~1.7.1-11.7.4+~1.7.1-1ubuntu0.24.04.1 |
None known |
node-shell-quoteUbuntu:25.10 |
All versions, plus listed versions 1.7.4+~1.7.1-11.7.4+~1.7.1-1ubuntu0.25.10.1 |
None known |
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 |
All versions, plus listed versions 1.7.4+~1.7.1-11.8.3+~1.7.5-11.8.3+~1.7.5-1ubuntu0.1~esm1 |
None known |
heroic-games-launcheropenSUSE:Tumbleweed From an advisory covering 2 CVEs |
before 2.22.0-3.1 | 2.22.0-3.1 |
python-pytest-htmlopenSUSE:Tumbleweed From an advisory covering 2 CVEs |
before 4.2.0-3.1 | 4.2.0-3.1 |
agama-web-uiopenSUSE:Tumbleweed |
before 23+75.1a877fb50-50.1 | 23+75.1a877fb50-50.1 |
python-pytest-htmlopenSUSE:Leap 16.0 From an advisory covering 2 CVEs |
before 4.1.1-bp160.3.1 | 4.1.1-bp160.3.1 |
agama-web-uiopenSUSE:Leap 16.0 From an advisory covering 13 CVEs |
before 17+673.b97ba64d6-160000.12.1 | 17+673.b97ba64d6-160000.12.1 |
History
| Recorded | Changed | Sources |
|---|---|---|
| affected, facts | ||
| first indexed | CVE List, EUVD, GitHub Advisories, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2026-13311 is a high vulnerability (CVSS 8.7) in Ljharb Shell-quote, published June 25, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.36%, the 30th percentile. Fixed in shell-quote 1.9.0.
References
github.com/ljharb/shell-quote/security/advisories/GHSA-395f-4hp3-45gv
npmjs.com/package/shell-quote
nvd.nist.gov/vuln/detail/CVE-2026-13311
github.com/ljharb/shell-quote/commit/7ff5488599d01c323514f02f5efb74088dd134ec
github.com/ljharb/shell-quote/releases/tag/v1.9.0
github.com/advisories/GHSA-395f-4hp3-45gv
Show 36 moreShow less
npmjs.com/package
github.com/CVEProject/cvelistV5/tree/main/cves/2026/13xxx/CVE-2026-13311.json
security-tracker.debian.org/tracker/CVE-2026-13311
github.com/ljharb/shell-quote
ubuntu.com/security/CVE-2026-13311
cve.org/CVERecord?id=CVE-2026-13311
suse.com/security/cve/CVE-2026-13311
suse.com/security/cve/CVE-2026-48779
suse.com/security/cve/CVE-2026-53550
bugzilla.suse.com/1268818
bugzilla.suse.com/1269361
bugzilla.suse.com/1246822
bugzilla.suse.com/1259169
bugzilla.suse.com/1268851
bugzilla.suse.com/1269359
bugzilla.suse.com/1269514
bugzilla.suse.com/1269595
bugzilla.suse.com/1269927
bugzilla.suse.com/1272310
bugzilla.suse.com/1272311
bugzilla.suse.com/1272312
bugzilla.suse.com/1272313
bugzilla.suse.com/1272317
bugzilla.suse.com/1272318
bugzilla.suse.com/1272319
suse.com/security/cve/CVE-2025-7783
suse.com/security/cve/CVE-2026-12143
suse.com/security/cve/CVE-2026-13149
suse.com/security/cve/CVE-2026-13676
suse.com/security/cve/CVE-2026-27601
suse.com/security/cve/CVE-2026-40181
suse.com/security/cve/CVE-2026-49356
suse.com/security/cve/CVE-2026-53632
suse.com/security/cve/CVE-2026-54466
suse.com/security/cve/CVE-2026-54490
suse.com/security/cve/CVE-2026-55602
Left out here: the rest of 2 source descriptions. The JSON record has them.