Correct brace-expansion ranges in GHSA-mh99-v99m-4gvg: fix was backported to 1.x, 2.x and 3.x - #8878
Conversation
…x and 3.x The single range (introduced 0, fixed 5.0.8) reports 1.1.17, 2.1.3, 3.0.3, 3.0.4 and 3.0.5 as vulnerable, but all five carry the fix. Split into per-branch ranges. 4.x has no patched release, so its range continues to 5.0.8.
|
Adding in-repo corroboration so the per-branch boundaries can be checked by reading rather than by running anything, per CONTRIBUTING's "public, referenceable sources". The fix introduces an
Each "present" is the first release on its branch to carry the bound, and each predecessor lacks it — which is what makes Note the 5.x path differs because 5.x is a TypeScript build ( Two things I'd flag for whoever picks this up rather than decide unilaterally:
|
|
This update is invalid, as an |
GHSA-mh99-v99m-4gvg/CVE-2026-14257currently uses a single range forbrace-expansion:{ "introduced": "0" }, { "fixed": "5.0.8" }Under npm/semver ordering that marks every version below
5.0.8as vulnerable. But the fix was backported to the 1.x, 2.x and 3.x maintenance branches, so five already-patched releases are currently reported as vulnerable:1.1.17,2.1.3,3.0.3,3.0.4,3.0.5.The package carries
maintenance-v1,maintenance-v2andmaintenance-v3dist-tags, which is consistent with the backports.Proposed ranges
{ "introduced": "0" }, { "fixed": "1.1.17" }, { "introduced": "2.0.0" }, { "fixed": "2.1.3" }, { "introduced": "3.0.0" }, { "fixed": "3.0.3" }, { "introduced": "4.0.0" }, { "fixed": "5.0.8" }Note the last pair is deliberate: 4.x has no patched release —
4.0.1(2025-06-11) is the newest 4.x and is still vulnerable — so the range from4.0.0correctly continues to5.0.8, i.e. a 4.x user's only fix is the 5.x major.First patched version per branch
1.1.172.1.33.0.34.0.1is the last 4.x5.0.8How this was determined
Behaviourally, per version, against the entry point npm actually resolves — not by grepping for a marker and not from advisory metadata. Each version was installed in an isolated project and exercised with an input whose unbounded expansion exceeds the new cap:
Results (all measured, not inferred):
1.0.0,1.1.161.1.172.0.0,2.1.22.1.33.0.0,3.0.1,3.0.23.0.3,3.0.4,3.0.54.0.0,4.0.15.0.75.0.8Cross-checking both ranges against those 16 measured versions with an OSV range evaluator: the current range mis-classifies 5 of 16; the proposed range mis-classifies 0 of 16.
Two notes for anyone verifying this themselves:
package.jsonismain: "index.js"with noexports. Some of those releases also ship a fixed build underdist/that nothing resolves to, so the presence of a patcheddist/(or of an advisory file in the tarball) does not mean the installed entry point is fixed —2.1.2is exactly this case. Check the filerequire.resolve()returns.default, 5.x exportsexpand.Not changed
database_specific.last_known_affected_version_rangeis left as<= 5.0.7. It's still defensible as an upper bound on the highest affected version, and I'd rather flag it than edit a field whose exact intended semantics I haven't confirmed — happy to update it if maintainers prefer.One advisory, ranges only; no other fields touched.