CVE-2026-13311 PUBLISHED

shell-quote parse() is quadratic in token count, enabling denial of service

Assigner: harborist
Reserved: 25.06.2026 Published: 25.06.2026 Updated: 25.06.2026

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.

Metrics

CVSS Vector: 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 Score: 8.7

Product Status

Vendor ljharb
Product shell-quote
Versions Default: unaffected
  • affected from 0 to 1.8.4 (incl.)

Credits

  • bibu123456 finder
  • Kayiz-PT coordinator
  • ljharb remediation developer

References

Problem Types

  • CWE-407 Inefficient Algorithmic Complexity CWE

Impacts

  • CAPEC-130 Excessive Allocation - a small crafted input forces parse() into quadratic-time work, exhausting CPU and blocking the single-threaded Node.js event loop, resulting in denial of service (availability only).