GHSA-g3hv-75wg-m249: minimatch has potential denial of service via globparts amplification
minimatch 10.2.6 contains an attacker-controlled pattern amplification in firstPhasePreProcess() when optimizationLevel >= 2.
researcher: Reid Downing (b1nv0id) files:
- src/index.ts: 690-770 - src/index.ts: 780-796
issue: input-controlled growth of globParts during first-phase preprocessing, followed by quadratic second-phase processing.
the /../ transformation clones a globparts entry and appends the clone to the same globparts array: parts.splice(gs, 1) const other = parts.slice(0) other[gs] = '' globParts.push(other) this occurs inside a do...while (didSomething) fixpoint loop, allowing generated entries to be processed again.
the expanded globparts array is subsequently processed by secondPhasePreProcess(), which performs pairwise comparisons: for (let i = 0; i < globParts.length - 1; i++) { for (let j = i + 1; j < globParts.length; j++) { this.partsMatch(...) } } an attacker who can supply a glob pattern can therefore cause additional pattern entries to be generated during preprocessing, followed by quadratic pairwise processing, resulting in excessive cpu and memory consumption.
Other sources
minimatch is a minimal matching utility for converting glob expressions into JavaScript RegExp objects. Prior to 11.0.1, src/index.ts implements firstPhasePreProcess() so that, at optimizationLevel 2 or higher, it repeatedly expands attacker-controlled /.. pattern segments inside a fixpoint loop, allowing generated globParts entries to be processed and expanded again. secondPhasePreProcess() then compares the expanded entries pairwise, so a short malicious glob can cause excessive CPU and memory consumption during pattern compilation. This issue is fixed in version 11.0.1.
— OSV
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Upgrade
Upgrade
npm/minimatchto a version that resolves this vulnerability.Fixed in 11.0.1 - Upgrade
Upgrade
minimatchto a version that resolves this vulnerability.Fixed in 11.0.1