FKIE_CVE-2026-27903
Vulnerability from fkie_nvd - Published: 2026-02-26 02:16 - Updated: 2026-02-27 17:21
Severity ?
Summary
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.
References
| URL | Tags | ||
|---|---|---|---|
| security-advisories@github.com | https://github.com/isaacs/minimatch/security/advisories/GHSA-7r86-cg39-jmmj | Exploit, Vendor Advisory |
Impacted products
| Vendor | Product | Version | |
|---|---|---|---|
| minimatch_project | minimatch | * | |
| minimatch_project | minimatch | * | |
| minimatch_project | minimatch | * | |
| minimatch_project | minimatch | * | |
| minimatch_project | minimatch | * | |
| minimatch_project | minimatch | * | |
| minimatch_project | minimatch | * | |
| minimatch_project | minimatch | * |
{
"configurations": [
{
"nodes": [
{
"cpeMatch": [
{
"criteria": "cpe:2.3:a:minimatch_project:minimatch:*:*:*:*:*:node.js:*:*",
"matchCriteriaId": "7BC88877-A42C-4FBD-834C-95775A0CAD0F",
"versionEndExcluding": "3.1.3",
"vulnerable": true
},
{
"criteria": "cpe:2.3:a:minimatch_project:minimatch:*:*:*:*:*:node.js:*:*",
"matchCriteriaId": "39C23B15-E8E5-4847-A6EF-0940FA9F26BF",
"versionEndExcluding": "4.2.5",
"versionStartIncluding": "4.0.0",
"vulnerable": true
},
{
"criteria": "cpe:2.3:a:minimatch_project:minimatch:*:*:*:*:*:node.js:*:*",
"matchCriteriaId": "DA03D53D-D7C4-424A-A3BA-C8C3B90D3EA2",
"versionEndExcluding": "5.1.8",
"versionStartIncluding": "5.0.0",
"vulnerable": true
},
{
"criteria": "cpe:2.3:a:minimatch_project:minimatch:*:*:*:*:*:node.js:*:*",
"matchCriteriaId": "B3677470-9515-47D2-B5FB-4FA1F700ED55",
"versionEndExcluding": "6.2.2",
"versionStartIncluding": "6.0.0",
"vulnerable": true
},
{
"criteria": "cpe:2.3:a:minimatch_project:minimatch:*:*:*:*:*:node.js:*:*",
"matchCriteriaId": "A34E360D-31EA-43CF-957E-5D2208076EBF",
"versionEndExcluding": "7.4.8",
"versionStartIncluding": "7.0.0",
"vulnerable": true
},
{
"criteria": "cpe:2.3:a:minimatch_project:minimatch:*:*:*:*:*:node.js:*:*",
"matchCriteriaId": "6391D830-3745-4C96-A6CF-A6C75CC221A5",
"versionEndExcluding": "8.0.6",
"versionStartIncluding": "8.0.0",
"vulnerable": true
},
{
"criteria": "cpe:2.3:a:minimatch_project:minimatch:*:*:*:*:*:node.js:*:*",
"matchCriteriaId": "3E6BE4CC-B5A1-4FC8-8776-9BEA2B10F6D7",
"versionEndExcluding": "9.0.7",
"versionStartIncluding": "9.0.0",
"vulnerable": true
},
{
"criteria": "cpe:2.3:a:minimatch_project:minimatch:*:*:*:*:*:node.js:*:*",
"matchCriteriaId": "5B5B4C6E-7FBB-4C95-BD32-B3A16C6B1E5B",
"versionEndExcluding": "10.2.3",
"versionStartIncluding": "10.0.0",
"vulnerable": true
}
],
"negate": false,
"operator": "OR"
}
]
}
],
"cveTags": [],
"descriptions": [
{
"lang": "en",
"value": "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."
},
{
"lang": "es",
"value": "minimatch es una utilidad de coincidencia m\u00ednima para convertir expresiones glob en objetos RegExp de JavaScript. Antes de las versiones 10.2.3, 9.0.7, 8.0.6, 7.4.8, 6.2.2, 5.1.8, 4.2.5 y 3.1.3, \u0027matchOne()\u0027 realiza un retroceso recursivo ilimitado cuando un patr\u00f3n glob contiene m\u00faltiples segmentos \u0027**\u0027 (GLOBSTAR) no adyacentes y la ruta de entrada no coincide. La complejidad temporal es O(C(n, k)) -- binomial -- donde \u0027n\u0027 es el n\u00famero de segmentos de ruta y \u0027k\u0027 es el n\u00famero de globstars. Con k=11 y n=30, una llamada a la API predeterminada de \u0027minimatch()\u0027 se detiene durante aproximadamente 5 segundos. Con k=13, supera los 15 segundos. No existe memoizaci\u00f3n ni presupuesto de llamadas para limitar este comportamiento. Cualquier aplicaci\u00f3n donde un atacante pueda influir en el patr\u00f3n glob pasado a \u0027minimatch()\u0027 es vulnerable. La superficie de ataque realista incluye herramientas de compilaci\u00f3n y ejecutores de tareas que aceptan argumentos glob proporcionados por el usuario (configuraci\u00f3n de ESLint, Webpack, Rollup), sistemas multi-inquilino donde un inquilino configura reglas basadas en glob que se ejecutan en un proceso compartido, interfaces de administrador o desarrollador que aceptan configuraci\u00f3n de reglas de ignorar o de filtro como globs, y pipelines de CI/CD que eval\u00faan archivos de configuraci\u00f3n enviados por el usuario que contienen patrones glob. Un atacante que pueda colocar un patr\u00f3n dise\u00f1ado en cualquiera de estas rutas puede detener el bucle de eventos de Node.js durante decenas de segundos por invocaci\u00f3n. El patr\u00f3n es de 56 bytes para una detenci\u00f3n de 5 segundos y no requiere autenticaci\u00f3n en contextos donde la entrada del patr\u00f3n es parte de la caracter\u00edstica. Las versiones 10.2.3, 9.0.7, 8.0.6, 7.4.8, 6.2.2, 5.1.8, 4.2.5 y 3.1.3 solucionan el problema."
}
],
"id": "CVE-2026-27903",
"lastModified": "2026-02-27T17:21:22.370",
"metrics": {
"cvssMetricV31": [
{
"cvssData": {
"attackComplexity": "LOW",
"attackVector": "NETWORK",
"availabilityImpact": "HIGH",
"baseScore": 7.5,
"baseSeverity": "HIGH",
"confidentialityImpact": "NONE",
"integrityImpact": "NONE",
"privilegesRequired": "NONE",
"scope": "UNCHANGED",
"userInteraction": "NONE",
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H",
"version": "3.1"
},
"exploitabilityScore": 3.9,
"impactScore": 3.6,
"source": "security-advisories@github.com",
"type": "Secondary"
}
]
},
"published": "2026-02-26T02:16:21.353",
"references": [
{
"source": "security-advisories@github.com",
"tags": [
"Exploit",
"Vendor Advisory"
],
"url": "https://github.com/isaacs/minimatch/security/advisories/GHSA-7r86-cg39-jmmj"
}
],
"sourceIdentifier": "security-advisories@github.com",
"vulnStatus": "Analyzed",
"weaknesses": [
{
"description": [
{
"lang": "en",
"value": "CWE-407"
}
],
"source": "security-advisories@github.com",
"type": "Primary"
}
]
}
Loading…
Loading…
Sightings
| Author | Source | Type | Date |
|---|
Nomenclature
- Seen: The vulnerability was mentioned, discussed, or observed by the user.
- Confirmed: The vulnerability has been validated from an analyst's perspective.
- Published Proof of Concept: A public proof of concept is available for this vulnerability.
- Exploited: The vulnerability was observed as exploited by the user who reported the sighting.
- Patched: The vulnerability was observed as successfully patched by the user who reported the sighting.
- Not exploited: The vulnerability was not observed as exploited by the user who reported the sighting.
- Not confirmed: The user expressed doubt about the validity of the vulnerability.
- Not patched: The vulnerability was not observed as successfully patched by the user who reported the sighting.
Loading…
Loading…