
Exploit and test stand for CVE-2025-2945
Ceci est ma recherche sur CVE-2025-2945. Ce dépôt comprend un banc de test avec PostgreSQL et pgAdmin vulnérable, ainsi qu'un exploit.
Liens utiles :
Dans le backend de pgAdmin, qui est écrit en Python, il y a deux points de terminaison qui manquent de validation appropriée. Ces points de terminaison sont :
/sqleditor/query_tool/download - paramètre query_commited/cloud/deploy - paramètre high_availabilityRegardons le code de 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
)
Ce que nous voyons ici, c'est que la valeur de query_commited est directement passée à la fonction eval(). Vous pouvez consulter la documentation pour eval.
Voir aussi le code de 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'
Même problème ici.
Cela nécessite toujours des informations d'identification valides et un accès à pgAdmin pour atteindre ces points de terminaison. Mais tout attaquant capable d'y accéder peut également passer n'importe quelle valeur à eval, ce qui équivaut à exécuter n'importe quel one-liner Python.
L'exploitation est assez simple. Voir le fichier exploit/src/main.py. N'oubliez pas de mettre à jour la configuration pour obtenir un reverse shell.
Pour configurer le banc de test, exécutez ceci :
cd stand
docker compose up -d
Et voilà. pgAdmin est maintenant accessible à l'adresse http://localhost:8080. Les identifiants par défaut sont :
[email protected]
admin
N'hésitez pas à modifier le fichier .env et stand/init-db/01-init.sql.
produit par I3r1h0n.