Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
CVE-2026-26198-analysis — Tiefer Einblick in eine kritische SQL-Injection in Pythons Ormar-ORM — Reproduktion, Fix und Tests | Kitploit
Tools/GitHubGitHub/sergicortesabadia/cve-2026-26198-analysis
SchwachstellenanalyseCode-AnalyseWebsicherheitPapers & ForschungLernen & Bildung
GitHubsergicortesabadia/cve-2026-26198-analysis

CVE-2026-26198-analysis

Tiefer Einblick in eine kritische SQL-Injection in Pythons Ormar-ORM — Reproduktion, Fix und Tests

Repository anzeigen
vor 5 MonatenNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

CVE-2026-26198 — SQL-Injection in Ormar ORM

Ein tiefer Einblick in eine kritische (CVSS 9.8) SQL-Injection-Schwachstelle in einem Python-Async-ORM, mit Reproduktion, Analyse und Fix.

Die Schwachstelle

Ormar ist ein beliebtes Async-Mini-ORM für Python, das häufig mit FastAPI und Starlette verwendet wird. Die Versionen 0.9.9 bis 0.22.0 enthalten eine SQL-Injection-Schwachstelle in den Aggregatmethoden min() und max().

Die Ursache ist ein „partieller Implementierungs“-Bug: Während sum() und avg() validieren, dass der Spaltenparameter auf ein tatsächliches numerisches Feld verweist, überspringen min() und max() diese Prüfung vollständig und leiten Benutzereingaben direkt an sqlalchemy.text() weiter — eine Raw-SQL-Senke.

Ein Angreifer kann eine Unterabfrage als „Spalten“-Parameter injizieren:

root@kitploit:~
# Erwartete Verwendung
await Item.objects.max("price")  # → SELECT max(price) FROM items

# Angriffspayload
await Item.objects.max("(SELECT password FROM users LIMIT 1)")
# → SELECT max((SELECT password FROM users LIMIT 1)) FROM items
# Gibt das Admin-Passwort zurück!

Kurzfakten

AttributWert
CVE-IDCVE-2026-26198
CVSS-Score9.8 (Kritisch)
CWECWE-89: SQL-Injection
Betroffenormar 0.9.9 – 0.22.0
Behoben inormar 0.23.0
Veröffentlicht24. Februar 2026
Authentifizierung nötig?Keine — ohne Authentifizierung

Projektstruktur

root@kitploit:~
├── README.md               ← Du bist hier
├── vulnerable_app.py       ← Minimale FastAPI-App mit dem verwundbaren Muster
├── exploit_demo.py         ← Sicheres PoC, das die Injection in Aktion zeigt
├── patched_app.py          ← Die behobene Version mit Eingabevalidierung
├── test_vulnerability.py   ← Tests, die die Schwachstelle und den Fix belegen
├── requirements.txt
└── analysis/
    └── root_cause.md       ← Detaillierte Code-Ebene-Analyse des Bugs

Demo ausführen

root@kitploit:~
git clone https://github.com/YOUR_USERNAME/CVE-2026-26198-analysis.git
cd CVE-2026-26198-analysis
python -m venv venv && source venv/bin/activate
pip install -r requirements.txt

# Tests ausführen (keine externe DB nötig — verwendet SQLite)
python -m pytest test_vulnerability.py -v

# Interaktive Exploit-Demo ausführen
python exploit_demo.py

Der Fix

Der Fix validiert, dass der Spaltenparameter einem tatsächlichen Feld des Modells entspricht, bevor er sqlalchemy.text() erreicht. Dies geschieht über einen Whitelist-Ansatz: Nur Spaltennamen, die in den Felddefinitionen des Modells existieren, sind erlaubt.

Siehe patched_app.py für die Implementierung und analysis/root_cause.md für die vollständige Aufschlüsselung.

Wichtige Erkenntnisse

  1. ORMs sind kein automatischer SQL-Injection-Schutz. Wenn eine ORM-Methode einen Rohstring akzeptiert und an eine Textklausel weitergibt, ist das genauso gefährlich wie das Schreiben von Raw-SQL.
  2. Partielle Validierung ist schlimmer als keine Validierung. Die Tatsache, dass sum()/avg() validiert wurden, min()/max() jedoch nicht, erzeugte ein falsches Sicherheitsgefühl.
  3. Whitelist statt Blacklist. Der Fix validiert gegen bekannte, gültige Spaltennamen, anstatt zu versuchen, bösartige Muster herauszufiltern.

Referenzen

  • GitHub Advisory (GHSA-xxh2-68g9-8jqr)
  • NVD-Eintrag
  • Ormar-Repository

Lizenz

MIT

Tool herunterladen