CVE-2026-33750
brace-expansion: Zero-step sequence causes process hang and memory exhaustion
The brace-expansion library generates arbitrary strings containing a common prefix and suffix. Prior to versions 5.0.5, 3.0.2, 2.0.3, and 1.1.13, a brace pattern with a zero step value (e.g., {1..2..0}) causes the sequence generation loop to run indefinitely, making the process hang for seconds and allocate heaps of memory. Versions 5.0.5, 3.0.2, 2.0.3, and 1.1.13 fix the issue. As a workaround, sanitize strings passed to expand() to ensure a step value of 0 is not used.
Attack profile
How easy it is to exploit
- Attack vector
- Network
- Complexity
- Low
- Privileges needed
- None
- User interaction
- Required
What an attacker can affect
- Confidentiality
- None
- Integrity
- None
- Availability
- High
Exploit likelihood
What each source reports
CVE List Score used
6.5
brace-expansion: Zero-step sequence causes process hang and memory exhaustion
The brace-expansion library generates arbitrary strings containing a common prefix and suffix. Prior to versions 5.0.5, 3.0.2, 2.0.3, and 1.1.13, a brace pattern with a zero step value (e.g., {1..2..0}) causes the sequence generation loop to run indefinitely, making the process hang for seconds and allocate heaps of memory. Versions 5.0.5, 3.0.2, 2.0.3, and 1.1.13 fix the issue. As a workaround, sanitize strings passed to expand() to ensure a step value of 0 is not used.
- Record
CVE-2026-33750- CVSS 3.1
- 6.5 Medium
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H - Weakness
- CWE-400
- Updated
- 2026-11-02
EUVDEUVD-2026-16620
6.5
The brace-expansion library generates arbitrary strings containing a common prefix and suffix. Prior to versions 5.0.5, 3.0.2, 2.0.3, and 1.1.13, a brace pattern with a zero step value (e.g., {1..2..0}) causes the sequence generation loop to run indefinitely, making the process hang for seconds and allocate heaps of memory. Versions 5.0.5, 3.0.2, 2.0.3, and 1.1.13 fix the issue. As a workaround, sanitize strings passed to expand() to ensure a step value of 0 is not used.
- Record
EUVD-2026-16620- CVSS 3.1
- 6.5 Medium
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-f886-m6hf-6m8v
6.5
brace-expansion: Zero-step sequence causes process hang and memory exhaustion
Impact
A brace pattern with a zero step value (e.g., {1..2..0}) causes the sequence generation loop to run indefinitely, making the process hang for seconds and allocate heaps of memory.
The loop in question:
test() is one of
The increment is computed as Math.abs(0) = 0, so the loop variable never advances. On a test machine, the process hangs for about 3.5 seconds and allocates roughly 1.9 GB of memory before throwing a RangeError. Setting max to any value has no effect because the limit is only checked at the output combination step, not during sequence generation.
This affects any application that passes untrusted strings to expand(), or by error sets a step value of 0. That includes tools built on minimatch/glob that resolve patterns from CLI arguments or config files. The input needed is just 10 bytes.
Patches
Upgrade to versions
- 5.0.5+
A step increment of 0 is now sanitized to 1, which matches bash behavior.
Workarounds
Sanitize strings passed to expand() to ensure a step value of 0 is not used.
- Record
GHSA-f886-m6hf-6m8v- CVSS 3.1
- 6.5 Medium
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H - Weakness
- CWE-400
- Updated
- 2026-11-02
NVD
6.5
The brace-expansion library generates arbitrary strings containing a common prefix and suffix. Prior to versions 5.0.5, 3.0.2, 2.0.3, and 1.1.13, a brace pattern with a zero step value (e.g., {1..2..0}) causes the sequence generation loop to run indefinitely, making the process hang for seconds and allocate heaps of memory. Versions 5.0.5, 3.0.2, 2.0.3, and 1.1.13 fix the issue. As a workaround, sanitize strings passed to expand() to ensure a step value of 0 is not used.
- Record
CVE-2026-33750- CVSS 3.1
- 6.5 Medium
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H - CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Weakness
- CWE-400
- Updated
- 2026-11-02
OSV
6.5
brace-expansion: Zero-step sequence causes process hang and memory exhaustion
The brace-expansion library generates arbitrary strings containing a common prefix and suffix. Prior to versions 5.0.5, 3.0.2, 2.0.3, and 1.1.13, a brace pattern with a zero step value (e.g., {1..2..0}) causes the sequence generation loop to run indefinitely, making the process hang for seconds and allocate heaps of memory. Versions 5.0.5, 3.0.2, 2.0.3, and 1.1.13 fix the issue. As a workaround, sanitize strings passed to expand() to ensure a step value of 0 is not used.
- Record
CVE-2026-33750- CVSS 3.1
- 6.5 Medium
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H - Weakness
- CWE-400
- Updated
- 2026-11-02
OSVDEBIAN-CVE-2026-33750
7.5
The brace-expansion library generates arbitrary strings containing a common prefix and suffix. Prior to versions 5.0.5, 3.0.2, 2.0.3, and 1.1.13, a brace pattern with a zero step value (e.g., {1..2..0}) causes the sequence generation loop to run indefinitely, making the process hang for seconds and allocate heaps of memory. Versions 5.0.5, 3.0.2, 2.0.3, and 1.1.13 fix the issue. As a workaround, sanitize strings passed to expand() to ensure a step value of 0 is not used.
- Record
DEBIAN-CVE-2026-33750- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Updated
- 2026-11-02
Show 15 moreShow less
OSVGHSA-f886-m6hf-6m8v
6.5
brace-expansion: Zero-step sequence causes process hang and memory exhaustion
Impact
A brace pattern with a zero step value (e.g., {1..2..0}) causes the sequence generation loop to run indefinitely, making the process hang for seconds and allocate heaps of memory.
The loop in question:
test() is one of
The increment is computed as Math.abs(0) = 0, so the loop variable never advances. On a test machine, the process hangs for about 3.5 seconds and allocates roughly 1.9 GB of memory before throwing a RangeError. Setting max to any value has no effect because the limit is only checked at the output combination step, not during sequence generation.
This affects any application that passes untrusted strings to expand(), or by error sets a step value of 0. That includes tools built on minimatch/glob that resolve patterns from CLI arguments or config files. The input needed is just 10 bytes.
Patches
Upgrade to versions
- 5.0.5+
A step increment of 0 is now sanitized to 1, which matches bash behavior.
Workarounds
Sanitize strings passed to expand() to ensure a step value of 0 is not used.
- Record
GHSA-f886-m6hf-6m8v- CVSS 3.1
- 6.5 Medium
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H - Weakness
- CWE-400
- Updated
- 2026-11-02
OSVOESA-2026-1835
6.5
nodejs-brace-expansion security update
Brace expansion as known from sh/bash
Security Fix(es):
The brace-expansion library generates arbitrary strings containing a common prefix and suffix. Prior to versions 5.0.5, 3.0.2, 2.0.3, and 1.1.13, a brace pattern with a zero step value (e.g., {1..2..0}) causes the sequence generation loop to run indefinitely, making the process hang for seconds and allocate heaps of memory. Versions 5.0.5, 3.0.2, 2.0.3, and 1.1.13 fix the issue. As a workaround, sanitize strings passed to expand() to ensure a step value of 0 is not used.(CVE-2026-33750)
- Record
OESA-2026-1835- CVSS 3.1
- 6.5 Medium
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H - Updated
- 2026-11-02
OSVROOT-APP-NPM-CVE-2026-33750
6.5
CVE-2026-33750 in brace-expansion - Patched by Root
Root has patched CVE-2026-33750 in the brace-expansion package for Root:npm. Multiple fixed versions available.
- Record
ROOT-APP-NPM-CVE-2026-33750- CVSS 3.1
- 6.5 Medium
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H - Updated
- 2026-11-02
OSVUBUNTU-CVE-2026-33750
6.5
The brace-expansion library generates arbitrary strings containing a common prefix and suffix. Prior to versions 5.0.5, 3.0.2, 2.0.3, and 1.1.13, a brace pattern with a zero step value (e.g., {1..2..0}) causes the sequence generation loop to run indefinitely, making the process hang for seconds and allocate heaps of memory. Versions 5.0.5, 3.0.2, 2.0.3, and 1.1.13 fix the issue. As a workaround, sanitize strings passed to expand() to ensure a step value of 0 is not used.
- Record
UBUNTU-CVE-2026-33750- CVSS 3.1
- 6.5 Medium
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H - CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Updated
- 2026-11-02
OSVAZL-81075 No score
CVE-2026-33750 affecting package js-jquery 3.5.0-4
The brace-expansion library generates arbitrary strings containing a common prefix and suffix. Prior to versions 5.0.5, 3.0.2, 2.0.3, and 1.1.13, a brace pattern with a zero step value (e.g., {1..2..0}) causes the sequence generation loop to run indefinitely, making the process hang for seconds and allocate heaps of memory. Versions 5.0.5, 3.0.2, 2.0.3, and 1.1.13 fix the issue. As a workaround, sanitize strings passed to expand() to ensure a step value of 0 is not used.
- Record
AZL-81075- Updated
- 2026-11-05
OSVAZL-81084 No score
CVE-2026-33750 affecting package nodejs-nodemon 2.0.3-5
The brace-expansion library generates arbitrary strings containing a common prefix and suffix. Prior to versions 5.0.5, 3.0.2, 2.0.3, and 1.1.13, a brace pattern with a zero step value (e.g., {1..2..0}) causes the sequence generation loop to run indefinitely, making the process hang for seconds and allocate heaps of memory. Versions 5.0.5, 3.0.2, 2.0.3, and 1.1.13 fix the issue. As a workaround, sanitize strings passed to expand() to ensure a step value of 0 is not used.
- Record
AZL-81084- Updated
- 2026-11-05
OSVCLSA-2026-1777250307 No score
TuxCare security update for brace-expansion (1 CVE)
TuxCare rebuilt brace-expansion to address 1 CVE. Fixed in 1.1.12-tuxcare.2.
- Record
CLSA-2026-1777250307- Updated
- 2026-11-02
OSVCLSA-2026-1781830545 No score
TuxCare security update for brace-expansion (3 CVEs)
TuxCare rebuilt brace-expansion to address 3 CVEs. Fixed in 2.0.1-tuxcare.1.
- Record
CLSA-2026-1781830545- Updated
- 2026-11-02
OSVCLSA-2026-1781830551 No score
TuxCare security update for brace-expansion (4 CVEs)
TuxCare rebuilt brace-expansion to address 4 CVEs. Fixed in 1.1.11-tuxcare.1.
- Record
CLSA-2026-1781830551- Updated
- 2026-11-02
OSVCLSA-2026-1792233308 No score
TuxCare security update for brace-expansion (4 CVEs)
TuxCare rebuilt brace-expansion to address 4 CVEs. Fixed in 4.0.1-tuxcare.3.
- Record
CLSA-2026-1792233308- Updated
- 2026-11-02
OSVCLSA-2026-1792233325 No score
TuxCare security update for brace-expansion (1 CVE)
TuxCare rebuilt brace-expansion to address 1 CVE. Fixed in 5.0.4-tuxcare.4.
- Record
CLSA-2026-1792233325- Updated
- 2026-11-02
OSVCLSA-2026-1792243228 No score
TuxCare security update for brace-expansion (4 CVEs)
TuxCare rebuilt brace-expansion to address 4 CVEs. Fixed in 2.0.2-tuxcare.4.
- Record
CLSA-2026-1792243228- Updated
- 2026-11-02
OSVCLSA-2026-1792508599 No score
TuxCare security update for brace-expansion (1 CVE)
TuxCare rebuilt brace-expansion to address 1 CVE. Fixed in 5.0.3-tuxcare.2.
- Record
CLSA-2026-1792508599- Updated
- 2026-11-02
OSVCLSA-2026-1793102029 No score
TuxCare security update for brace-expansion (5 CVEs)
TuxCare rebuilt brace-expansion to address 5 CVEs. Fixed in 1.1.3-tuxcare.2.
- Record
CLSA-2026-1793102029- Updated
- 2026-11-02
OSVCLSA-2026-1793808088 No score
TuxCare security update for brace-expansion (1 CVE)
TuxCare rebuilt brace-expansion to address 1 CVE. Fixed in 5.0.2-tuxcare.2.
- Record
CLSA-2026-1793808088- Updated
- 2026-11-04
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
brace-expansionnpm |
4.0.0 up to 5.0.5 | 5.0.5 |
brace-expansionnpm |
3.0.0 up to 3.0.2 | 3.0.2 |
brace-expansionnpm |
2.0.0 up to 2.0.3 | 2.0.3 |
brace-expansionnpm |
before 1.1.13 | 1.1.13 |
js-jqueryAzure Linux:3 |
through 3.5.0-4 | None known |
nodejs-nodemonAzure Linux:3 |
through 2.0.3-5 | None known |
brace-expansionTuxCare:npm |
1.1.12-tuxcare.0 up to 1.1.12-tuxcare.2, plus listed versions 1.1.121.1.12-tuxcare.1 |
1.1.12-tuxcare.2 |
brace-expansionTuxCare:npm From an advisory covering 3 CVEs |
2.0.1-tuxcare.0 up to 2.0.1-tuxcare.1, plus listed versions 2.0.1 |
2.0.1-tuxcare.1 |
brace-expansionTuxCare:npm From an advisory covering 4 CVEs |
1.1.11-tuxcare.0 up to 1.1.11-tuxcare.1, plus listed versions 1.1.11 |
1.1.11-tuxcare.1 |
brace-expansionTuxCare:npm From an advisory covering 4 CVEs |
4.0.1-tuxcare.0 up to 4.0.1-tuxcare.3, plus listed versions 4.0.14.0.1-tuxcare.14.0.1-tuxcare.2 |
4.0.1-tuxcare.3 |
Show 23 moreShow less
| Package | Affected | Fixed |
|---|---|---|
brace-expansionTuxCare:npm |
5.0.4-tuxcare.0 up to 5.0.4-tuxcare.4, plus listed versions 5.0.45.0.4-tuxcare.15.0.4-tuxcare.25.0.4-tuxcare.3 |
5.0.4-tuxcare.4 |
brace-expansionTuxCare:npm From an advisory covering 4 CVEs |
2.0.2-tuxcare.0 up to 2.0.2-tuxcare.4, plus listed versions 2.0.22.0.2-tuxcare.12.0.2-tuxcare.22.0.2-tuxcare.3 |
2.0.2-tuxcare.4 |
brace-expansionTuxCare:npm |
5.0.3-tuxcare.0 up to 5.0.3-tuxcare.2, plus listed versions 5.0.35.0.3-tuxcare.1 |
5.0.3-tuxcare.2 |
brace-expansionTuxCare:npm From an advisory covering 5 CVEs |
1.1.3-tuxcare.0 up to 1.1.3-tuxcare.2, plus listed versions 1.1.31.1.3-tuxcare.1 |
1.1.3-tuxcare.2 |
brace-expansionTuxCare:npm |
5.0.2-tuxcare.0 up to 5.0.2-tuxcare.2, plus listed versions 5.0.25.0.2-tuxcare.1 |
5.0.2-tuxcare.2 |
node-brace-expansionDebian:12 |
All versions, plus listed versions 2.0.1+~1.1.0-12.0.1+~1.1.0-22.0.1-22.0.3+~1.1.2-12.0.3+~1.1.2-22.0.3+~1.1.2-32.1.4+~1.1.2-12.1.7+~1.1.2-1 |
None known |
node-brace-expansionDebian:13 |
All versions, plus listed versions 2.0.1+~1.1.0-22.0.3+~1.1.2-12.0.3+~1.1.2-22.0.3+~1.1.2-32.1.4+~1.1.2-12.1.7+~1.1.2-1 |
None known |
node-brace-expansionDebian:14 |
before 2.0.3+~1.1.2-1, plus listed versions 2.0.1+~1.1.0-2 |
2.0.3+~1.1.2-1 |
nodejs-brace-expansionopenEuler:20.03-LTS-SP4 |
before 1.1.11-3.oe2003sp4 | 1.1.11-3.oe2003sp4 |
nodejs-brace-expansionopenEuler:22.03-LTS-SP4 |
before 1.1.11-3.oe2203sp4 | 1.1.11-3.oe2203sp4 |
nodejs-brace-expansionopenEuler:24.03-LTS |
before 1.1.11-5.oe2403sp3 | 1.1.11-5.oe2403sp3 |
nodejs-brace-expansionopenEuler:24.03-LTS-SP1 |
before 1.1.11-5.oe2403sp1 | 1.1.11-5.oe2403sp1 |
nodejs-brace-expansionopenEuler:24.03-LTS-SP2 |
before 1.1.11-5.oe2403sp2 | 1.1.11-5.oe2403sp2 |
nodejs-brace-expansionopenEuler:24.03-LTS-SP3 |
before 1.1.11-5.oe2403sp3 | 1.1.11-5.oe2403sp3 |
brace-expansionRoot:npm |
before 2.0.1-aikido.3 | 2.0.1-aikido.31.1.12-aikido.21.1.11-aikido.32.0.2-aikido.25.0.3-aikido.15.0.3-aikido.22.0.1-aikido.42.0.2-aikido.31.1.12-aikido.31.1.11-aikido.41.1.11-aikido.51.1.12-aikido.41.1.11-aikido.62.0.1-aikido.52.0.2-aikido.45.0.4-aikido.25.0.4-aikido.35.0.4-aikido.45.0.4-aikido.55.0.3-aikido.35.0.3-aikido.45.0.3-aikido.52.0.1-aikido.61.1.12-aikido.51.1.12-aikido.62.0.1-aikido.71.1.11-aikido.72.0.2-aikido.52.0.2-aikido.65.0.3-aikido.65.0.5-aikido.12.0.3-aikido.11.1.13-aikido.15.0.5-aikido.25.0.5-aikido.32.0.3-aikido.21.1.13-aikido.22.0.3-aikido.35.0.5-aikido.41.1.13-aikido.31.1.13-aikido.41.1.13-aikido.55.0.5-aikido.5 |
@rootio/brace-expansionRoot:npm |
before 1.1.11-root.io.1 | 1.1.11-root.io.12.0.1-root.io.12.0.2-root.io.11.1.12-root.io.12.0.1-root.io.21.1.11-root.io.22.0.1-root.io.31.1.12-root.io.21.1.11-root.io.32.0.2-root.io.25.0.3-root.io.15.0.3-root.io.22.0.1-root.io.42.0.2-root.io.31.1.12-root.io.31.1.11-root.io.41.1.11-root.io.51.1.12-root.io.41.1.11-root.io.62.0.1-root.io.52.0.2-root.io.45.0.4-root.io.25.0.4-root.io.35.0.4-root.io.45.0.4-root.io.55.0.3-root.io.35.0.3-root.io.45.0.3-root.io.52.0.1-root.io.61.1.12-root.io.51.1.12-root.io.62.0.1-root.io.71.1.11-root.io.72.0.2-root.io.52.0.2-root.io.65.0.3-root.io.65.0.5-root.io.12.0.3-root.io.11.1.13-root.io.15.0.5-root.io.25.0.5-root.io.32.0.3-root.io.21.1.13-root.io.22.0.3-root.io.35.0.5-root.io.41.1.13-root.io.31.1.13-root.io.41.1.13-root.io.55.0.5-root.io.5 |
node-brace-expansionUbuntu:18.04:LTS |
All versions, plus listed versions 1.1.8-1 |
None known |
node-brace-expansionUbuntu:20.04:LTS |
All versions, plus listed versions 1.1.8-11.1.11-1 |
None known |
node-brace-expansionUbuntu:22.04:LTS |
All versions, plus listed versions 2.0.0-12.0.1-1 |
None known |
node-brace-expansionUbuntu:24.04:LTS |
All versions, plus listed versions 2.0.1-22.0.1+~1.1.0-1 |
None known |
node-brace-expansionUbuntu:25.10 |
All versions, plus listed versions 2.0.1+~1.1.0-12.0.1+~1.1.0-2 |
None known |
node-brace-expansionUbuntu:26.10 |
All versions, plus listed versions 2.0.1+~1.1.0-22.0.3+~1.1.2-22.0.3+~1.1.2-32.1.4+~1.1.2-1 |
None known |
node-brace-expansionUbuntu:26.04:LTS |
All versions, plus listed versions 2.0.1+~1.1.0-2 |
None known |
History
| Recorded | Changed | Sources |
|---|---|---|
| affected | OSV | |
| affected, aliases, facts | OSV | |
| first indexed | CVE List, EUVD, GitHub Advisories, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2026-33750 is a medium vulnerability (CVSS 6.5) in Juliangruber Brace-expansion, published March 26, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.45%, the 39th percentile. Fixed in brace-expansion 5.0.5.
References
github.com/juliangruber/brace-expansion/security/advisories/GHSA-f886-m6hf-6m8v
github.com/juliangruber/brace-expansion/issues/98
github.com/juliangruber/brace-expansion/pull/95
github.com/juliangruber/brace-expansion/pull/96
github.com/juliangruber/brace-expansion/pull/97
github.com/juliangruber/brace-expansion/commit/311ac0d54994158c0a384e286a7d6cbb17ee8ed5
Show 11 moreShow less
github.com/juliangruber/brace-expansion/commit/7fd684f89fdde3549563d0a6522226a9189472a2
github.com/juliangruber/brace-expansion/commit/b9cacd9e55e7a1fa588fe4b7bb1159d52f1d902a
github.com/juliangruber/brace-expansion/blob/daa71bcb4a30a2df9bcb7f7b8daaf2ab30e5794a/src/index.ts
nvd.nist.gov/vuln/detail/CVE-2026-33750
github.com/advisories/GHSA-f886-m6hf-6m8v
github.com/CVEProject/cvelistV5/tree/main/cves/2026/33xxx/CVE-2026-33750.json
security-tracker.debian.org/tracker/CVE-2026-33750
github.com/juliangruber/brace-expansion
openeuler.org/zh/security/security-bulletins/detail?id=openEuler-SA-2026-1835
ubuntu.com/security/CVE-2026-33750
cve.org/CVERecord?id=CVE-2026-33750