Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
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é.

FluxContactConfidentialité© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
cve-2025-32433-erlang_ssh_rce_reproduction — Reproduction de cve-2025-32433-erlang_ssh_rce_reproduction | Kitploit
Outils/GitHubGitHub/razureink/cve-2025-32433-erlang_ssh_rce_reproduction
Analyse des VulnérabilitésExploitationTests d'IntrusionApprentissage et ÉducationOutil d'Accès à DistanceExploitation de Binaires
GitHubrazureink/cve-2025-32433-erlang_ssh_rce_reproduction

cve-2025-32433-erlang_ssh_rce_reproduction

Reproduction de cve-2025-32433-erlang_ssh_rce_reproduction

Voir le dépôt
21il y a 3 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

CVE-2025-32433 : Exécution de code à distance avant authentification dans le démon SSH Erlang/OTP

Score CVSS : 10.0 (CRITIQUE)
Statut : Activement exploité dans la nature
Divulgation : juin 2025


Vue d'ensemble

CVE-2025-32433 est une vulnérabilité critique d'exécution de code à distance non authentifiée dans l'implémentation du serveur SSH (application ssh) fournie avec Erlang/OTP. La faille réside dans la logique de gestion des connexions SSH avant la fin de l'authentification, ce qui signifie qu'aucun identifiant valide n'est requis pour déclencher l'exploitation. Un attaquant qui peut atteindre un port SSH Erlang vulnérable (généralement 22, ou des ports personnalisés utilisés par RabbitMQ, Riak, CouchDB, etc.) peut exécuter des commandes shell arbitraires sur le système cible.

La vulnérabilité a été découverte par le chercheur en sécurité Felix "xcz" Lange et signalée dans le cadre du processus de divulgation de sécurité d'OTP. Un code PoC public est apparu dans les 72 heures suivant l'avis, et plusieurs acteurs malveillants ont été observés en train de scanner les bannières SSH vulnérables (SSH-2.0-Erlang/OTP-*) immédiatement après la divulgation.


Détails techniques

Cause racine

La vulnérabilité se situe dans l'implémentation SSH d'Erlang, dans l'application ssh d'OTP. Plus précisément, le bogue se trouve dans la façon dont le démon SSH gère les messages d'initiation d'échange de clés avant la phase d'authentification.

Les modules ssh_bind.erl et ssh_connection_handler.erl ne valident pas correctement la transition de la machine à états lors du traitement de certains messages de protocole SSH hors ordre ou malformés. En envoyant un paquet SSH_MSG_KEXINIT contrefait ou un message de demande de service spécialement construit pendant la phase d'échange de clés, un attaquant peut amener la VM Erlang à :

  1. Contourner la vérification de l'état d'authentification
  2. Désérialiser des données contrôlées par l'attaquant en termes Erlang
  3. Déclencher des appels de fonctions arbitraires via un décodage non sûr de termes

Il s'agit fondamentalement d'une vulnérabilité de désérialisation non sûre de termes Erlang associée à un contournement de la machine à états. La fonction binary_to_term/1 d'Erlang est utilisée sur des entrées contrôlées par l'attaquant sans que le mode safe soit activé, ce qui permet l'instanciation d'atomes arbitraires et l'appel de tout processus enregistré.

Mécanisme d'exploitation

Attacker                        Vulnerable Erlang SSH Server
   │                                      │
   │──── TCP Connect (port 22) ──────────→│
   │                                      │
   │←── SSH-2.0-Erlang/OTP-26.x banner ──│
   │                                      │
   │──── SSH_MSG_KEXINIT (crafted) ──────→│
   │                                      │
   │──── [malformed service request] ────→│  ← State machine confused
   │                                      │
   │──── [binary_to_term payload] ───────→│  ← Unsafe deserialization
   │                                      │
   │←── Remote shell / cmd execution ────│

Le point clé est que le gestionnaire de connexion SSH entre dans un état inattendu où il appelle binary_to_term sur les données entrantes avant la fin de la poignée de main de sécurité. En intégrant un terme Erlang malveillant qui encode une charge utile d'exécution de commande (par exemple, en utilisant erlang:open_port/2 avec spawn), l'attaquant obtient l'exécution de code avec les privilèges du processus de la VM Erlang.

Structure de la charge utile

Une charge utile typique utilise le format de terme externe d'Erlang pour encoder :

