CVE-2026-102278
validatedZero produced an exploit or a check.GHSA-qhr7-859c-m2p7 ↗EUVD-2026-88555 ↗
description
brace-expansion versions before 1.1.20, 2.1.6, 3.0.8, and 5.0.11 can consume the Node.js call stack when expanding deeply nested brace patterns. An attacker may terminate a process that expands attacker-controlled patterns directly or through consumers such as minimatch or glob; exposure requires untrusted glob or brace-expansion input.
mitigation
Upgrade brace-expansion to 1.1.20, 2.1.6, 3.0.8, 5.0.11, or a later compatible release. Until updated, reject or limit deeply nested brace syntax in untrusted patterns before expansion.
fixed in 5.0.11, 3.0.8, 2.1.6, 1.1.20
outcome
Mechanism verified: the exploit fired on the vulnerable build and stayed silent on the patched one, but the server it ran against was ours, so no check ships for it.
source signals
Public signals that triggered or updated the pipeline. These are inputs for the deltas above.
- 2026-09-28 20:57Zghsa: trigger signal, started the run
- 2026-09-28 20:57Zcve.org record for CVE-2026-102278
this entry in the feed
GET /api/v1/feed/CVE-2026-102278
{ "etk_id": "ETK-2026-49", "cve_id": "CVE-2026-102278", "display_id": "CVE-2026-102278", "ghsa_id": "GHSA-qhr7-859c-m2p7", "euvd_id": "EUVD-2026-88555", "status": "published", "anchor_state": "anchored", "title": "Nested-brace stack exhaustion in brace-expansion", "summary": "brace-expansion versions before 1.1.20, 2.1.6, 3.0.8, and 5.0.11 can consume the Node.js call stack when expanding deeply nested brace patterns. An attacker may terminate a process that expands attacker-controlled patterns directly or through consumers such as minimatch or glob; exposure requires untrusted glob or brace-expansion input.", "mitigation": "Upgrade brace-expansion to 1.1.20, 2.1.6, 3.0.8, 5.0.11, or a later compatible release. Until updated, reject or limit deeply nested brace syntax in untrusted patterns before expansion.", "vendor": "npm", "product": "npm:brace-expansion", "affected": [ { "affected_notes": [], "affected_ranges": [ ">= 4.0.0, < 5.0.11" ], "ecosystem": "npm", "fixed_versions": [ "5.0.11" ], "package_name": "brace-expansion", "purl": "pkg:npm/brace-expansion" }, { "affected_notes": [], "affected_ranges": [ ">= 3.0.0, < 3.0.8" ], "ecosystem": "npm", "fixed_versions": [ "3.0.8" ], "package_name": "brace-expansion", "purl": "pkg:npm/brace-expansion" }, { "affected_notes": [], "affected_ranges": [ ">= 2.0.0, < 2.1.6" ], "ecosystem": "npm", "fixed_versions": [ "2.1.6" ], "package_name": "brace-expansion", "purl": "pkg:npm/brace-expansion" }, { "affected_notes": [], "affected_ranges": [ "< 1.1.20" ], "ecosystem": "npm", "fixed_versions": [ "1.1.20" ], "package_name": "brace-expansion", "purl": "pkg:npm/brace-expansion" } ], "cwes": null, "cvss_score": 7.5, "cvss_src": "cna_vendor", "cvss_vector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H", "epss_score": 0.0035, "epss_percentile": 0.2723, "epss_asof": "2026-10-20", "automation": "contextual", "check": true, "check_confidence_basis": "mechanism_verified", "exploit": false, "pipeline_minutes": 14.984084033333334, "t0_at": "2026-09-28T20:57:09.850000+00:00", "signals": { "check": { "at": "2026-09-30T00:37:27.038204+00:00", "days": 1.1529767153240742, "is_lower_bound": false, "measured_at": "2026-09-28T20:57:09.850000+00:00", "url": null }, "trigger_signal": { "at": "2026-09-28T20:57:09.850000+00:00", "days": 0, "is_lower_bound": false, "measured_at": "2026-09-28T20:57:09.850000+00:00", "url": "https://github.com/advisories/GHSA-qhr7-859c-m2p7" } } }
published 2026-09-30 00:22Z
last change 2026-10-21 06:34Z
Need the technical details behind an entry?
Every entry here shows what we attempted and when. The technical details, the generated exploit that fired it and the evidence behind the verdict are not public. Tell us about your use case and we’ll get back to you about extended API access.