Description
brace-expansion through 5.0.7 is vulnerable to denial of service via memory exhaustion. The expand() function limits the number of results with a max option (default 100,000) but does not bound the length of each result string. By chaining multiple brace groups, an attacker keeps the result count under the limit while making each result progressively longer, so total memory scales with both count and string length until the process hits a fatal, uncatchable out-of-memory error. About 7.5 KB of input ('{a,b}'.repeat(1500)) crashes a default Node.js process. Any application that passes attacker-influenced strings to brace-expansion.expand() - directly or transitively via minimatch / glob brace patterns - can be crashed by a small request. Fixed in 5.0.8 by adding a maxLength option (default 4,000,000) that bounds accumulated output and intermediate arrays.
Published: 2026-07-23
Score: 7.5 High
EPSS: < 1% Very Low
KEV: No
Impact: n/a
Action: n/a
AI Analysis

Impact

Brace‑expansion through version 5.0.7 is susceptible to a denial‑of‑service attack that exhausts memory. The expand() routine limits how many results it returns (default 100,000) but does not limit the length of each result. An attacker can construct a payload with multiple chained brace groups, keeping the result count under the hard limit while allowing each string to grow arbitrarily large. The total memory used scales with both the number of results and the length of each result, eventually causing the Node.js process to terminate with an unavoidable out‑of‑memory error. Roughly 7.5 KB of crafted input is sufficient to crash a default Node.js process. Any application that passes attacker‑controlled strings to brace‑expansion.expand(), intentionally or indirectly through minimatch or glob patterns, can be taken down with a small request.

Affected Systems

The vulnerability affects the Node.js package "brace‑expansion" maintained by juliangruber, specifically version 5.0.7 and all earlier releases. Any Node.js application that imports this module directly, or imports it indirectly via other modules such as minimatch or glob that use brace expansion, is susceptible. The issue exists in all environments where the vulnerable package is installed, regardless of deployment scale.

Risk and Exploitability

The CVSS score of 7.5 indicates a high severity and the EPSS score of less than 1% suggests that real‑world exploitation is currently unlikely, likely because the attack requires crafted input to reach the vulnerable routine. The vulnerability is not listed in the CISA KEV catalog. Based on the description, it is inferred that the likely attack vector is an attacker‑controlled input string supplied to the expand() function in an application – for example, through an HTTP request parameter, command‑line argument, or configuration file. The payload triggers gradual memory growth until the process crashes; no privilege escalation is required or achieved.

Generated by OpenCVE AI on August 3, 2026 at 21:34 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Upgrade brace‑expansion to version 5.0.8 or later, which introduces a maximum length guard for accumulated output and intermediate arrays.
  • If an upgrade is impossible, configure the optional maxLength setting to a value substantially lower than the default (for instance 1,000,000 characters) to bound memory consumption.
  • Deploy process isolation or resource limits (e.g., ulimit, cgroups) to constrain the maximum memory a Node.js worker can use and quickly recover any crashes triggered by malformed input.

Generated by OpenCVE AI on August 3, 2026 at 21:34 UTC.

Tracking

Sign in to view the affected projects.

Advisories
Source ID Title
Github GHSA Github GHSA GHSA-mh99-v99m-4gvg brace-expansion: DoS via unbounded expansion length causing an out-of-memory process crash
History

Tue, 04 Aug 2026 12:15:00 +0000

Type Values Removed Values Added
References
Metrics threat_severity

None

threat_severity

Important


Thu, 23 Jul 2026 15:30:00 +0000

Type Values Removed Values Added
First Time appeared Juliangruber
Juliangruber brace-expansion
Vendors & Products Juliangruber
Juliangruber brace-expansion
Metrics ssvc

{'options': {'Automatable': 'yes', 'Exploitation': 'none', 'Technical Impact': 'partial'}, 'version': '2.0.3'}


Thu, 23 Jul 2026 13:30:00 +0000

Type Values Removed Values Added
Description brace-expansion through 5.0.7 is vulnerable to denial of service via memory exhaustion. The expand() function limits the number of results with a max option (default 100,000) but does not bound the length of each result string. By chaining multiple brace groups, an attacker keeps the result count under the limit while making each result progressively longer, so total memory scales with both count and string length until the process hits a fatal, uncatchable out-of-memory error. About 7.5 KB of input ('{a,b}'.repeat(1500)) crashes a default Node.js process. Any application that passes attacker-influenced strings to brace-expansion.expand() - directly or transitively via minimatch / glob brace patterns - can be crashed by a small request. Fixed in 5.0.8 by adding a maxLength option (default 4,000,000) that bounds accumulated output and intermediate arrays.
Title brace-expansion DoS via unbounded expansion length causing an out-of-memory process crash
Weaknesses CWE-400
CWE-770
References
Metrics cvssV3_1

{'score': 7.5, 'vector': 'CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H'}


Subscriptions

Juliangruber Brace-expansion
cve-icon MITRE

Status: PUBLISHED

Assigner: seal

Published:

Updated: 2026-07-23T14:44:41.856Z

Reserved: 2026-06-30T15:45:06.757Z

Link: CVE-2026-14257

cve-icon Vulnrichment

Updated: 2026-07-23T14:44:34.645Z

cve-icon NVD

Status : Awaiting Analysis

Published: 2026-07-23T14:17:00.250

Modified: 2026-07-23T15:48:25.133

Link: CVE-2026-14257

cve-icon Redhat

Severity : Important

Publid Date: 2026-07-23T12:54:23Z

Links: CVE-2026-14257 - Bugzilla

cve-icon OpenCVE Enrichment

Updated: 2026-08-03T21:45:03Z

Weaknesses
  • CWE-400

    Uncontrolled Resource Consumption

  • CWE-770

    Allocation of Resources Without Limits or Throttling