
Ce document présente une analyse de la vulnérabilité CVE-2025-32433, qui affecte l'implémentation du serveur SSH intégré à la plateforme Erlang/OTP.
Cette vulnérabilité permet l'exécution de code arbitraire à distance (Remote Code Execution, RCE) sans authentification et affecte plusieurs branches d'Erlang/OTP jusqu'à la sortie des correctifs :
Erlang/OTP est largement utilisé comme fondation pour des systèmes distribués extensibles et fait partie de la pile technologique de nombreux projets connus (par exemple, messageries, courtiers de messages, services web à forte charge).
La présence d'une vulnérabilité RCE critique dans la bibliothèque SSH de base compromet les infrastructures qui utilisent Erlang/OTP comme serveur ou comme composant avec un accès SSH ouvert.
Examiner la vulnérabilité pas à pas et démontrer le cycle complet d'analyse :
Collecte et structuration des informations :
Trouver et systématiser les données publiquement disponibles sur CVE-2025-32433, décrire l'essence et l'impact potentiel.
Détermination des CPE et des conditions de configuration :
Fournir la liste des CPE et des conditions de configuration pour lesquelles la vulnérabilité est pertinente.
Développement du PoC/Exploit :
Créer et démontrer un prototype d'exploitation fonctionnel dans un environnement de test.
Méthodes de vérification massive sécurisée :
Décrire trois façons de vérifier les hôtes vulnérables :
Cette analyse est menée exclusivement à des fins éducatives et éthiques et a été réalisée uniquement dans un environnement de test contrôlé.
L'auteur n'assume aucune responsabilité en cas d'utilisation abusive des informations présentées.
Utilisez ces informations uniquement pour apprendre et renforcer la sécurité de vos systèmes.
Erlang est un langage de programmation conçu pour construire des systèmes hautement parallèles et tolérants aux pannes.
Sa plateforme Open Telecom Platform (OTP) est utilisée depuis de nombreuses années dans des infrastructures critiques — des télécommunications au secteur financier.
Dans les environnements OT (technologies opérationnelles) et dans les réseaux 5G, Erlang/OTP est apprécié pour son extensibilité et sa capacité à assurer le fonctionnement continu des systèmes avec un minimum d'interruptions.
Pour l'administration à distance, ces réseaux utilisent souvent l'implémentation SSH intégrée à Erlang/OTP.
C'est précisément ce qui rend la vulnérabilité CVE-2025-32433 particulièrement dangereuse pour ces environnements.
Les interactions sécurisées dans Erlang/OTP sont assurées par son implémentation propre de SSH, qui :
La vulnérabilité de cette implémentation permet à un attaquant disposant d'un accès réseau d'exécuter du code arbitraire sans authentification, ce qui constitue une menace directe pour les actifs vulnérables.
Selon un scan internet mondial (Cortex Xpanse, avril 2025), les services Erlang/OTP SSH vulnérables sont largement accessibles sur internet et fonctionnent non seulement sur les ports standard, mais aussi, par exemple, sur le port TCP 2222.
Ce port est fréquemment utilisé par des composants obsolètes d'automatisation industrielle et par le protocole de messagerie implicite Ethernet/IP, ce qui élargit le vecteur d'attaque potentiel.
La vulnérabilité est liée aux versions SSH incluses dans les versions d'Erlang/OTP.
La présence de services vulnérables sur des ports caractéristiques de divers secteurs crée une importante surface d'attaque mondiale.
La télémétrie a montré que plus de 85 % des tentatives d'exploitation ont été enregistrées sur les pare-feux du segment OT dans les domaines suivants :
En revanche, malgré une forte dépendance à l'OT, dans les secteurs :
aucun facteur favorisant la propagation active de cette menace particulière n'a été identifié.
CVE-2025-32433 est enregistrée dans la base NVD avec les CPE (Common Platform Enumeration) types suivants :
cpe:2.3:a:erlang:otp:25:*:*:*:*:*:*:*cpe:2.3:a:erlang:otp:26:*:*:*:*:*:*:*cpe:2.3:a:erlang:otp:27:*:*:*:*:*:*:*Sont considérés comme vulnérables les versions mineures antérieures aux versions corrigées suivantes :
- 25.x — jusqu'à 25.3.2.20 inclus
- 26.x — jusqu'à 26.2.5.11 inclus
- 27.x — jusqu'à 27.3.3 inclus
ssh:daemon/2), et non un openssh externe.22 ou un port personnalisé, par exemple 2222) doit être accessible pour des connexions distantes depuis le réseau de l'attaquant.ssh:daemon/2.⚠️ Si Erlang/OTP est utilisé uniquement comme bibliothèque cliente sans serveur SSH actif, ou si le serveur est confiné dans un réseau isolé, la vulnérabilité n'est pas exploitable.
La vulnérabilité provient du fait que le serveur SSH intégré d'Erlang/OTP traite incorrectement le processus de pré-authentification.
Deux types de messages du protocole de connexion jouent un rôle clé — SSH_MSG_CHANNEL_OPEN et SSH_MSG_CHANNEL_REQUEST.
Selon la norme RFC 4254, ces messages ne doivent être acceptés qu'après une authentification réussie de l'utilisateur.
Toute tentative de les envoyer plus tôt doit immédiatement entraîner la rupture de la connexion.
Dans le cas de CVE-2025-32433, le démon SSH ne fait pas respecter cette règle, ce qui permet à un attaquant d'ouvrir un canal de session et d'envoyer une requête exec avec une commande arbitraire sans fournir d'identifiants valides.
En d'autres termes, cela conduit à une exécution de code à distance (RCE) non authentifiée — l'attaquant peut prendre le contrôle du serveur sans connaître ni le nom d'utilisateur, ni le mot de passe, ni la clé.

