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 — PoC de desbordamiento de búfer en el montón (heap buffer overflow) en pgcrypto de PostgreSQL que demuestra CVE-2026-2005: RCE con bajos privilegios y escalada de privilegios a superusuario mediante un paquete OpenPGP manipulado. | Kitploit
Herramientas/GitHubGitHub/open-flaw/cve-2026-2005
Escalada de PrivilegiosAnálisis de VulnerabilidadesExplotaciónPost-ExplotaciónAnálisis de BinariosSeguridad de Bases de DatosExplotación de Binarios
GitHubopen-flaw/cve-2026-2005

CVE-2026-2005

PoC de desbordamiento de búfer en el montón (heap buffer overflow) en pgcrypto de PostgreSQL que demuestra CVE-2026-2005: RCE con bajos privilegios y escalada de privilegios a superusuario mediante un paquete OpenPGP manipulado.

Ver Repositorio
5hace 19 díasAú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 búfer en el heap de pgcrypto de PostgreSQL

Commit objetivo: 4b324845ba5d24682b9b3708a769f00d160afbd7 (PostgreSQL 18.1 — vulnerable)

Resumen

CampoDetalle
CVECVE-2026-2005
TipoDesbordamiento de búfer en el heap
Componentecontrib/pgcrypto/pgp-pubdec.c — pgp_parse_pubenc_sesskey()
ImpactoRCE como el usuario del SO que ejecuta PostgreSQL
CVSS8.8 (AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H)
Autenticación requeridaBaja — cualquier usuario autenticado con privilegio CREATE
AfectadosPostgreSQL 14.0–14.20, 15.0–15.15, 16.0–16.11, 17.0–17.7, 18.0–18.1
Corregido en14.21, 15.16, 16.12, 17.8, 18.2 (12 de febrero de 2026)
Arquitecturaaarch64 (ARM64) — los offsets del heap y el diseño de MBuf son específicos de la arquitectura/glibc

Inicio rápido

root@kitploit:~
# Compilar e iniciar PostgreSQL 18.1 (vulnerable)
docker compose up -d --build

# Esperar a que esté saludable
docker compose logs -f postgres
# Ctrl+C cuando veas "database system is ready to accept connections"

# Configuración única: copiar el binario de postgres para el análisis de símbolos sin conexión
docker cp cve-2026-2005-poc:/usr/local/pgsql/bin/postgres ./postgres

# Instalar dependencias de node
npm install

# Ejecutar la cadena completa de explotación RCE (SQL puro — sin interacción con Docker)
node exploit.js --cmd "id"

# Con salida verbosa
node exploit.js --cmd "id" --verbose

# Ejecutar un comando personalizado
node exploit.js --cmd "whoami"

Cadena de explotación (7 etapas)

root@kitploit:~
Etapa 1: Fuga de puntero del heap
  └─ Corromper el encabezado del chunk mdst → analizar el mensaje de error de pfree()

Etapa 2: Lectura arbitraria (escaneo multi-ventana)
  └─ Sobrescribir mdst->data → escanear la memoria cerca del puntero filtrado

Etapa 3: Recopilación de candidatos a puntero
  └─ Escanear volcados del heap en busca de valores de 8 bytes similares a punteros

Etapa 4: Resolución de la base PIE
  └─ Votar las direcciones filtradas contra los offsets de símbolos ELF (agrupados
     por offset de página, sin conexión — los símbolos se analizan desde la copia local del binario)

Etapa 5: Validación de PIE
  └─ Lectura arbitraria de CurrentUserId en la base candidata → comparar con el OID de la sesión

Etapa 6: Escritura arbitraria
  └─ Forjar MBufs msrc + mdst → sobrescribir CurrentUserId → 10 (superusuario)

Etapa 7: Ejecución de comandos
  └─ COPY FROM PROGRAM → comando arbitrario del SO como usuario postgres

Estructura de archivos

root@kitploit:~
CVE-2026-2005/
├── Dockerfile              # Compila PostgreSQL 18.1 desde el código fuente
├── docker-compose.yml      # Servicio PostgreSQL con reinicio automático
├── init.sh                 # Punto de entrada — initdb + configuración de escucha
├── README.md               # Este archivo
└── poc/
    ├── package.json        # Dependencias de Node.js (pg)
    ├── exploit.js          # Exploit RCE completo de 7 etapas (Node.js)
    ├── verify.sh           # Verificación rápida basada en shell
    └── test-pgcrypto.sql   # Prueba solo SQL de la carga de pgcrypto

