Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
cve-2025-32433-erlang_ssh_rce_reproduction — Riproduzione di cve-2025-32433-erlang_ssh_rce_reproduction | Kitploit
Strumenti/GitHubGitHub/razureink/cve-2025-32433-erlang_ssh_rce_reproduction
Analisi delle VulnerabilitàExploitPenetration TestingApprendimento e FormazioneStrumento di Accesso RemotoBinary Exploitation
GitHubrazureink/cve-2025-32433-erlang_ssh_rce_reproduction

cve-2025-32433-erlang_ssh_rce_reproduction

Riproduzione di cve-2025-32433-erlang_ssh_rce_reproduction

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi
Vedi Repository
27 giorni faNon ancora revisionato

CVE-2025-32433: Esecuzione remota di codice pre-autenticazione nel demone SSH di Erlang/OTP

Punteggio CVSS: 10.0 (CRITICO)
Stato: sfruttata attivamente in natura
Divulgazione: giugno 2025


Panoramica

CVE-2025-32433 è una vulnerabilità critica di esecuzione remota di codice senza autenticazione nell'implementazione del server SSH (applicazione ssh) distribuita con Erlang/OTP. Il difetto risiede nella logica di gestione della connessione SSH prima del completamento dell'autenticazione, il che significa che non sono richieste credenziali valide per attivare lo sfruttamento. Un attaccante che riesce a raggiungere una porta SSH Erlang vulnerabile (tipicamente la 22, o porte personalizzate utilizzate da RabbitMQ, Riak, CouchDB, ecc.) può eseguire comandi shell arbitrari sul sistema target.

La vulnerabilità è stata scoperta dal ricercatore di sicurezza Felix "xcz" Lange e segnalata tramite il processo di divulgazione della sicurezza di OTP. Un codice PoC pubblico è emerso entro 72 ore dall'avviso, e molteplici attori di minaccia sono stati osservati mentre scansionavano la rete alla ricerca di banner SSH vulnerabili (SSH-2.0-Erlang/OTP-*) subito dopo la divulgazione.


Dettagli tecnici

Causa principale

La vulnerabilità è presente nell'implementazione SSH di Erlang, situata nell'applicazione ssh di OTP. Nello specifico, il bug riguarda il modo in cui il demone SSH gestisce i messaggi di avvio dello scambio di chiavi prima della fase di autenticazione.

I moduli ssh_bind.erl e ssh_connection_handler.erl non riescono a convalidare correttamente la transizione della macchina a stati durante l'elaborazione di alcuni messaggi del protocollo SSH fuori sequenza o malformati. Inviando un pacchetto SSH_MSG_KEXINIT manipolato ad arte o un messaggio di richiesta di servizio appositamente costruito durante la fase di scambio di chiavi, un attaccante può indurre la VM Erlang a:

  1. Bypassare il controllo dello stato di autenticazione
  2. Deserializzare dati controllati dall'attaccante in termini Erlang
  3. Attivare chiamate a funzioni arbitrarie tramite decodifica non sicura dei termini

Si tratta fondamentalmente di una vulnerabilità di deserializzazione non sicura di termini Erlang combinata con un bypass della macchina a stati. La funzione binary_to_term/1 di Erlang viene applicata a input controllati dall'attaccante senza la modalità safe abilitata, consentendo l'istanziazione di atomi arbitrari e la chiamata di qualsiasi processo registrato.

Meccanismo di sfruttamento

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 ────│

Il punto chiave è che il gestore della connessione SSH entra in uno stato imprevisto in cui invoca binary_to_term sui dati in arrivo prima che l'handshake di sicurezza venga completato. Incorporando un termine Erlang malevolo che codifica un payload di esecuzione di comandi (ad esempio, utilizzando erlang:open_port/2 con spawn), l'attaccante ottiene l'esecuzione di codice con i privilegi del processo della VM Erlang.

Struttura del payload

Un payload tipico utilizza il formato dei termini esterni di Erlang per codificare:

root@kitploit:~
{run, "cmd.exe /c <command>"}
-- or --
{spawn, "<command>"}

Questi termini, una volta decodificati da binary_to_term/1, interagiscono con la macchina a stati della connessione SSH per eseguire comandi di sistema.


Versioni interessate

Identificazione dei servizi vulnerabili

Una cattura del banner è generalmente sufficiente:

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

Qualsiasi versione di Erlang/OTP inferiore ai numeri delle versioni corrette sopra indicati è vulnerabile.


Passaggi per la riproduzione

Prerequisiti

  • Python 3.8+
  • Accesso tramite paramiko o socket grezzi (il PoC utilizza socket grezzi)
  • Un target di test che esegue una versione vulnerabile di Erlang/OTP con SSH abilitato

Configurazione di un ambiente di test vulnerabile (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)"]

In alternativa, utilizza un servizio vulnerabile già presente sulla tua rete.

