
Minimale Docker-basierte Reproduktionsumgebung für die OpenSSH 9.1p1 Pre-Auth Double-Free-Schwachstelle (CVE-2023-25136), die Speicherkorruption und Denial-of-Service über einen Python-PoC-Client demonstriert.
Dieses Projekt stellt eine minimale lokale Testumgebung bereit, um die Pre-Auth Double-Free-Speicherfehler-Sicherheitslücke in OpenSSH 9.1p1 (CVE-2023-25136) zu reproduzieren und den Service-Process-Crash (DoS) zu beobachten.
Hinweis: Offizielle und gängige Analysen gehen davon aus, dass diese Sicherheitslücke unter Standard-Sicherheitskonfigurationen „schwer für Remote-Code-Ausführung ausnutzbar“ ist. Diese Umgebung dient hauptsächlich der Demonstration des Speicherfehlers und des Denial-of-Service-Effekts.
Zielrechner (Target):
sshd konfiguriert--with-sandbox=no deaktiviert22, der auf den Host (WSL) auf Port 2222 gemappt istAngreiferrechner (Attacker): – Läuft auf demselben Host / WSL wie der Zielrechner – Verwendet Python3 + , um den PoC auszuführen, eine bestimmte SSH-Client-ID zu erzeugen und einen Pre-Auth-Handshake durchzuführen
paramikoVerzeichnisstruktur:
Dockerfile: Erstellt das Image für die OpenSSH 9.1p1-Sicherheitslückepoc.py: Minimaler PoC-Client zur Auslösung des Pre-Auth-Double-FreeBevor Sie die folgenden Schritte in diesem Verzeichnis ausführen, stellen Sie sicher:
pip sind installiertFühren Sie im aktuellen Verzeichnis aus:
docker build -t sshd-9.1p1-vuln .
docker run --rm -d --name sshd-vuln -p 2222:22 sshd-9.1p1-vuln
Erläuterung:
--rm: Container wird nach Beendigung automatisch gelöscht--name sshd-vuln: Containername-p 2222:22: Port 22 im Container wird auf dem Host auf Port 2222 gemapptdocker ps
Erwartete Ausgabe ähnlich:
CONTAINER ID IMAGE COMMAND STATUS PORTS
xxxxxx sshd-9.1p1-vuln "/usr/sbin/sshd -D…" Up ... 0.0.0.0:2222->22/tcp
Im aktuellen Verzeichnis ausführen:
pip install paramiko
poc.py verwendet paramiko.Transport, um aktiv eine Verbindung zum Ziel-SSH-Server herzustellen, fälscht die Client-ID im Pre-Auth-Zustand und versucht, einen Double-Free auszulösen.
Hauptmerkmale:
127.0.0.1:2222 (lokaler Docker-Container)SSH-2.0-PuTTY_Release_0.64-t/--target: Ziel-IP (Standard 127.0.0.1)-p/--port: Ziel-Port (Standard 2222)-c/--client-id: Gefälschte SSH-Client-ID--timeout: Timeout in Sekunden-v/--verbose: Ausführliche FehlerausgabeStellen Sie sicher, dass der Container sshd-vuln läuft, und führen Sie im aktuellen Verzeichnis aus:
python3 poc.py
Oder mit expliziten Parametern:
python3 poc.py -t 127.0.0.1 -p 2222 -v
Erwartete Beispielausgabe des Clients:
==============================================
CVE-2023-25136 OpenSSH Pre-Auth Double Free
Minimal PoC Client
==============================================
[2024-xx-xx xx:xx:xx] Target: 127.0.0.1:2222, ClientID: SSH-2.0-PuTTY_Release_0.64
[+] Sending crafted pre-auth handshake...
[-] Authentication failed or connection closed early.
Überprüfen Sie die sshd-Protokolle auf dem Zielrechner auf 'free(): double free detected' usw., um zu bestätigen, ob CVE-2023-25136 ausgelöst wurde.
Erläuterung:
Authentication failed oder connection closed, da der Pre-Auth-Subprozess des Servers während der Verarbeitung abstürzen oder die Verbindung aktiv schließen kann.Nach Ausführung des PoC die Container-Logs auf dem Host anzeigen:
docker logs sshd-vuln
Es sollte ähnliche Ausgabe erscheinen:
Server listening on 0.0.0.0 port 22.
Server listening on :: port 22.
Invalid user from 172.17.0.1 port xxxxx
free(): double free detected in tcache 2
Dabei bedeutet:
Invalid user: Da der PoC einen leeren Benutzernamen verwendet, protokolliert OpenSSH einen ungültigen Benutzerversuchfree(): double free detected in tcache 2: glibc erkennt einen double free und beendet den aktuellen sshd-Subprozess – genau das ist der beobachtete Speicherfehler/DoS-Effekt in diesem ExperimentHinweis: Um diese Zeile zu sehen, haben wir beim Bau von OpenSSH den seccomp-Sandbox deaktiviert (
--with-sandbox=no). Andernfalls könnte der Sandbox vor dem Double-Free das anomale Verhalten abfangen und den Subprozess direkt beenden.
sshd-Prozess bleibt bestehen und erzeugt für nachfolgende Verbindungen neue Subprozesse.