Compilación manual (macOS / Linux)

root@kitploit:~
git clone https://github.com/postgres/postgres.git
cd postgres
git checkout 4b324845ba5d24682b9b3708a769f00d160afbd7
./configure \
    --prefix="$HOME/projects/pg/pgsql" \
    --with-libxml \
    --with-libxslt \
    --enable-debug \
    --with-ssl=openssl
make -j$(nproc)
make install-world-bin

Requisitos

  • Docker + Docker Compose (host aarch64, p. ej. Mac con Apple Silicon)
  • Node.js ≥ 18
  • ~2 GB de disco para la compilación de PostgreSQL
  • La compilación tarda ~3–5 minutos en la primera ejecución
  • tmux (opcional — solo se necesita con la bandera --gdb)

Detalles de la vulnerabilidad

El error está en pgp_parse_pubenc_sesskey() en contrib/pgcrypto/pgp-pubdec.c. Al analizar un paquete OpenPGP de clave de sesión cifrada con clave pública (etiqueta 1):

  1. El código lee la longitud del MPI (entero multiprecisión) del paquete
  2. Asigna un búfer basado en esa longitud
  3. Descifra con RSA el MPI en el búfer
  4. Lee la longitud de la clave de sesión de los datos descifrados sin validación de límites
  5. memcpy copia los datos de la clave de sesión en un búfer de tamaño fijo basado en la longitud no validada

El memcpy puede escribir más allá del límite del búfer del heap, corrompiendo metadatos o datos adyacentes del heap, lo que lleva a la ejecución arbitraria de código.

Detalle de la cadena de explotación

  1. Fuga de puntero del heap — Corromper el encabezado del chunk de malloc; analizar el mensaje de error de pfree() para extraer la dirección del heap de mdst->data.
  2. Resolución de la base PIE — Leer /proc/<pid>/maps desde el contenedor Docker para encontrar la dirección de carga del binario de postgres en tiempo de ejecución.
  3. Escritura arbitraria — Forjar ambas estructuras MBuf msrc (origen) y mdst (destino) mediante el desbordamiento del heap. msrc apunta a un paquete symenc incrustado que contiene el OID de superusuario (10); mdst apunta a CurrentUserId - 4 (teniendo en cuenta el encabezado SET_VARSIZE de 4 bytes).
  4. Escalada de privilegios — Con CurrentUserId = 10 (superusuario de arranque), ejecutar COPY FROM PROGRAM para ejecutar comandos arbitrarios del SO.

Opciones de CLI

Notas

  • La extensión pgcrypto es confiable — cualquier usuario con privilegio CREATE (no superusuario) puede instalarla, lo que hace que esto sea explotable con privilegios bajos.
  • La compilación de Docker incluye --enable-debug para facilitar la depuración con gdb.
  • Los offsets del heap (SRC_CHUNK_OFFSET=100, DST_CHUNK_OFFSET=172) son específicos de aarch64 + glibc — otras arquitecturas/asignadores necesitan offsets diferentes.
  • La base PIE se resuelve a partir de los punteros del heap filtrados mediante votación de offsets de símbolos, y luego se confirma leyendo CurrentUserId a través de la misma primitiva de lectura arbitraria.

Referencias

  • Aviso de seguridad de PostgreSQL
  • Informe técnico de ZeroDay.Cloud
  • Entrada de NVD
Descargar herramienta
BanderaPredeterminadoDescripción
--cmdidComando del SO a ejecutar tras una explotación exitosa
--key-size3072Tamaño de la clave RSA en bits
--host127.0.0.1Host de PostgreSQL
--port5432Puerto de PostgreSQL
--userpostgresUsuario de la base de datos
--password(vacío)Contraseña de la base de datos
--dbnamepostgresNombre de la base de datos
--binary./postgresRuta al binario ELF de postgres para los símbolos
--scan-offsetautomáticoSobrescribir el offset de escaneo del heap desde el puntero filtrado
--verbosedesactivadoHabilitar salida de depuración verbosa
--gdbdesactivadoAdjuntar GDB mediante tmux en el punto de desbordamiento