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-2026-2005 — Exploit para CVE-2026-2005, un desbordamiento de montón en la extensión pgcrypto de PostgreSQL que conduce a la ejecución remota de código. Incluye generadores de PoC, laboratorio Docker y análisis técnico detallado. | Kitploit
Herramientas/GitHubGitHub/dinosn/cve-2026-2005
Análisis de VulnerabilidadesExplotaciónPruebas de PenetraciónSeguridad de Bases de DatosExplotación de Binarios
GitHubdinosn/cve-2026-2005

cve-2026-2005

Exploit para CVE-2026-2005, un desbordamiento de montón en la extensión pgcrypto de PostgreSQL que conduce a la ejecución remota de código. Incluye generadores de PoC, laboratorio Docker y análisis técnico detallado.

Ver Repositorio
1828hace 4 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-2026-2005 — Desbordamiento de montón en pgcrypto de PostgreSQL → RCE

Ejecución remota de código mediante una única consulta SQL dirigida a la extensión pgcrypto de PostgreSQL. La vulnerabilidad es un desbordamiento de búfer en el montón en pgp_parse_pubenc_sesskey() que permite corromper los metadatos del asignador MemoryContext interno de PostgreSQL, logrando ejecución arbitraria de código como el usuario postgres.

CVECVE-2026-2005
Componentecontrib/pgcrypto/pgp-pubdec.c
CWECWE-122 (Desbordamiento de búfer basado en montón)
CVSSv3.18.8 (AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H)
AfectadosPostgreSQL 14.0–14.20, 15.0–15.15, 16.0–16.11, 17.0–17.7, 18.0–18.1
Corregido14.21, 15.16, 16.12, 17.8, 18.2
Divulgado2026-02-12
Commit de corrección379695d3cc70d040b547d912ce4842090d917ece

Prueba de explotación

Verificación del objetivo

Ejecución del exploit

Prueba de RCE

Inicio rápido

root@kitploit:~
git clone https://github.com/dinosn/cve-2026-2005.git
cd cve-2026-2005/lab
docker compose up -d pg-exploit
# Esperar ~5s a que postgres se inicialice
python3 ../poc/exploit.py --run cve-2026-2005-pg-exploit

Ejecución completa de la explotación

Causa raíz

root@kitploit:~
// contrib/pgcrypto/pgp-pubdec.c — pgp_parse_pubenc_sesskey()
ctx->cipher_algo = *msg;
ctx->sess_key_len = msglen - 3;                       // controlado por el atacante
memcpy(ctx->sess_key, msg + 1, ctx->sess_key_len);    // sess_key es uint8[32]

ctx->sess_key es un búfer fijo de 32 bytes incrustado en una estructura PGP_Context asignada en el montón. Un mensaje PGP manipulado con una clave de sesión cifrada RSA de tamaño excesivo eleva sess_key_len hasta ~200 bytes, desbordando las asignaciones adyacentes del montón. La corrección añade una comprobación de límites sess_key_len > PGP_MAX_KEY.

Cadena de explotación

  1. Desbordamiento de montón — Un desbordamiento de 148 bytes más allá de sess_key[32] escribe metadatos falsos del asignador en la asignación MBuf adyacente
  2. Omitir bzero — Establece MBuf->data = NULL para que explicit_bzero se omita durante la limpieza
  3. Cabecera de chunk falsa — Un hdrmask forjado se decodifica como blockoffset=64, redirigiendo el puntero de bloque a datos controlados por el atacante
  4. Escritura en la lista libre — AllocSetFree escribe la dirección del chunk en MC+16 (el campo MemoryContext->methods), reemplazando el puntero de la tabla virtual
  5. Retorno de error — pgcrypto devuelve un error normal (sin bloqueo), activando el manejador de errores de PostgreSQL
  6. Secuestro de la tabla virtual — MemoryContextDelete(MC) llama a methods->delete_context(MC) a través de nuestra tabla virtual falsa → system(MC)
  7. Ejecución de comandos — system() lee la estructura MemoryContext como una cadena: NodeTag 0x1D5 = "\xd5\x01\x00\x00" → ejecuta /usr/local/bin/\xd5\x01

