Vulnerability GHSA-3ppc-4f35-3m26

High Risk
HIGH RISK
CVSS Score: 8.0
Score Range: 7.0–8.9
High severity vulnerabilities (CVSS 7.0–8.9). Serious vulnerabilities that should be prioritized soon after critical fixes.
8 months ago
February 18, 2026 at 10:38 PM UTC
minimatch has a ReDoS via repeated wildcards with non-matching literal in pattern
0.0.1 - 3.1.2 and 4.0.0 - 4.2.3 and 5.0.0 - 5.1.6 and 6.0.0 - 6.2.0 and 7.0.0 - 7.4.6 and 8.0.0 - 8.0.4 and 9.0.0 - 9.0.5 and 10.0.0 - 10.2.0
0.0.1 - 3.1.2 and 4.0.0 - 4.2.3 and 5.0.0 - 5.1.6 and 6.0.0 - 6.2.0 and 7.0.0 - 7.4.6 and 8.0.0 - 8.0.4 and 9.0.0 - 9.0.5 and 10.0.0 - 10.2.0

Summary

minimatch has a ReDoS via repeated wildcards with non-matching literal in pattern

Details

Summary

minimatch is vulnerable to Regular Expression Denial of Service (ReDoS) when a glob pattern contains many consecutive * wildcards followed by a literal character that doesn't appear in the test string. Each * compiles to a separate [^/]*? regex group, and when the match fails, V8's regex engine backtracks exponentially across all possible splits.

The time complexity is O(4^N) where N is the number of * characters. With N=15, a single minimatch() call takes ~2 seconds. With N=34, it hangs effectively forever.

Details

Give all details on the vulnerability. Pointing to the incriminated source code is very helpful for the maintainer.

PoC

When minimatch compiles a glob pattern, each * becomes [^/]*? in the generated regex. For a pattern like ***************X***:

/^(?!\.)[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?X[^/]*?[^/]*?[^/]*?$/

When the test string doesn't contain X, the regex engine must try every possible way to distribute the characters across all the [^/]*? groups before concluding no match exists. With N groups and M characters, this is O(C(N+M, N)) — exponential.

Impact

Any application that passes user-controlled strings to minimatch() as the pattern argument is vulnerable to DoS. This includes:

  • File search/filter UIs that accept glob patterns
  • .gitignore-style filtering with user-defined rules
  • Build tools that accept glob configuration
  • Any API that exposes glob matching to untrusted input

Thanks to @ljharb for back-porting the fix to legacy versions of minimatch.

Impacted packages

Timeline

Published
8 months ago
February 18, 2026 at 10:38 PM UTC
Fixed (10.2.1)
8 months ago
February 17, 2026 at 04:33 AM UTC
Fixed (9.0.6)
8 months ago
February 22, 2026 at 02:04 AM UTC
Fixed (8.0.5)
8 months ago
February 22, 2026 at 02:13 AM UTC
Fixed (7.4.7)
8 months ago
February 22, 2026 at 02:14 AM UTC
Fixed (6.2.1)
8 months ago
February 22, 2026 at 02:16 AM UTC
Fixed (5.1.7)
8 months ago
February 22, 2026 at 02:16 AM UTC
Fixed (4.2.4)
8 months ago
February 22, 2026 at 02:17 AM UTC
Fixed (3.1.3)
8 months ago
February 22, 2026 at 02:17 AM UTC
Last Modified
1 month ago
September 10, 2026 at 03:50 AM UTC