← Back to CVE Explorer

CVE-2026-13311

Full vulnerability record from the local CVENow database.

Description

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.

Severity
HIGH
CVSS score
8.7 (v4.0)
Vulnerability status
Analyzed
Source identifier
7ffcee3d-2c14-4c3e-b844-86c6a321a158
Published
2026-06-25 05:16:52.763000
Last modified
2026-10-25 23:10:00.167000
View original CVE JSON
{
  "id": "CVE-2026-13311",
  "sourceIdentifier": "7ffcee3d-2c14-4c3e-b844-86c6a321a158",
  "published": "2026-06-25T05:16:52.763",
  "lastModified": "2026-10-25T23:10:00.167",
  "vulnStatus": "Analyzed",
  "cveTags": [],
  "descriptions": [
    {
      "lang": "en",
      "value": "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."
    },
    {
      "lang": "es",
      "value": "shell-quote anterior a la versión 1.8.5 finaliza los tokens analizados en parse() utilizando Array.prototype.concat como acumulador de reducción, lo que reasigna y copia todo el array creciente en cada iteración. Como resultado, parse() se ejecuta en tiempo O(n^2) en relación con el número de tokens de entrada. Un atacante que puede proporcionar una cadena controlada por el atacante a cualquier ruta de código que llame a parse() (no se requieren metacaracteres de shell; bastan palabras separadas por espacios en blanco) puede bloquear el bucle de eventos de un solo hilo de Node.js durante un período prolongado con una entrada pequeña, lo que resulta en una denegación de servicio. No hay ejecución de código ni divulgación de datos; el impacto es solo en la disponibilidad. Corregido en la versión 1.8.5."
    }
  ],
  "affected": [
    {
      "source": "7ffcee3d-2c14-4c3e-b844-86c6a321a158",
      "affectedData": [
        {
          "vendor": "ljharb",
          "product": "shell-quote",
          "defaultStatus": "unaffected",
          "collectionURL": "https://www.npmjs.com/package",
          "packageName": "shell-quote",
          "versions": [
            {
              "version": "0",
              "lessThanOrEqual": "1.8.4",
              "versionType": "semver",
              "status": "affected"
            }
          ]
        }
      ]
    }
  ],
  "metrics": {
    "cvssMetricV40": [
      {
        "source": "7ffcee3d-2c14-4c3e-b844-86c6a321a158",
        "type": "Secondary",
        "cvssData": {
          "version": "4.0",
          "vectorString": "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",
          "baseScore": 8.7,
          "baseSeverity": "HIGH",
          "attackVector": "NETWORK",
          "attackComplexity": "LOW",
          "attackRequirements": "NONE",
          "privilegesRequired": "NONE",
          "userInteraction": "NONE",
          "vulnConfidentialityImpact": "NONE",
          "vulnIntegrityImpact": "NONE",
          "vulnAvailabilityImpact": "HIGH",
          "subConfidentialityImpact": "NONE",
          "subIntegrityImpact": "NONE",
          "subAvailabilityImpact": "NONE",
          "exploitMaturity": "NOT_DEFINED",
          "confidentialityRequirement": "NOT_DEFINED",
          "integrityRequirement": "NOT_DEFINED",
          "availabilityRequirement": "NOT_DEFINED",
          "modifiedAttackVector": "NOT_DEFINED",
          "modifiedAttackComplexity": "NOT_DEFINED",
          "modifiedAttackRequirements": "NOT_DEFINED",
          "modifiedPrivilegesRequired": "NOT_DEFINED",
          "modifiedUserInteraction": "NOT_DEFINED",
          "modifiedVulnConfidentialityImpact": "NOT_DEFINED",
          "modifiedVulnIntegrityImpact": "NOT_DEFINED",
          "modifiedVulnAvailabilityImpact": "NOT_DEFINED",
          "modifiedSubConfidentialityImpact": "NOT_DEFINED",
          "modifiedSubIntegrityImpact": "NOT_DEFINED",
          "modifiedSubAvailabilityImpact": "NOT_DEFINED",
          "Safety": "NOT_DEFINED",
          "Automatable": "NOT_DEFINED",
          "Recovery": "NOT_DEFINED",
          "valueDensity": "NOT_DEFINED",
          "vulnerabilityResponseEffort": "NOT_DEFINED",
          "providerUrgency": "NOT_DEFINED"
        }
      }
    ],
    "cvssMetricV31": [
      {
        "source": "7ffcee3d-2c14-4c3e-b844-86c6a321a158",
        "type": "Secondary",
        "cvssData": {
          "version": "3.1",
          "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H",
          "baseScore": 7.5,
          "baseSeverity": "HIGH",
          "attackVector": "NETWORK",
          "attackComplexity": "LOW",
          "privilegesRequired": "NONE",
          "userInteraction": "NONE",
          "scope": "UNCHANGED",
          "confidentialityImpact": "NONE",
          "integrityImpact": "NONE",
          "availabilityImpact": "HIGH"
        },
        "exploitabilityScore": 3.9,
        "impactScore": 3.6
      }
    ],
    "ssvcV203": [
      {
        "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
        "ssvcData": {
          "timestamp": "2026-06-25T12:49:33.455269Z",
          "id": "CVE-2026-13311",
          "options": [
            {
              "exploitation": "poc"
            },
            {
              "automatable": "yes"
            },
            {
              "technicalImpact": "partial"
            }
          ],
          "role": "CISA Coordinator",
          "version": "2.0.3"
        }
      }
    ]
  },
  "weaknesses": [
    {
      "source": "7ffcee3d-2c14-4c3e-b844-86c6a321a158",
      "type": "Secondary",
      "description": [
        {
          "lang": "en",
          "value": "CWE-407"
        }
      ]
    }
  ],
  "configurations": [
    {
      "nodes": [
        {
          "operator": "OR",
          "negate": false,
          "cpeMatch": [
            {
              "vulnerable": true,
              "criteria": "cpe:2.3:a:shell-quote_project:shell-quote:*:*:*:*:*:node.js:*:*",
              "versionEndExcluding": "1.9.0",
              "matchCriteriaId": "857C16CB-E752-4E3D-A096-79E73102BEB8"
            }
          ]
        }
      ]
    }
  ],
  "references": [
    {
      "url": "https://github.com/ljharb/shell-quote/security/advisories/GHSA-395f-4hp3-45gv",
      "source": "7ffcee3d-2c14-4c3e-b844-86c6a321a158",
      "tags": [
        "Vendor Advisory"
      ]
    },
    {
      "url": "https://www.npmjs.com/package/shell-quote",
      "source": "7ffcee3d-2c14-4c3e-b844-86c6a321a158",
      "tags": [
        "Product"
      ]
    },
    {
      "url": "https://github.com/ljharb/shell-quote/security/advisories/GHSA-395f-4hp3-45gv",
      "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
      "tags": [
        "Vendor Advisory"
      ]
    }
  ]
}