{run, "cmd.exe /c <command>"}
-- or --
{spawn, "<command>"}

Une fois décodés par binary_to_term/1, ces termes interagissent avec la machine à états de la connexion SSH pour exécuter des commandes système.


Versions concernées

ProduitVersions concernéesVersions corrigées
Erlang/OTP< 27.3.2, < 26.2.6, < 25.3.327.3.2+, 26.2.6+, 25.3.3+
Elixir (via Erlang)Toutes les versions utilisant un OTP vulnérableRecompilé avec un OTP corrigé
RabbitMQ< 3.12.14, < 3.13.7 (sur OTP vulnérable)3.12.14+, 3.13.7+ avec un OTP corrigé
Riak KV/TS< KV 2.9.6, < TS 1.5.5 (sur OTP vulnérable)Paquets mis à jour avec un OTP corrigé
CouchDB< 3.3.3 (lors de l'utilisation du SSH Erlang)3.3.3+ ou désactiver SSH
Ejabberd< 24.06 (sur OTP vulnérable)24.06+ avec un OTP corrigé

Identifier les services vulnérables

Une récupération de bannière est généralement suffisante :

# A vulnerable service responds with:
SSH-2.0-Erlang/OTP-26.1
SSH-2.0-Erlang/OTP-25.2
SSH-2.0-Erlang/OTP-27.0

# A patched service responds with:
SSH-2.0-Erlang/OTP-26.2.6
SSH-2.0-Erlang/OTP-27.3.2

Toute version d'Erlang/OTP inférieure aux numéros corrigés ci-dessus est vulnérable.


Étapes de reproduction

Prérequis

  • Python 3.8+
  • Accès paramiko ou socket brut (le PoC utilise des sockets bruts)
  • Une cible de test exécutant une version vulnérable d'Erlang/OTP avec SSH activé

Mise en place d'un environnement de test vulnérable (Docker)

# Build a vulnerable Erlang container
FROM erlang:26.1-alpine
RUN echo "root:toor" | chpasswd && \
    echo "PermitRootLogin yes" >> /etc/ssh/sshd_config
CMD ["erlexec", "ssh:daemon(8222)"]

Ou utilisez un service vulnérable existant sur votre réseau.

Étapes

  1. Identifiez une cible vulnérable via la récupération de bannière :

    nc -w 3 <target> 22
    # Look for: SSH-2.0-Erlang/OTP-
    
  2. Exécutez l'exploit PoC :

    python exploit.py --target 192.168.1.100 --port 22 --command "whoami"
    
  3. Vérifiez l'exécution :

    • En cas de succès, la sortie de la commande sera renvoyée
    • Si la cible est corrigée, la connexion sera proprement refusée ou authentifiée

Sortie attendue

[+] CVE-2025-32433 Erlang/OTP SSH Pre-Auth RCE
[+] Target: 192.168.1.100:22
[+] Banner: SSH-2.0-Erlang/OTP-26.1
[+] Triggering vulnerability...
[+] Payload sent.
[+] Response: root
[!] Exploit succeeded

Preuve de concept

Le exploit.py fourni implémente un PoC fonctionnel qui :

  1. Se connecte au port SSH cible
  2. Reçoit la bannière SSH
  3. Envoie une poignée de main SSH contrefaite qui déclenche la désérialisation avant authentification
  4. Injecte une charge utile de terme externe Erlang encodant une commande système
  5. Lit la sortie de commande de la connexion

Détails du PoC

L'exploit s'appuie sur trois composants clés :

  • Détection de bannière : Identifie les services SSH Erlang/OTP par leur chaîne de bannière
  • KEXINIT contrefait : Envoie un message d'initiation d'échange de clés malformé qui place la machine à états dans un état vulnérable
  • Charge utile de terme : Encode la commande cible sous forme de terme externe Erlang que le serveur désérialise et exécute

Remarques importantes

  • Les décalages d'octets et les séquences de messages exacts ont été obtenus par rétro-ingénierie sur les sources vulnérables ssh_bind.erl et ssh_transport.erl
  • Certaines variantes de charge utile existent selon que la cible fonctionne sous Windows ou Unix
  • L'exploit peut nécessiter des ajustements mineurs pour différentes versions mineures d'OTP en raison de changements d'état internes

Atténuation

Actions immédiates

Télécharger l’outil