Requisitos previos

  • Acceso autenticado a la base de datos (cualquier usuario con EXECUTE en las funciones de pgcrypto — otorgado a PUBLIC por defecto)
  • Extensión pgcrypto instalada (CREATE EXTENSION pgcrypto)
  • Direcciones específicas del objetivo (deterministas por imagen Docker; sin ASLR PIE en esta configuración de contenedor)
  • Script de activación preinstalado en /usr/local/bin/\xd5\x01 (incluido en Dockerfile.exploit)

Estructura del repositorio

root@kitploit:~
├── README.md
├── poc/
│   ├── exploit.py          # Generador y ejecutor de exploit autocontenido
│   ├── gen_exploit_v7.py   # Constructor de payload anotado
│   ├── gen_payload.py      # Generador de PoC solo de bloqueo (todos los tamaños de desbordamiento)
│   ├── poc_big.sql         # PoC de bloqueo pregenerado (SIGSEGV)
│   └── poc_minimal.sql     # PoC mínimo de desbordamiento de 4 bytes
├── lab/
│   ├── docker-compose.yml  # Laboratorio completo: vulnerable, parcheado, depuración, exploit
│   ├── Dockerfile.exploit  # Compilación de lanzamiento + script de activación (objetivo RCE)
│   ├── Dockerfile.vuln     # Compilación vulnerable estándar (demostración de bloqueo)
│   ├── Dockerfile.debug    # Compilación Cassert (demostración de aserción)
│   ├── init.sql            # Inicialización de la base de datos
│   └── setup.sh            # Asistente de configuración del laboratorio
├── reports/
│   ├── RCE-CHAIN.md        # Informe técnico detallado de explotación
│   ├── REPORT.md           # Informe de análisis de vulnerabilidad
│   └── TODO-FOR-RCE.md     # Registro de desarrollo (completado)
├── screenshots/
│   ├── 01-target-verification.png
│   ├── 02-exploit-fire.png
│   ├── 03-rce-proof.png
│   └── 04-full-run.png
└── src/                    # Fragmentos de código fuente relevantes

Compilaciones del laboratorio

ContenedorPuertoPropósito
pg-exploit5436Objetivo RCE (17.7 estándar + script de activación)
pg-vuln5433Demostración de bloqueo (17.7 estándar, SIGSEGV)
pg-fixed5434Compilación parcheada (17.8, rechaza el payload)
pg-debug5435Compilación de depuración (cassert SIGABRT con atribución de fuente)
root@kitploit:~
# Iniciar todos los contenedores
cd lab && docker compose up -d

# Demostración de bloqueo (SIGSEGV en compilación estándar)
docker exec cve-2026-2005-pg-vuln psql -U postgres -d lab -f /tmp/poc_big.sql
docker logs cve-2026-2005-pg-vuln 2>&1 | grep "signal 11"

# Compilación parcheada (rechaza correctamente)
docker exec cve-2026-2005-pg-fixed psql -U postgres -d lab -f /tmp/poc_big.sql
# ERROR: Public key too big

# Compilación de depuración (aserción con archivo:línea)
docker exec cve-2026-2005-pg-debug psql -U postgres -d lab -f /tmp/poc_big.sql
docker logs cve-2026-2005-pg-debug 2>&1 | grep "TRAP"

Limitaciones

  • Dependiente de direcciones: El exploit utiliza direcciones de montón fijas específicas de la imagen Docker postgres:17.7-bookworm. Diferentes compilaciones/entornos requieren recalibración de direcciones (mediante GDB o fuga de información).
  • Calentamiento requerido: Una única llamada a pgcrypto (SELECT digest('x','md5')) en la misma conexión estabiliza el diseño del montón antes de la consulta del exploit.
  • Script de activación: Requiere un binario llamado \xd5\x01 en PATH. El Dockerfile lo preinstala. La explotación en el mundo real requeriría acceso de escritura previo o un enfoque diferente con ROP/one-gadget.
  • Solo compilación de lanzamiento: Las compilaciones de depuración con --enable-cassert abortan en la aserción antes de la escritura en la lista libre.

Cronología

  • 2026-02-12: Vulnerabilidad divulgada por Team Xint Code
  • 2026-02-13: Corrección confirmada (379695d)
  • 2026-02-20: Versiones corregidas publicadas (17.8, etc.)
  • 2026-05-05: Exploit RCE desarrollado y probado en laboratorio

Aviso legal

Este exploit se proporciona únicamente con fines de investigación de seguridad autorizada y educativos. Úselo solo en entornos de laboratorio controlados con autorización explícita.

Descargar herramienta