CVE-2026-102277

brace-expansion: Quadratic-time expansion of the `{a},b}` rewrite causes CPU denial of service

Published Sep 28, 2026 CVSS 3.1 · 5.3 Medium EPSS < 1% KEV · Not listed
Description
The brace-expansion library generates arbitrary strings containing a common prefix and suffix. Prior to 1.1.21, 2.1.7, 3.0.9, and 5.0.12, the expand function handles untrusted {a},b}-shaped patterns with many trailing closing braces by restarting its scan once for each trailing closing brace. The successive full-input rescans with linear working-string growth cause quadratic CPU time and memory pressure that can block the Node.js event loop. The process eventually recovers, making the impact a recoverable CPU denial of service. This issue is fixed in versions 1.1.21, 2.1.7, 3.0.9, and 5.0.12.

Analysis

AI-generated

Technical impact

The brace-expansion library can generate strings with a common prefix and suffix. Prior to version 1.1.21, 2.1.7, 3.0.9 and 5.0.12, the expand function recreates its scan for each trailing closing brace seen in an untrusted pattern such as {a},b}. This quadratic re‑scan and linear growth of the working string forces the Node.js event loop to perform extensive CPU work and consume memory until it recovers, resulting in a recoverable CPU‑denial of service.

Affected Systems

This issue affects the Julia Gruber brace-expansion package, which is widely used in many JavaScript projects via npm. Versions older than 1.1.21, 2.1.7, 3.0.9 and 5.0.12 are vulnerable; those exact release numbers are fixed by the corresponding patch commits.

Risk and Exploitability

The vulnerability carries a CVSS score of 5.3 and an EPSS score indicating a <1% exploitation probability. It is not listed in CISA’s KEV catalog. The primary attack vector is an untrusted user‑supplied brace pattern fed to the expand function, which can be exploited by any code path that processes arbitrary input, such as a web application using the library. Once triggered, the denial of service can recover but may cause high CPU usage and memory pressure.

Remediation

No solution or workaround provided in the CVE record.

OpenCVE Recommended Actions

  • Update brace-expansion to version 1.1.21 or newer (or 2.1.7, 3.0.9, or 5.0.12) to apply the vendor fix.
  • Prior to upgrading, limit or sanitize any user‑supplied brace patterns by rejecting patterns with excessive closing braces or by capping the total length of all brace expressions.
  • Add monitoring for event‑loop latency and memory usage in the application and enforce rate limiting or fallback logic when thresholds are exceeded.

Generated by OpenCVE AI on September 29, 2026 at 18:03 UTC.

Tracking

Sign in to view the affected projects.

Advisories

Source ID Title
Github GHSA Github GHSA GHSA-q2hr-2g5m-vwhr brace-expansion: Quadratic-time expansion of the `{a},b}` rewrite causes CPU denial of service
History
Type Values Removed Values Added
Metrics ssvc

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

Type Values Removed Values Added
First Time appeared Juliangruber
Juliangruber brace-expansion
Vendors & Products Juliangruber
Juliangruber brace-expansion
Type Values Removed Values Added
Description The brace-expansion library generates arbitrary strings containing a common prefix and suffix. Prior to 1.1.21, 2.1.7, 3.0.9, and 5.0.12, the expand function handles untrusted {a},b}-shaped patterns with many trailing closing braces by restarting its scan once for each trailing closing brace. The successive full-input rescans with linear working-string growth cause quadratic CPU time and memory pressure that can block the Node.js event loop. The process eventually recovers, making the impact a recoverable CPU denial of service. This issue is fixed in versions 1.1.21, 2.1.7, 3.0.9, and 5.0.12.
Title brace-expansion: Quadratic-time expansion of the `{a},b}` rewrite causes CPU denial of service
Weaknesses CWE-400
CWE-407
References
Metrics cvssV3_1

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

Weaknesses
  • CWE-400

    Uncontrolled Resource Consumption

  • CWE-407

    Inefficient Algorithmic Complexity

  • CWE-606

    Unchecked Input for Loop Condition

Sources

Status
PUBLISHED
Assigner
GitHub_M
Published
Updated
Sep 29, 2026, 7:38 PM
Reserved
Sep 28, 2026, 8:11 PM
Status
Deferred
Published
Sep 28, 2026, 9:17 PM
Modified
Sep 30, 2026, 7:57 PM
Severity
Moderate
Public date
Sep 28, 2026, 8:54 PM