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
Herramientas/GitHubGitHub/ccchme/cve-2018-1058
Escalada de PrivilegiosAnálisis de VulnerabilidadesExplotaciónAprendizaje y EducaciónSeguridad de Bases de DatosLabs y Práctica
GitHubccchme/cve-2018-1058

CVE-2018-1058

Demostración reproducible basada en Docker de la escalada de privilegios de PostgreSQL CVE-2018-1058 mediante ruta de búsqueda no controlada, con comparación de entornos vulnerable y parcheado.

Ver Repositorio
hace 3 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-2018-1058 — Demostración de la Ruta de Búsqueda de PostgreSQL

Este repositorio contiene el informe final y los artefactos de reproducibilidad para:

CVE-2018-1058: Escalada de Privilegios en PostgreSQL mediante una Ruta de Búsqueda No Controlada

El objetivo es demostrar el fallo de confianza en la ruta de búsqueda detrás de CVE-2018-1058 utilizando un entorno Docker local seguro.

La demo no reproduce la ruta de ejecución histórica exacta de pg_dump. En su lugar, reproduce la misma causa raíz descrita en la guía de PostgreSQL: un esquema escribible por un atacante contiene un objeto similar, y otra sesión resuelve un nombre no calificado hacia ese objeto.


1. Contenidos

root@kitploit:~
.
├── report.pdf
├── docker-compose.yml
├── README.md
└── scripts/
    ├── init.sql
    ├── init_safe.sql
    ├── exploit.sql
    ├── victim_query.sql
    ├── verify_qualify.sql
    └── fix.sql

El informe final es report.pdf. Incluye el análisis escrito y las capturas de pantalla correspondientes a las salidas esperadas a continuación.

No se requiere Dockerfile. El proyecto utiliza imágenes oficiales de postgres.

Las capturas de pantalla están incrustadas directamente en report.pdf, por lo que no se proporcionan como archivos de imagen separados.

2. Requisitos

Instalar:

  • Docker
  • Docker Compose
  • cliente psql, opcional pero recomendado

La demo utiliza dos contenedores PostgreSQL:

ServiceVersionContainer nameHost portPurpose
pg_vulnerablePostgreSQL 10.2cve1058_pg_vulnerable15432demostración vulnerable
pg_fixedPostgreSQL 10.3cve1058_pg_fixed15433comparación parcheada/endurecida

Asegúrate de que los puertos 15432 y 15433 estén libres.

Resumen de ejecución rápida

El orden de ejecución esperado es:

  1. Iniciar el servicio vulnerable PostgreSQL 10.2.
  2. Ejecutar exploit.sql como attacker.
  3. Ejecutar victim_query.sql como victim y observar el prefijo CVE-2018-1058 DEMO:.
  4. Ejecutar verify_qualify.sql como victim y observar la salida normal en minúsculas.
  5. Ejecutar fix.sql como postgres.
  6. Volver a ejecutar victim_query.sql y observar la salida normal en minúsculas.
  7. Iniciar el servicio endurecido PostgreSQL 10.3.
  8. Volver a ejecutar exploit.sql en el puerto 15433 y observar permission denied for schema public.

3. Iniciar el entorno vulnerable

root@kitploit:~
docker compose up -d pg_vulnerable
docker compose ps

Resultado esperado: el servicio pg_vulnerable debería estar ejecutándose y mapeado al puerto 15432.

Verificar la versión de PostgreSQL:

root@kitploit:~
docker exec -it cve1058_pg_vulnerable psql -U postgres -d demo_cve1058 -c "SELECT version();"

Resultado esperado: PostgreSQL 10.2.

4. Inspeccionar roles de la base de datos

root@kitploit:~
docker exec -it cve1058_pg_vulnerable psql -U postgres -d demo_cve1058 -c "\du"

Roles esperados:

  • postgres
  • attacker
  • victim

El atacante no es un superusuario de PostgreSQL.

5. Ejecutar el exploit

Ejecutar el script del atacante:

root@kitploit:~
PGPASSWORD='AttackerPw!ChangeMe' \
psql -h 127.0.0.1 -p 15432 -U attacker -d demo_cve1058 \
-v ON_ERROR_STOP=1 -f scripts/exploit.sql

Salida esperada:

root@kitploit:~
CREATE TABLE
GRANT
GRANT
CREATE FUNCTION

Esto crea:

  • una tabla public.exploit_log inofensiva;
  • una función falsa public.lower(varchar).

6. Desencadenar el comportamiento vulnerable como víctima

root@kitploit:~
PGPASSWORD='VictimPw!ChangeMe' \
psql -h 127.0.0.1 -p 15432 -U victim -d demo_cve1058 \
-v ON_ERROR_STOP=1 -f scripts/victim_query.sql

Salida esperada:

root@kitploit:~
CVE-2018-1058 DEMO: Alice Demo
CVE-2018-1058 DEMO: Bob Demo

Esto muestra que la consulta normal de la víctima resolvió lower(...) hacia la función controlada por el atacante.

7. Confirmar el efecto secundario

root@kitploit:~
PGPASSWORD='AttackerPw!ChangeMe' \
psql -h 127.0.0.1 -p 15432 -U attacker -d demo_cve1058 \
-c "TABLE public.exploit_log;"

Resultado esperado: al menos dos filas en public.exploit_log, una por cada fila procesada por la consulta de la víctima.

8. Mostrar la calificación defensiva

root@kitploit:~
PGPASSWORD='VictimPw!ChangeMe' \
psql -h 127.0.0.1 -p 15432 -U victim -d demo_cve1058 \
-v ON_ERROR_STOP=1 -f scripts/verify_qualify.sql

Salida esperada:

root@kitploit:~
alice demo
bob demo

Esto funciona porque pg_catalog.lower(...) obliga a PostgreSQL a usar la función incorporada.

9. Aplicar la corrección en el contenedor vulnerable

root@kitploit:~
PGPASSWORD='postgres' \
psql -h 127.0.0.1 -p 15432 -U postgres -d demo_cve1058 \
-v ON_ERROR_STOP=1 -f scripts/fix.sql

La salida esperada puede incluir:

root@kitploit:~
DROP FUNCTION
DROP TABLE
REVOKE
REVOKE

Luego volver a ejecutar la consulta de la víctima:

root@kitploit:~
PGPASSWORD='VictimPw!ChangeMe' \
psql -h 127.0.0.1 -p 15432 -U victim -d demo_cve1058 \
-v ON_ERROR_STOP=1 -f scripts/victim_query.sql

Salida esperada:

root@kitploit:~
alice demo
bob demo

La función controlada por el atacante ha desaparecido, y la consulta devuelve cadenas normales en minúsculas.

10. Iniciar el entorno endurecido

root@kitploit:~
docker compose up -d pg_fixed
docker compose ps

Verificar la versión:

root@kitploit:~
docker exec -it cve1058_pg_fixed psql -U postgres -d demo_cve1058 -c "SELECT version();"

Resultado esperado: PostgreSQL 10.3.

11. Verificar que el exploit falla en el entorno endurecido

root@kitploit:~
PGPASSWORD='AttackerPw!ChangeMe' \
psql -h 127.0.0.1 -p 15433 -U attacker -d demo_cve1058 \
-v ON_ERROR_STOP=1 -f scripts/exploit.sql

Salida esperada:

root@kitploit:~
ERROR: permission denied for schema public

Esto significa que el atacante no puede crear la función falsa en public, por lo que la cadena de ataque se detiene antes de la resolución de nombres.

12. Limpieza

Para detener los contenedores:

root@kitploit:~
docker compose down

Para eliminar volúmenes y restablecer el proyecto por completo:

root@kitploit:~
docker compose down -v

13. Notas

Esta demo es intencionalmente inofensiva. No roba datos, accede a archivos ni ejecuta comandos del sistema operativo.

El exploit utiliza un prefijo de cadena visible y una tabla de registro para demostrar que PostgreSQL resolvió un nombre de función no calificado hacia un objeto controlado por el atacante.

El CVE oficial se refiere a pg_dump y otras aplicaciones cliente. Este repositorio demuestra el mismo fallo de confianza en la ruta de búsqueda en un entorno de aula seguro y reproducible.

14. Solución de problemas

Si un puerto ya está en uso, detén cualquier servicio local de PostgreSQL o cambia los puertos del host en docker-compose.yml.

Si la salida no coincide con los resultados esperados, restablece el entorno con:

root@kitploit:~
docker compose down -v
docker compose up -d pg_vulnerable

Si psql no está instalado localmente, los comandos de inspección de versión y roles aún se pueden ejecutar con docker exec dentro de los contenedores.

Si el exploit falla en pg_vulnerable, asegúrate de que la base de datos se haya restablecido y de que scripts/exploit.sql se ejecute antes de scripts/fix.sql.

15. Referencias

  • Aviso de CVE-2018-1058 de PostgreSQL: https://www.postgresql.org/support/security/CVE-2018-1058/
  • Wiki de PostgreSQL, A Guide to CVE-2018-1058: https://wiki.postgresql.org/wiki/A_Guide_to_CVE-2018-1058:_Protect_Your_Search_Path
  • Notas de la versión 10.3 de PostgreSQL: https://www.postgresql.org/docs/release/10.3/
  • NVD CVE-2018-1058: https://nvd.nist.gov/vuln/detail/CVE-2018-1058
  • MITRE CVE-2018-1058: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-1058
Descargar herramienta