Eine Schwachstelle in der Handhabung von SSH-Protokollnachrichten könnte es einem böswilligen Akteur ermöglichen, unbefugten Zugriff auf betroffene Systeme zu erlangen und beliebige Befehle ohne gültige Anmeldedaten im Erlang/OTP-SSH-Server auszuführen
✅ PRE-AUTH RCE BESTÄTIGT — Exploit erfolgreich demonstriert.
📄 Technischer Blog (PDF):CVE-2025-32433-Technical-Blog.pdf
📸 Visuelle Beweise:screenshots/
🔍 Proof-of-Concept-Details:docs/PROOF_OF_CONCEPT.md
CVE-2025-32433 ist eine CVSS 10.0 Kritische Schwachstelle im Erlang/OTP SSH-Daemon. Ein nicht authentifizierter Angreifer kann SSH-Kanäle öffnen und beliebige Befehle ausführen, bevor die Authentifizierung abgeschlossen ist — es werden keinerlei Anmeldedaten benötigt.
Dieses Labor bietet Ihnen eine voll funktionsfähige, isolierte Umgebung, um die Schwachstelle zu reproduzieren, den Exploit auszuführen, ihn zu verifizieren und Erkennungsmechanismen zu testen — alles auf Ihrem lokalen Rechner.
Bevor Sie beginnen, stellen Sie sicher, dass Folgendes installiert ist:
| Werkzeug | Mindestversion | Prüfbefehl |
|---|---|---|
| Docker Desktop | 4.x+ | docker --version |
| Docker Compose | v2.20+ | docker compose version |
| Python | 3.10+ | python --version |
Sie benötigen außerdem die Python-Bibliothek paramiko für die Erkennungssuite:
pip install paramiko
Das Image-Tag
erlang:26.2.5von Docker Hub wurde nach der Offenlegung von CVE-2025-32433 stillschweigend durch die gepatchte Version26.2.5.11ersetzt. Ein Pull von Docker Hub liefert Ihnen die gepatchte Version, nicht die verwundbare.Das
lab/Dockerfiledieses Labs kompiliert OTP 26.2.5 direkt aus dem offiziellen Erlang-GitHub-Release-Tarball, um die echte verwundbare Laufzeitumgebung zu garantieren. Der erste Build dauert etwa 10 Minuten.
┌──────────────────────────────────────────┐
│ Isolated Docker Bridge │
│ (cve-lab-bridge) │
└────┬────────────────────────────┬────────┘
│ │
┌───────────────┴─────────────┐┌─────────────┴──────────────┐
│ target_vulnerable ││ target_patched │
│ OTP 26.2.5 (source-built) ││ erlang:26.2.5.11 │
│ Host Port: 127.0.0.1:2222 ││ Host Port: 127.0.0.1:2223 │
└─────────────────────────────┘└─────────────────────────────┘
│
┌──────────────┴──────────────┐
│ attacker │
│ Python 3 + Scapy/Paramiko │
│ Workdir: /work │
└─────────────────────────────┘
| Container | Port | OTP-Version | Status |
|---|---|---|---|
cve-2025-32433-vulnerable | 127.0.0.1:2222 | 26.2.5 (ERTS 14.2.5) | ❌ Anfällig |
cve-2025-32433-patched | 127.0.0.1:2223 | 26.2.5.11 (ERTS 14.2.5.15) | ✅ Gepatcht |
cve-2025-32433-attacker | Nur intern | Python 3 Tooling | Angreifer-Toolset |
git clone https://github.com/damnkrishna/CVE-2025-32433-LAB.git
cd CVE-2025-32433-LAB
⏱️ Dies dauert ~10 Minuten — es kompiliert Erlang/OTP 26.2.5 aus dem C-Quellcode. Das ist zu erwarten. Unterbrich es nicht.
docker compose build --no-cache target_vulnerable
Sie sehen Compiler-Ausgaben wie make[1]: Leaving directory '/tmp/otp_src_26.2.5/lib/...' —
das ist normal. Es endet mit:
✔ Image ine_cyber_assignment_job-target_vulnerable Built
docker compose build --no-cache target_patched
docker compose up -d target_vulnerable target_patched
docker compose ps
Expected output:
NAME STATUS PORTS
cve-2025-32433-vulnerable Up (healthy) 127.0.0.1:2222->2222/tcp
cve-2025-32433-patched Up (healthy) 127.0.0.1:2223->2222/tcp
Beide Container müssen (healthy) anzeigen, bevor Sie fortfahren.
Bestätigen Sie, dass der Container tatsächlich OTP 26.2.5 ausführt (nicht die gepatchte Version):
docker exec cve-2025-32433-vulnerable cat /usr/local/otp/lib/erlang/releases/RELEASES
Erwartete Ausgabe — muss 14.2.5 OHNE .15-Suffix anzeigen:
[{release,"Erlang/OTP","26","14.2.5",
[{kernel,"9.2.4",...},
Wenn Sie 14.2.5.15 sehen — das Container-Image ist falsch. Bauen Sie es mit --no-cache neu.
Melden Sie sich als legitimer Benutzer an, um zu bestätigen, dass der Server die Standardauthentifizierung akzeptiert:
ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -p 2222 [email protected]
Wenn Sie dazu aufgefordert werden, geben Sie das Passwort ein: LabPass2026!Secured
Sie gelangen in eine Erlang-Shell:
Eshell V14.2.5 (press Ctrl+G to abort, type help(). for help)
1>
Probieren Sie einige Befehle in der Erlang-Shell aus:
ls().
file:write_file("test.txt", "hello").
file:read_file("test.txt").
Um die Erlang-Shell zu verlassen:
q().
Bevor Sie den Exploit ausführen, öffnen Sie ein zweites PowerShell-Terminal und verfolgen Sie das Server-Log:
Get-Content -Path .\logs\target_vulnerable\ssh.log -Wait -Tail 20
Halte dieses Terminal geöffnet. Verbindungsereignisse werden in Echtzeit angezeigt.
Dies ist der Proof of Concept für die Remote-Codeausführung vor der Authentifizierung. Es werden keine Anmeldedaten verwendet.
cd attacker_work\exploit
python payload.py
Expected output:
[*] Connecting to SSH server...
[+] Received banner: SSH-2.0-Erlang/5.1.4
[*] Sending SSH_MSG_KEXINIT...
[*] Sending SSH_MSG_CHANNEL_OPEN...
[*] Sending SSH_MSG_CHANNEL_REQUEST (pre-auth)...
[✓] Exploit sent! If the server is vulnerable, it should have written to /lab.txt.
[+] Received response: 000003d4...
Das Banner muss SSH-2.0-Erlang/5.1.4 anzeigen (ohne .15-Suffix), um zu bestätigen, dass du den verwundbaren Server getroffen hast.
docker exec cve-2025-32433-vulnerable cat /lab.txt
Expected output:
pwned
Wenn du pwned siehst — CVE-2025-32433 Pre-Authentication-RCE ist bestätigt.
Der Exploit hat mit null Anmeldedaten in das Container-Dateisystem geschrieben.
Führe denselben Exploit gegen den gepatchten Container auf Port 2223 aus:
Bearbeite attacker_work\exploit\payload.py Zeile 6:
PORT = 2223 # change from 2222 to 2223
Führen Sie den Exploit aus:
python payload.py
Prüfen Sie dann auf die Datei:
docker exec cve-2025-32433-patched cat /lab.txt
Expected output:
cat: /lab.txt: No such file or directory
Der gepatchte Container weist die unauthentifizierte Kanalanfrage zurück. Keine Datei geschrieben = gepatcht.
Setzen Sie den Port in payload.py nach Abschluss wieder auf 2222 zurück.