Le protocole SSH Connection fonctionne au-dessus des couches de transport et d'authentification SSH.
Il fournit les fonctions de connexion interactive, d'exécution de commandes à distance et de redirection de ports.
Dans l'implémentation vulnérable de SSH dans Erlang/OTP, ce sont précisément les deux messages — SSH_MSG_CHANNEL_OPEN et SSH_MSG_CHANNEL_REQUEST, nécessaires à l'initiation d'un canal et à la demande de commandes, qui deviennent le point d'attaque :
l'attaquant peut envoyer un trafic spécialement conçu qui trompe le système pour exécuter du code arbitraire avant l'authentification.

Dans le cadre de cette analyse, un Proof-of-Concept fonctionnel pour CVE-2025-32433 a été préparé.
CVE-2025-32433.py — script Python qui construit manuellement les paquets SSH
(SSH_MSG_KEXINIT, SSH_MSG_CHANNEL_OPEN, SSH_MSG_CHANNEL_REQUEST) et
les envoie avant l'authentification.
Cela permet, sur les versions vulnérables d'Erlang/OTP, d'exécuter une commande arbitraire
côté serveur — dans le PoC, elle crée le fichier /lab.txt avec le texte cyberok.
ssh_server.erl — module Erlang minimal qui démarre le démon
SSH OTP intégré sur le port 2222. Il n'est nécessaire que pour la démonstration
et est lancé dans un conteneur Docker.
Dockerfile — recette de construction du conteneur, dans lequel la version
indiquée d'Erlang/OTP est automatiquement compilée et le serveur
SSH de test est démarré.
⚠️ Ce PoC est destiné exclusivement aux tests locaux et à des fins éducatives. Ne pas l'utiliser dans des réseaux de production ou accessibles au public.
Construisez l'image :
git clone https://github.com/iteride/CVE-2025-32433.git && cd CVE-2025-32433/POC/ && docker build -t cve-ssh .

Lancez l'image
docker run -d --name cve-ssh -p 2222:2222 cve-ssh
Démonstration du POC

Le modèle passif recherche les signes indirects de vulnérabilité, sans effectuer de véritables actions d'attaque.
Il analyse uniquement les informations « superficielles » que le service divulgue lui-même :
Si une version vulnérable est détectée (par exemple, OTP 25.3.2.19 ou 26.2.5.10), nuclei marque l'hôte comme potentiellement vulnérable.
⚠️ Cette approche est sûre : aucun paquet malveillant ni tentative d'exploitation n'est effectué.
nuclei -u 127.0.0.1:2222 -t erlang-passive.yaml
Le modèle actif effectue une simulation d'attaque contrôlée :
il envoie des paquets SSH spécialement conçus avant l'authentification et vérifie si la vulnérabilité se déclenche.
Pour constater l'exploitation, Interactsh est utilisé — si le serveur distant a exécuté la requête malveillante, un DNS-callback apparaît dans le panneau Interactsh.
✅ Ce test confirme la possibilité réelle d'exécution de code à distance (RCE),
mais il n'est effectué que dans un environnement de test isolé.
nuclei -u 127.0.0.1:2222 -t erlang-active.yaml -code
Différences par rapport au nuclei-template :
Lancement du script
⚠️ Avant le lancement, assurez-vous que interactsh-client est installé et démarré.
python3 babyfon.py -f targets.txt -d your.interactsh_domain

Après le lancement, vérifiez les interactions DNS dans interactsh-client. (Dans l'exemple, deux cibles sont analysées : l'une est vulnérable, l'autre est déjà corrigée)



Conclusion des tests :