Una falla nella gestione dei messaggi del protocollo SSH: un attore malintenzionato potrebbe ottenere accesso non autorizzato ai sistemi interessati ed eseguire comandi arbitrari senza credenziali valide nel server SSH Erlang/OTP
✅ RCE PRE-AUTH CONFERMATA — Exploit dimostrato con successo.
📄 Blog tecnico (PDF):CVE-2025-32433-Technical-Blog.pdf
📸 Evidenza visiva:screenshots/
🔍 Dettagli della proof of concept:docs/PROOF_OF_CONCEPT.md
CVE-2025-32433 è una vulnerabilità Critica con CVSS 10.0 nel daemon SSH di Erlang/OTP. Un attaccante non autenticato può aprire canali SSH ed eseguire comandi arbitrari prima di completare l'autenticazione — nessuna credenziale richiesta.
Questo laboratorio ti fornisce un ambiente isolato e completamente funzionante per riprodurre la vulnerabilità, eseguire l'exploit, verificarlo e testare i meccanismi di rilevamento — tutto sulla tua macchina locale.
Prima di iniziare, assicurati di avere installato quanto segue:
| Strumento | Versione minima | Comando di verifica |
|---|---|---|
| Docker Desktop | 4.x+ | docker --version |
| Docker Compose | v2.20+ | docker compose version |
| Python | 3.10+ | python --version |
Hai inoltre bisogno della libreria Python paramiko per la suite di rilevamento:
pip install paramiko
Il tag dell'immagine
erlang:26.2.5su Docker Hub è stato sovrascritto silenziosamente con la release corretta26.2.5.11dopo la divulgazione di CVE-2025-32433. Eseguendo il pull da Docker Hub si ottiene la versione corretta, non quella vulnerabile.Il
lab/Dockerfiledi questo laboratorio compila OTP 26.2.5 direttamente dal tarball ufficiale della release Erlang su GitHub per garantire il runtime vulnerabile autentico. La prima compilazione richiede circa 10 minuti.
┌──────────────────────────────────────────┐
│ 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 | Porta | Versione OTP | Stato |
|---|---|---|---|
cve-2025-32433-vulnerable | 127.0.0.1:2222 | 26.2.5 (ERTS 14.2.5) | ❌ Vulnerabile |
cve-2025-32433-patched | 127.0.0.1:2223 | 26.2.5.11 (ERTS 14.2.5.15) | ✅ Corretto |
cve-2025-32433-attacker | Solo interno | Strumenti Python 3 | Set di strumenti dell'attaccante |
git clone https://github.com/damnkrishna/CVE-2025-32433-LAB.git
cd CVE-2025-32433-LAB
⏱️ Questa operazione richiede ~10 minuti — compila Erlang/OTP 26.2.5 dal codice sorgente C. È previsto. Non interromperla.
docker compose build --no-cache target_vulnerable
Vedrai output del compilatore come make[1]: Leaving directory '/tmp/otp_src_26.2.5/lib/...' —
questo è normale. Termina con:
✔ 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
I cannot produce a translation because no source content was provided. The "INPUT:" section is empty—there is no Markdown text to translate.
Please send the actual chunk 17 content, and I will return only the translated Markdown.
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
Entrambi i container devono mostrare (healthy) prima di continuare.
Conferma che il container stia effettivamente eseguendo OTP 26.2.5 (non la versione corretta):
docker exec cve-2025-32433-vulnerable cat /usr/local/otp/lib/erlang/releases/RELEASES
Output atteso — deve mostrare 14.2.5 SENZA suffisso .15:
[{release,"Erlang/OTP","26","14.2.5",
[{kernel,"9.2.4",...},
Se vedi 14.2.5.15 — l'immagine del container è errata. Ricostruisci con --no-cache.
Connettiti come utente legittimo per confermare che il server accetta l'autenticazione standard:
ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -p 2222 [email protected]
Quando richiesto, inserisci la password: LabPass2026!Secured
Ti ritroverai in una shell Erlang:
Eshell V14.2.5 (press Ctrl+G to abort, type help(). for help)
1>
Prova alcuni comandi all'interno della shell Erlang:
ls().
file:write_file("test.txt", "hello").
file:read_file("test.txt").
Per uscire dalla shell Erlang:
q().
Prima di eseguire l'exploit, aprire un secondo terminale PowerShell e seguire in tempo reale il log del server:
Get-Content -Path .\logs\target_vulnerable\ssh.log -Wait -Tail 20
Tieni questo terminale aperto. Vedrai gli eventi di connessione apparire in tempo reale.
Questa è la proof of concept di esecuzione di codice in remoto pre-autenticazione. Non vengono utilizzate credenziali.
cd attacker_work\exploit
python payload.py
I cannot produce a translation because no source content was provided. The "INPUT:" section is empty—there is no Markdown text to translate.
Please send the actual chunk 17 content, and I will return only the translated Markdown.
[*] 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...
Il banner deve mostrare SSH-2.0-Erlang/5.1.4 (senza suffisso .15) per confermare che hai raggiunto il server vulnerabile.
docker exec cve-2025-32433-vulnerable cat /lab.txt
I cannot produce a translation because no source content was provided. The "INPUT:" section is empty—there is no Markdown text to translate.
Please send the actual chunk 17 content, and I will return only the translated Markdown.
pwned
Se vedi pwned — la RCE pre-autenticazione CVE-2025-32433 è confermata.
L'exploit ha scritto nel filesystem del container senza alcuna credenziale.
Esegui lo stesso exploit contro il container con patch sulla porta 2223: