CVE-2026-102278 brace-expansion: DoS via uncontrolled recursion on nested brace groups causing stack exhaustion
Attackers can cause Node.js process termination via stack exhaustion by supplying deeply nested brace patterns to the brace-expansion library.
- Exploited in the wild
- Not known
- Login needed
- Not needed
- Attackable
- Over the internet
- Victim action needed
- Not needed
- Fix
- Available
What is CVE-2026-102278?
CVE-2026-102278 is a high-severity denial of service vulnerability in juliangruber brace-expansion, published on 28 Sep 2026. An attacker can exploit it over the internet without logging in, with no action from the victim.
Official description
The brace-expansion library generates arbitrary strings containing a common prefix and suffix. Prior to 1.1.20, 2.1.6, 3.0.8, and 5.0.11, deeply nested brace groups cause expand_() to recurse once per nesting level at comma-member and single-set expansion sites, exhausting the native stack before output limits can apply and potentially terminating the Node.js process. expand_ performs uncontrolled recursion for nested brace alternatives and single-part sets. deeply nested brace groups supplied as an untrusted pattern. expand_ is affected. expand is affected. Comma members is affected. Single set is affected. native stack exhaustion during nested sub-expansion. process-terminating denial of service. This issue is fixed in versions 1.1.20, 2.1.6, 3.0.8, and 5.0.11.
Which versions are affected by CVE-2026-102278?
8 open source packages ship an affected version, including brace-expansion.
| Package | Affected | Fixed in |
|---|---|---|
brace-expansion npm | All versions | 1.1.20 |
brace-expansion npm | All versions | 1.1.20 |
brace-expansion npm | From 2.0.0 | 2.1.6 |
brace-expansion npm | From 2.0.0 | 2.1.6 |
brace-expansion npm | From 3.0.0 | 3.0.8 |
brace-expansion npm | From 3.0.0 | 3.0.8 |
2 more packages
brace-expansion npm | From 4.0.0 | 5.0.11 |
brace-expansion npm | From 4.0.0 | 5.0.11 |
Linux distribution packages (27)
nodejs22 Red Hat:hummingbird:1 | All versions | 0:22.23.3-2.3.2.1.hum1 |
nodejs22-bin Red Hat:hummingbird:1 | All versions | 0:22.23.3-2.3.2.1.hum1 |
nodejs22-devel Red Hat:hummingbird:1 | All versions | 0:22.23.3-2.3.2.1.hum1 |
nodejs22-docs Red Hat:hummingbird:1 | All versions | 0:22.23.3-2.3.2.1.hum1 |
nodejs22-full-i18n Red Hat:hummingbird:1 | All versions | 0:22.23.3-2.3.2.1.hum1 |
nodejs22-libs Red Hat:hummingbird:1 | All versions | 0:22.23.3-2.3.2.1.hum1 |
nodejs22-npm Red Hat:hummingbird:1 | All versions | 0:10.9.9-1.22.23.3.2.3.2.1.hum1 |
nodejs22-npm-bin Red Hat:hummingbird:1 | All versions | 0:22.23.3-2.3.2.1.hum1 |
nodejs24 Red Hat:hummingbird:1 | All versions | 0:24.21.0-1.1.hum1 |
nodejs24-bin Red Hat:hummingbird:1 | All versions | 0:24.21.0-1.1.hum1 |
nodejs24-devel Red Hat:hummingbird:1 | All versions | 0:24.21.0-1.1.hum1 |
nodejs24-docs Red Hat:hummingbird:1 | All versions | 0:24.21.0-1.1.hum1 |
nodejs24-full-i18n Red Hat:hummingbird:1 | All versions | 0:24.21.0-1.1.hum1 |
nodejs24-libs Red Hat:hummingbird:1 | All versions | 0:24.21.0-1.1.hum1 |
nodejs24-npm Red Hat:hummingbird:1 | All versions | 0:11.19.0-1.24.21.0.1.1.hum1 |
nodejs24-npm-bin Red Hat:hummingbird:1 | All versions | 0:11.19.0-1.24.21.0.1.1.hum1 |
nodejs26 Red Hat:hummingbird:1 | All versions | 0:26.10.0-0.2.hum1 |
nodejs26-bin Red Hat:hummingbird:1 | All versions | 0:26.10.0-0.2.hum1 |
nodejs26-devel Red Hat:hummingbird:1 | All versions | 0:26.10.0-0.2.hum1 |
nodejs26-docs Red Hat:hummingbird:1 | All versions | 0:26.10.0-0.2.hum1 |
nodejs26-full-i18n Red Hat:hummingbird:1 | All versions | 0:26.10.0-0.2.hum1 |
nodejs26-libs Red Hat:hummingbird:1 | All versions | 0:26.10.0-0.2.hum1 |
nodejs26-npm Red Hat:hummingbird:1 | All versions | 0:11.19.1-1.26.10.0.0.2.hum1 |
nodejs26-npm-bin Red Hat:hummingbird:1 | All versions | 0:26.10.0-0.2.hum1 |
v8-12.4-devel Red Hat:hummingbird:1 | All versions | 0:12.4.254.21-1.22.23.3.2.3.2.1.hum1 |
v8-13.6-devel Red Hat:hummingbird:1 | All versions | 0:13.6.233.17-1.24.21.0.1.1.hum1 |
v8-14.6-devel Red Hat:hummingbird:1 | All versions | 0:14.6.202.34-1.26.10.0.0.2.hum1 |
How do I fix CVE-2026-102278?
Upgrade brace-expansion to a fixed version for your release line: 1.1.20, 2.1.6, 3.0.8 or 5.0.11.
Upgrade, then put limits on request size, rate and nesting depth so one client cannot exhaust the service. More about Denial of service.
Is CVE-2026-102278 being exploited?
There is no known exploitation of CVE-2026-102278 in the wild and no public exploit code.
Sources
Also known as AZL-105078, AZL-105092, AZL-105242, CLEANSTART-2026-DA12179, CLEANSTART-2026-DZ00497, CLEANSTART-2026-JT17760 and 58 more.