
Stand di test ed exploit per CVE-2025-2945
Questa è la mia ricerca su CVE-2025-2945. Questa repository include un ambiente di test con postgress e pgadmin vulnerabile, e l'exploit.
Link utili:
Nel backend di pgAdmin, che è scritto in Python, ci sono due endpoint privi di una corretta sanitizzazione. Gli endpoint sono:
/sqleditor/query_tool/download - parametro query_commited/cloud/deploy - parametro high_availabilityDiamo un'occhiata al codice di sqleditor:
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
)
Quello che vediamo qui è che il valore di query_commited viene passato direttamente alla funzione eval(). Puoi consultare la documentazione di eval.
Vedi anche il codice di 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'
Stesso problema qui.
Servono comunque credenziali valide e accesso a pgadmin per raggiungere questi endpoint. Ma qualsiasi attaccante in grado di accedervi può anche passare qualsiasi valore a eval. Ciò equivale a eseguire qualsiasi one-liner Python.
Lo sfruttamento è abbastanza diretto. Vedi exploit/src/main.py. Non dimenticare di aggiornare la configurazione per ottenere una reverse shell.
Per configurare l'ambiente esegui:
cd stand
docker compose up -d
Ed è tutto. pgAdmin è ora accessibile all'indirizzo http://localhost:8080. Le credenziali predefinite sono:
[email protected]
admin
Sentiti libero di modificare il file .env e stand/init-db/01-init.sql.
prodotto da I3r1h0n.