
Exploit- und Teststand für CVE-2025-2945
Dies ist meine Forschung zu CVE-2025-2945. Dieses Repository enthält einen Teststand mit PostgreSQL und verwundbarem pgAdmin sowie einen Exploit.
Nützliche Links:
Im pgAdmin-Backend, das in Python geschrieben ist, gibt es zwei Endpunkte, denen eine ordnungsgemäße Bereinigung fehlt. Die Endpunkte sind:
/sqleditor/query_tool/download – Parameter query_commited/cloud/deploy – Parameter high_availabilitySchauen wir uns den Code von sqleditor an:
for key, value in data.items():
if key == 'query':
sql = value
if key == 'query_commited':
query_commited = (
eval(value) if isinstance(value, str) else value
)
Was wir hier sehen, ist, dass der Wert von query_commited direkt an die Funktion eval() übergeben wird. Sie können die Dokumentation für eval einsehen.
Siehe auch den Code von pgacloud:
def _create_google_postgresql_instance(self, args):
credentials = self._get_credentials(self._scopes)
service = discovery.build('sqladmin', 'v1beta4',
credentials=credentials)
high_availability = \
'REGIONAL' if eval(args.high_availability) else 'ZONAL'
Hier dasselbe Problem.
Es sind weiterhin gültige Anmeldedaten und Zugriff auf pgAdmin erforderlich, um diese Endpunkte zu erreichen. Aber jeder Angreifer, der darauf zugreifen kann, ist auch in der Lage, jeden beliebigen Wert an eval zu übergeben. Dies kommt der Ausführung eines beliebigen Python-One-Liners gleich.
Die Ausnutzung ist relativ einfach. Siehe exploit/src/main.py. Vergessen Sie nicht, die Konfiguration zu aktualisieren, um eine Reverse-Shell zu erhalten.
Um den Stand aufzusetzen, führen Sie Folgendes aus:
cd stand
docker compose up -d
Und das war's. pgAdmin ist nun unter http://localhost:8080 erreichbar. Standard-Anmeldedaten:
[email protected]
admin
Passen Sie bei Bedarf die Datei .env und stand/init-db/01-init.sql an.
produziert von I3r1h0n.