{"id":"CVE-2026-27903","summary":"minimatch has a ReDoS: matchOne() combinatorial backtracking via multiple non-adjacent GLOBSTAR segments","details":"minimatch is a minimal matching utility for converting glob expressions into JavaScript RegExp objects. Prior to version 10.2.3, 9.0.7, 8.0.6, 7.4.8, 6.2.2, 5.1.8, 4.2.5, and 3.1.3, `matchOne()` performs unbounded recursive backtracking when a glob pattern contains multiple non-adjacent `**` (GLOBSTAR) segments and the input path does not match. The time complexity is O(C(n, k)) -- binomial -- where `n` is the number of path segments and `k` is the number of globstars. With k=11 and n=30, a call to the default `minimatch()` API stalls for roughly 5 seconds. With k=13, it exceeds 15 seconds. No memoization or call budget exists to bound this behavior. Any application where an attacker can influence the glob pattern passed to `minimatch()` is vulnerable. The realistic attack surface includes build tools and task runners that accept user-supplied glob arguments (ESLint, Webpack, Rollup config), multi-tenant systems where one tenant configures glob-based rules that run in a shared process, admin or developer interfaces that accept ignore-rule or filter configuration as globs, and CI/CD pipelines that evaluate user-submitted config files containing glob patterns. An attacker who can place a crafted pattern into any of these paths can stall the Node.js event loop for tens of seconds per invocation. The pattern is 56 bytes for a 5-second stall and does not require authentication in contexts where pattern input is part of the feature. Versions 10.2.3, 9.0.7, 8.0.6, 7.4.8, 6.2.2, 5.1.8, 4.2.5, and 3.1.3 fix the issue.","aliases":["GHSA-7r86-cg39-jmmj"],"modified":"2026-04-10T05:37:29.603060Z","published":"2026-02-26T01:06:32.856Z","related":["CGA-v69j-gm3c-wjp9"],"database_specific":{"cwe_ids":["CWE-407"],"cna_assigner":"GitHub_M","osv_generated_from":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/27xxx/CVE-2026-27903.json"},"references":[{"type":"ADVISORY","url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/27xxx/CVE-2026-27903.json"},{"type":"ADVISORY","url":"https://github.com/isaacs/minimatch/security/advisories/GHSA-7r86-cg39-jmmj"},{"type":"ADVISORY","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-27903"}],"affected":[{"ranges":[{"type":"GIT","repo":"https://github.com/isaacs/minimatch","events":[{"introduced":"346685ced5203464bb10fd3d4dfa6964f6102ede"},{"fixed":"ea94840326c3f40522f1b544bd2303024b0eec35"}],"database_specific":{"versions":[{"introduced":"10.0.0"},{"fixed":"10.2.3"}]}},{"type":"GIT","repo":"https://github.com/isaacs/minimatch","events":[{"introduced":"b95cb1e4404ce374e447b3b1bfde837e74f139bd"},{"fixed":"2de496f6d9362dd92460f35ffa6ff8de2907244b"}],"database_specific":{"versions":[{"introduced":"9.0.0"},{"fixed":"9.0.7"}]}},{"type":"GIT","repo":"https://github.com/isaacs/minimatch","events":[{"introduced":"5d20578d5749f53f3413b7ca413e5658d6ab0d05"},{"fixed":"a5f07f4b8de8a068e8fcafd44e7cafc2a8fe7be3"}],"database_specific":{"versions":[{"introduced":"8.0.0"},{"fixed":"8.0.6"}]}},{"type":"GIT","repo":"https://github.com/isaacs/minimatch","events":[{"introduced":"ce9e6a4b42eb8a4c39eff1258affa9d37c66101b"},{"fixed":"6fcf01a77e8a85765609e41be089595a36989e07"}],"database_specific":{"versions":[{"introduced":"7.0.0"},{"fixed":"7.4.8"}]}},{"type":"GIT","repo":"https://github.com/isaacs/minimatch","events":[{"introduced":"31f61eeaa6c4493f81bf5eb0a146f23e538fdfd7"},{"fixed":"dc3340d6509d25d4bb75258e6d3b4403bb1cd9c3"}],"database_specific":{"versions":[{"introduced":"6.0.0"},{"fixed":"6.2.2"}]}},{"type":"GIT","repo":"https://github.com/isaacs/minimatch","events":[{"introduced":"fc44f5f9123f534ecbf76af65558eb87d90f1028"},{"fixed":"e92ae291a1e512f2d7ae13d6797b02315f68a40c"}],"database_specific":{"versions":[{"introduced":"5.0.0"},{"fixed":"5.1.8"}]}},{"type":"GIT","repo":"https://github.com/isaacs/minimatch","events":[{"introduced":"26d281dc585af91df47cb93844e227e0ee90b7ce"},{"fixed":"5970751fa5886750886a59a20de834d54b4e2541"}],"database_specific":{"versions":[{"introduced":"4.0.0"},{"fixed":"4.2.5"}]}},{"type":"GIT","repo":"https://github.com/isaacs/minimatch","events":[{"introduced":"0"},{"fixed":"00c323b188b704e5d4bc534ecec2268cfa70a32a"}],"database_specific":{"versions":[{"introduced":"0"},{"fixed":"3.1.3"}]}}],"versions":["0.0.4","0.0.5","0.1.1","0.1.2","0.1.3","0.1.4","0.1.5","0.1.6","0.2.0","0.2.1","0.2.2","0.2.3","0.2.4","0.2.5","v0.0.1","v0.2.10","v0.2.11","v0.2.12","v0.2.13","v0.2.14","v0.2.6","v0.2.7","v0.2.8","v0.2.9","v0.3.0","v0.4.0","v1.0.0","v10.0.0","v10.0.1","v10.0.2","v10.0.3","v10.1.0","v10.1.1","v10.1.2","v10.1.3","v10.2.0","v10.2.1","v10.2.2","v2.0.0","v2.0.0-0","v2.0.1","v2.0.10","v2.0.2","v2.0.3","v2.0.4","v2.0.5","v2.0.6","v2.0.7","v2.0.8","v2.0.9","v3.0.0","v3.0.1","v3.0.2","v3.0.3","v3.0.4","v3.0.5","v3.0.6","v3.1.0","v3.1.1","v3.1.2","v4.0.0","v4.1.0","v4.1.1","v4.2.0","v4.2.1","v4.2.2","v4.2.3","v4.2.4","v5.0.0","v5.0.1","v5.1.0","v5.1.1","v5.1.2","v5.1.3","v5.1.5","v5.1.6","v5.1.7","v6.0.0","v6.0.1","v6.0.2","v6.0.3","v6.0.4","v6.1.0","v6.1.1","v6.1.10","v6.1.2","v6.1.3","v6.1.4","v6.1.5","v6.1.6","v6.1.7","v6.1.8","v6.1.9","v6.2.0","v6.2.1","v7.0.0","v7.0.1","v7.1.0","v7.1.1","v7.1.2","v7.1.3","v7.1.4","v7.2.0","v7.3.0","v7.4.0","v7.4.1","v7.4.2","v7.4.3","v7.4.4","v7.4.5","v7.4.6","v7.4.7","v8.0.0","v8.0.1","v8.0.2","v8.0.3","v8.0.4","v8.0.5","v9.0.0","v9.0.1","v9.0.2","v9.0.3","v9.0.4","v9.0.5","v9.0.6"],"database_specific":{"source":"https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-27903.json"}}],"schema_version":"1.7.5","severity":[{"type":"CVSS_V3","score":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"}]}