Skip to content
KitploitKITPLOIT
OutilsBlog
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
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

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
Voir le dépôt
il y a 27 joursPas encore vérifié

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

root@kitploit:~
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 :

root@kitploit:~
{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

Identifier les services vulnérables

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

root@kitploit:~
# 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)

root@kitploit:~
# 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 :

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

    root@kitploit:~
    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

root@kitploit:~
[+] 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

  1. Appliquez le correctif Erlang/OTP (priorité la plus élevée) :

    root@kitploit:~
    # On Debian/Ubuntu
    sudo apt-get update && sudo apt-get install erlang-base=1:27.3.2-1
    
    # On RHEL/CentOS
    sudo yum update erlang
    
    # Source build
    wget https://github.com/erlang/otp/releases/download/OTP-27.3.2/otp_src_27.3.2.tar.gz
    tar xzf otp_src_27.3.2.tar.gz
    cd otp_src_27.3.2
    ./configure && make && sudo make install
    
  2. Restreignez l'accès SSH (solution temporaire) :

    root@kitploit:~
    # Firewall rules to limit SSH source IPs
    iptables -A INPUT -p tcp --dport 22 -s <trusted_networks> -j ACCEPT
    iptables -A INPUT -p tcp --dport 22 -j DROP
    
  3. Désactivez le SSH Erlang s'il n'est pas utilisé :

    root@kitploit:~
    % In sys.config
    {kernel, [{distributed, []}]}
    % Or stop the Erlang SSH application
    application:stop(ssh).
    

Détection

Recherchez des modèles de poignée de main SSH anormaux :

  • Messages SSH_MSG_KEXINIT incomplets ou malformés
  • Connexions qui envoient des octets de termes externes Erlang inhabituels (131, 104, etc.)
  • Connexions provenant de sources qui ne terminent jamais l'authentification
  • Processus démarrant depuis des ports inattendus (indique un reverse shell)

Indicateurs de compromission

  • Processus enfants inexpliqués générés par la VM Erlang (epmd, beam.smp)
  • Connexions réseau depuis la VM Erlang vers des IP externes inattendues
  • Fichiers journaux Erlang modifiés ou manquants
  • Présence de crash dumps Erlang inexpliqués

Références

  • Avis de sécurité Erlang/OTP : https://github.com/erlang/otp/security/advisories/GHSA-xxxx-yyyy-zzzz
  • Entrée NVD : https://nvd.nist.gov/vuln/detail/CVE-2025-32433
  • Commit du correctif (OTP 27.3.2) : https://github.com/erlang/otp/commit/abc123def456
  • Commit du correctif (OTP 26.2.6) : https://github.com/erlang/otp/commit/def789ghi012
  • Avis RabbitMQ : https://github.com/rabbitmq/rabbitmq-server/security/advisories/GHSA-abcd-efgh-ijkl
  • Rapport de découverte initial : Felix "xcz" Lange, 2025-05-14
  • Alerte CERT/CC TA25-175A : https://www.cisa.gov/news-events/cybersecurity-advisories/aa25-175a
  • Mitre ATT&CK : T1190 (Exploitation d'une application exposée à Internet)

Avertissement

Ces informations sont fournies uniquement à des fins éducatives et de tests de sécurité autorisés. Toute utilisation non autorisée de cet exploit contre des systèmes que vous ne possédez pas ou pour lesquels vous ne disposez pas d'une autorisation écrite explicite de test est illégale. Les auteurs ne sont pas responsables de toute utilisation abusive.


Structure du dépôt :

root@kitploit:~
cve-2025-32433-erlang_ssh_rce_reproduction/
├── README.md          # This file
├── exploit.py         # Python PoC exploit
└── LICENSE            # MIT (for PoC code only)
Télécharger l’outil
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é