CVE-2026-112949
Vitest es un framework de pruebas nativo de Vite para proyectos de JavaScript y TypeScript. Desde la 2.1.0-beta.7 hasta la 4.1.12 y la 5.0.3, un cliente WebSocket sin autenticar que no es un navegador y que puede acceder a un servidor de desarrollo que use interceptorPlugin puede registrar un mock manual cuya url, controlada por el atacante, createManualModuleSource inserta sin escape en el código del módulo generado. Cuando el navegador del desarrollador carga el módulo afectado, se ejecuta JavaScript controlado por el atacante en el origen del servidor de desarrollo. Este fallo está corregido en las versiones 4.1.12 y 5.0.3.
Traducción automática del texto original de NVD (en inglés).
CVSS
- Puntuación base
- 4.7
- Versión
- 3.1
- Vector
- CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:C/C:L/I:L/A:N
Probabilidad de explotación (EPSS)
FIRST aún no ha puntuado esta CVE (habitual en CVEs muy recientes o rechazadas).
EPSS (Exploit Prediction Scoring System, de FIRST) estima la probabilidad de que una vulnerabilidad sea explotada en 30 días. Complementa a CVSS (impacto) y a CISA KEV (explotación confirmada).
Técnicas ATT&CK
Cómo se explota esta vulnerabilidad y qué consigue el atacante, en el lenguaje de MITRE ATT&CK.
- Explotación
T1203Exploitation for Client Executionexecution90 % - Impacto principal
T1059.007JavaScriptexecution80 %
El vector CVSS indica UI:R con AV:N y PR:N, y el texto dice que el JavaScript del atacante se ejecuta en el navegador del desarrollador al cargar el módulo afectado.
Inferido por nuestro agente de análisis a partir de la descripción oficial, el vector CVSS y la CWE, y comprobado por un supervisor. Puede contener errores.
Mitigaciones ATT&CK que cubren estas técnicas
Tecnologías afectadas (1)
⚠ Inferidas por IA a partir de la descripción — NVD aún no ha analizado esta CVE; no son CPE verificados.
CWE
- CWE-94, CWE-116, CWE-306
Referencias
Mostrar las 5 referencias
- https://github.com/vitest-dev/vitest/commit/15cc006aa9f8683dc5f7e895d011fa7dc751ce35
- https://github.com/vitest-dev/vitest/commit/b825313243dc55757e8d7c0f9e7a792135e13473
- https://github.com/vitest-dev/vitest/releases/tag/v4.1.12
- https://github.com/vitest-dev/vitest/releases/tag/v5.0.3
- https://github.com/vitest-dev/vitest/security/advisories/GHSA-qxg6-89mg-rqv8
JSON original (NVD)
Mostrar
{
"id": "CVE-2026-112949",
"cveTags": [],
"metrics": {
"cvssMetricV31": [
{
"type": "Secondary",
"source": "security-advisories@github.com",
"cvssData": {
"scope": "CHANGED",
"version": "3.1",
"baseScore": 4.7,
"attackVector": "NETWORK",
"baseSeverity": "MEDIUM",
"vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:C/C:L/I:L/A:N",
"integrityImpact": "LOW",
"userInteraction": "REQUIRED",
"attackComplexity": "HIGH",
"availabilityImpact": "NONE",
"privilegesRequired": "NONE",
"confidentialityImpact": "LOW"
},
"impactScore": 2.7,
"exploitabilityScore": 1.6
}
]
},
"affected": [
{
"source": "security-advisories@github.com",
"affectedData": [
{
"vendor": "vitest-dev",
"product": "vitest",
"versions": [
{
"status": "affected",
"version": ">= 2.1.0-beta.7, < 4.1.12"
},
{
"status": "affected",
"version": ">= 5.0.0, < 5.0.3"
}
]
},
{
"vendor": "@vitest",
"product": "mocker",
"versions": [
{
"status": "affected",
"version": ">= 2.1.0-beta.7, < 4.1.12"
},
{
"status": "affected",
"version": ">= 5.0.0, < 5.0.3"
}
]
}
]
}
],
"published": "2026-10-20T16:17:05.660",
"references": [
{
"url": "https://github.com/vitest-dev/vitest/commit/15cc006aa9f8683dc5f7e895d011fa7dc751ce35",
"source": "security-advisories@github.com"
},
{
"url": "https://github.com/vitest-dev/vitest/commit/b825313243dc55757e8d7c0f9e7a792135e13473",
"source": "security-advisories@github.com"
},
{
"url": "https://github.com/vitest-dev/vitest/releases/tag/v4.1.12",
"source": "security-advisories@github.com"
},
{
"url": "https://github.com/vitest-dev/vitest/releases/tag/v5.0.3",
"source": "security-advisories@github.com"
},
{
"url": "https://github.com/vitest-dev/vitest/security/advisories/GHSA-qxg6-89mg-rqv8",
"source": "security-advisories@github.com"
}
],
"vulnStatus": "Awaiting Analysis",
"weaknesses": [
{
"type": "Primary",
"source": "security-advisories@github.com",
"description": [
{
"lang": "en",
"value": "CWE-94"
},
{
"lang": "en",
"value": "CWE-116"
},
{
"lang": "en",
"value": "CWE-306"
}
]
}
],
"descriptions": [
{
"lang": "en",
"value": "Vitest is a Vite-native testing framework for JavaScript and TypeScript projects. From 2.1.0-beta.7 until 4.1.12 and 5.0.3, an unauthenticated non-browser WebSocket client that can reach a development server using interceptorPlugin can register a manual mock whose attacker-controlled url createManualModuleSource inserts unescaped into generated module source. When the developer browser loads the affected module, attacker-controlled JavaScript executes on the development-server origin. This issue is fixed in versions 4.1.12 and 5.0.3."
}
],
"lastModified": "2026-10-20T19:56:45.543",
"sourceIdentifier": "security-advisories@github.com"
}