Fix version ranges for GHSA-mh99-v99m-4gvg (brace-expansion) - #8877
Fix version ranges for GHSA-mh99-v99m-4gvg (brace-expansion)#8877andymai wants to merge 1 commit into
Conversation
The advisory declares a single range, introduced 0 -> fixed 5.0.8. The maintainer backported the fix to the 1.x, 2.x and 3.x lines after the advisory was published, so those lines now have patched releases that the current range still reports as affected.
There was a problem hiding this comment.
Pull request overview
Updates the brace-expansion advisory to recognize patched maintenance releases.
Changes:
- Adds fixed boundaries for versions 1.1.17, 2.1.3, and 3.0.3.
- Preserves vulnerability coverage for 4.x through 5.0.8.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
|
Arrived at the same five boundaries independently before spotting this PR, so consider this corroboration and some effort to save a verifier the digging: Each backport is a self-identifying commit in
Each lands immediately before its release commit, which confirms the Also +1 on rolling 4.x forward to |
What this changes
GHSA-mh99-v99m-4gvg(CVE-2026-14257) currently declares a single range,introduced: 0→fixed: 5.0.8. That was accurate when the advisory was published on 2026-07-24, when 5.0.8 was the only patched release.The maintainer has since backported the fix to the 1.x, 2.x and 3.x maintenance lines. Those releases are not reflected in the range, so the advisory reports patched versions as affected.
This adds per-line
fixedevents:The 4.x line has no backport, so it stays affected through to
5.0.8, preserving the current behaviour for those versions.How the boundaries were determined
Each version was checked behaviourally with the advisory's own published proof of concept (
'{a,b}'.repeat(1500)), run under a constrained heap (node --max-old-space-size=512), rather than by inspecting source for theEXPANSION_MAX_LENGTHmarker:Testing behaviourally matters here:
1.1.16and2.1.2do define anEXPANSION_MAX_LENGTHconstant and reference the CVE in comments, but the bound is not effective — both still crash on the PoC. Only the later backports actually enforce it. A source-marker check would place the 1.x and 2.x boundaries one release too early.Why it matters
minimatch@3— still depended on by widely used packages such aseslint-plugin-jsx-a11y— pinsbrace-expansion: ^1.1.7and calls it as a function. It cannot move to 5.x, whose CJS build exports{ expand }rather than a callable.1.1.17is the correct remediation for that dependency tree, but the current range reports it as vulnerable, leaving consumers with a finding they cannot action.database_specific.last_known_affected_version_range(<= 5.0.7) is left untouched, since that field appears to be generated.