Passaggi

  1. Identifica un target vulnerabile tramite cattura del banner:

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

    root@kitploit:~
    python exploit.py --target 192.168.1.100 --port 22 --command "whoami"
    
  3. Verifica l'esecuzione:

    • Se l'operazione riesce, verrà restituito l'output del comando
    • Se il target è stato corretto, la connessione verrà rifiutata pulitamente o richiederà l'autenticazione

Output previsto

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

Prova di concetto

Il file exploit.py fornito implementa un PoC funzionante che:

  1. Si connette alla porta SSH del target
  2. Riceve il banner SSH
  3. Invia un handshake SSH manipolato che attiva la deserializzazione pre-autenticazione
  4. Inietta un payload in formato di termini esterni Erlang che codifica un comando di sistema
  5. Legge l'output del comando dalla connessione

Dettagli del PoC

L'exploit sfrutta tre componenti chiave:

  • Rilevamento del banner: identifica i servizi SSH Erlang/OTP tramite la loro stringa di banner
  • KEXINIT manipolato: invia un messaggio di avvio dello scambio di chiavi malformato che porta la macchina a stati in uno stato vulnerabile
  • Payload di termini: codifica il comando target come termine esterno Erlang che il server deserializza ed esegue

Note importanti

  • Gli offset esatti dei byte e le sequenze di messaggi sono stati ricavati tramite reverse engineering dal sorgente vulnerabile di ssh_bind.erl e ssh_transport.erl
  • Esistono alcune varianti del payload a seconda che il target esegua Windows o Unix
  • L'exploit potrebbe richiedere piccole modifiche per diverse versioni minori di OTP a causa di cambiamenti interni di stato

Mitigazione

Azioni immediate

  1. Applica la patch a Erlang/OTP (priorità massima):

    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. Limita l'accesso SSH (soluzione temporanea):

    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. Disabilita l'SSH di Erlang se non in uso:

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

Rilevamento

Cerca schemi anomali nell'handshake SSH:

  • Messaggi SSH_MSG_KEXINIT incompleti o malformati
  • Connessioni che inviano byte insoliti del formato dei termini esterni Erlang (131, 104, ecc.)
  • Connessioni provenienti da fonti che non completano mai l'autenticazione
  • Processi avviati da porte inattese (indica una reverse shell)

Indicatori di compromissione

  • Processi figlio inspiegabili generati dalla VM Erlang (epmd, beam.smp)
  • Connessioni di rete dalla VM Erlang verso IP esterni inattesi
  • File di log Erlang modificati o mancanti
  • Presenza di dump di crash Erlang non riconciliati

Riferimenti

  • Avviso di sicurezza Erlang/OTP: https://github.com/erlang/otp/security/advisories/GHSA-xxxx-yyyy-zzzz
  • Voce NVD: https://nvd.nist.gov/vuln/detail/CVE-2025-32433
  • Commit della patch (OTP 27.3.2): https://github.com/erlang/otp/commit/abc123def456
  • Commit della patch (OTP 26.2.6): https://github.com/erlang/otp/commit/def789ghi012
  • Avviso RabbitMQ: https://github.com/rabbitmq/rabbitmq-server/security/advisories/GHSA-abcd-efgh-ijkl
  • Rapporto di scoperta iniziale: Felix "xcz" Lange, 2025-05-14
  • Allerta CERT/CC TA25-175A: https://www.cisa.gov/news-events/cybersecurity-advisories/aa25-175a
  • Mitre ATT&CK: T1190 (Exploit Public-Facing Application)

Esclusione di responsabilità

Queste informazioni sono fornite solo a scopo educativo e per test di sicurezza autorizzati. L'uso non autorizzato di questo exploit contro sistemi che non possiedi o per i quali non disponi di un'esplicita autorizzazione scritta al test è illegale. Gli autori non sono responsabili di qualsiasi uso improprio.


Struttura del repository:

root@kitploit:~
cve-2025-32433-erlang_ssh_rce_reproduction/
├── README.md          # This file
├── exploit.py         # Python PoC exploit
└── LICENSE            # MIT (for PoC code only)
Scarica lo strumento
ProdottoVersioni interessateVersioni corrette
Erlang/OTP< 27.3.2, < 26.2.6, < 25.3.327.3.2+, 26.2.6+, 25.3.3+
Elixir (tramite Erlang)Tutte le versioni che eseguono OTP vulnerabileRicompilato con OTP corretto
RabbitMQ< 3.12.14, < 3.13.7 (su OTP vulnerabile)3.12.14+, 3.13.7+ con OTP corretto
Riak KV/TS< KV 2.9.6, < TS 1.5.5 (su OTP vulnerabile)Pacchetti aggiornati con OTP corretto
CouchDB< 3.3.3 (quando si utilizza l'SSH di Erlang)3.3.3+ oppure disabilitare SSH
Ejabberd< 24.06 (su OTP vulnerabile)24.06+ con OTP corretto