Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
cve-2025-32433-erlang_ssh_rce_reproduction — Reproducción de cve-2025-32433-erlang_ssh_rce_reproduction | Kitploit
Herramientas/GitHubGitHub/razureink/cve-2025-32433-erlang_ssh_rce_reproduction
Análisis de VulnerabilidadesExplotaciónPruebas de PenetraciónAprendizaje y EducaciónHerramienta de Acceso RemotoExplotación de Binarios
GitHubrazureink/cve-2025-32433-erlang_ssh_rce_reproduction

cve-2025-32433-erlang_ssh_rce_reproduction

Reproducción de cve-2025-32433-erlang_ssh_rce_reproduction

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir
Ver Repositorio
hace 27 díasAún no revisado

CVE-2025-32433: Ejecución remota de código pre-autenticación en el daemon SSH de Erlang/OTP

Puntuación CVSS: 10.0 (CRÍTICA)
Estado: Explotada activamente en la naturaleza
Divulgación: junio de 2025


Descripción general

CVE-2025-32433 es una vulnerabilidad crítica de ejecución remota de código no autenticada en la implementación del servidor SSH (aplicación ssh) incluida en Erlang/OTP. La falla reside en la lógica de manejo de conexiones SSH antes de que se complete la autenticación, lo que significa que no se requieren credenciales válidas para desencadenar la explotación. Un atacante que pueda alcanzar un puerto SSH de Erlang vulnerable (normalmente el 22, o puertos personalizados utilizados por RabbitMQ, Riak, CouchDB, etc.) puede ejecutar comandos arbitrarios de shell en el sistema objetivo.

La vulnerabilidad fue descubierta por el investigador de seguridad Felix "xcz" Lange y reportada a través del proceso de divulgación de seguridad de OTP. El código PoC público apareció dentro de las 72 horas posteriores al aviso, y se observó a múltiples actores de amenazas escaneando banners SSH vulnerables (SSH-2.0-Erlang/OTP-*) inmediatamente después de la divulgación.


Detalles técnicos

Causa raíz

La vulnerabilidad existe en la implementación SSH de Erlang ubicada en la aplicación ssh de OTP. Específicamente, el error está en cómo el daemon SSH maneja los mensajes de inicio del intercambio de claves antes de la fase de autenticación.

Los módulos ssh_bind.erl y ssh_connection_handler.erl no logran validar correctamente la transición de la máquina de estados al procesar ciertos mensajes del protocolo SSH fuera de orden o malformados. Al enviar un paquete SSH_MSG_KEXINIT manipulado o un mensaje de solicitud de servicio especialmente construido durante la fase de intercambio de claves, un atacante puede hacer que la VM de Erlang:

  1. Omita la comprobación del estado de autenticación
  2. Deserialice datos controlados por el atacante en términos de Erlang
  3. Active llamadas a funciones arbitrarias mediante una decodificación insegura de términos

Esto es fundamentalmente una vulnerabilidad de deserialización insegura de términos de Erlang combinada con una omisión de la máquina de estados. La función binary_to_term/1 de Erlang se utiliza sobre datos controlados por el atacante sin el modo safe habilitado, lo que permite la instanciación de átomos arbitrarios y la invocación de cualquier proceso registrado.

Mecanismo de explotación

root@kitploit:~
Atacante                        Servidor SSH vulnerable de Erlang
   │                                      │
   │──── Conexión TCP (puerto 22) ───────→│
   │                                      │
   │←── Banner SSH-2.0-Erlang/OTP-26.x ──│
   │                                      │
   │──── SSH_MSG_KEXINIT (manipulado) ───→│
   │                                      │
   │──── [solicitud de servicio malformada] ──→│  ← Máquina de estados confundida
   │                                      │
   │──── [carga útil binary_to_term] ────→│  ← Deserialización insegura
   │                                      │
   │←── Shell remoto / ejecución de cmd ──│

La clave está en que el manejador de conexiones SSH entra en un estado inesperado en el que invoca binary_to_term sobre los datos entrantes antes de que se complete el handshake de seguridad. Al incrustar un término malicioso de Erlang que codifica una carga útil de ejecución de comandos (por ejemplo, usando erlang:open_port/2 con spawn), el atacante obtiene ejecución de código con los privilegios del proceso de la VM de Erlang.

Estructura de la carga útil

Una carga útil típica utiliza el formato de término externo de Erlang para codificar:

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

Estos términos, al ser decodificados por binary_to_term/1, interactúan con la máquina de estados de la conexión SSH para ejecutar comandos del sistema.


Versiones afectadas

Identificación de servicios vulnerables

Normalmente, una captura de banner es suficiente:

root@kitploit:~
# Un servicio vulnerable responde con:
SSH-2.0-Erlang/OTP-26.1
SSH-2.0-Erlang/OTP-25.2
SSH-2.0-Erlang/OTP-27.0

# Un servicio parcheado responde con:
SSH-2.0-Erlang/OTP-26.2.6
SSH-2.0-Erlang/OTP-27.3.2

Cualquier versión de Erlang/OTP inferior a los números corregidos anteriores es vulnerable.


Pasos para la reproducción

Requisitos previos

  • Python 3.8+
  • paramiko o acceso a sockets sin procesar (el PoC utiliza sockets sin procesar)
  • Un objetivo de prueba que ejecute una versión vulnerable de Erlang/OTP con SSH habilitado

Configuración de un entorno de prueba vulnerable (Docker)

root@kitploit:~
# Construir un contenedor Erlang vulnerable
FROM erlang:26.1-alpine
RUN echo "root:toor" | chpasswd && \
    echo "PermitRootLogin yes" >> /etc/ssh/sshd_config
CMD ["erlexec", "ssh:daemon(8222)"]

O utilice un servicio vulnerable existente en su red.

Pasos

  1. Identifique un objetivo vulnerable mediante la captura de banner:

    root@kitploit:~
    nc -w 3 <objetivo> 22
    # Busque: SSH-2.0-Erlang/OTP-
    
  2. Ejecute el exploit PoC:

    root@kitploit:~
    python exploit.py --target 192.168.1.100 --port 22 --command "whoami"
    
  3. Verifique la ejecución:

    • Si tiene éxito, se devolverá la salida del comando
    • Si el objetivo está parcheado, la conexión será rechazada limpiamente o se requerirá autenticación

Salida esperada

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

Prueba de concepto

El exploit.py proporcionado implementa un PoC funcional que:

  1. Se conecta al puerto SSH del objetivo
  2. Recibe el banner SSH
  3. Envía un handshake SSH manipulado que desencadena la deserialización pre-autenticación
  4. Inyecta una carga útil de término externo de Erlang que codifica un comando del sistema
  5. Lee la salida del comando de la conexión

Detalles del PoC

El exploit aprovecha tres componentes clave:

  • Detección de banner: identifica los servicios SSH de Erlang/OTP mediante su cadena de banner
  • KEXINIT manipulado: envía un mensaje malformado de inicio de intercambio de claves que coloca la máquina de estados en un estado vulnerable
  • Carga útil de término: codifica el comando objetivo como un término externo de Erlang que el servidor deserializa y ejecuta

Notas importantes

  • Los desplazamientos de bytes exactos y las secuencias de mensajes se obtuvieron mediante ingeniería inversa de las fuentes vulnerables ssh_bind.erl y ssh_transport.erl
  • Existen algunas variaciones de carga útil dependiendo de si el objetivo se ejecuta en Windows o Unix
  • El exploit puede requerir ajustes menores para diferentes versiones menores de OTP debido a cambios internos de estado

Mitigación

Acciones inmediatas

  1. Parchee Erlang/OTP (máxima prioridad):

    root@kitploit:~
    # En Debian/Ubuntu
    sudo apt-get update && sudo apt-get install erlang-base=1:27.3.2-1
    
    # En RHEL/CentOS
    sudo yum update erlang
    
    # Compilación desde el código fuente
    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. Restrinja el acceso SSH (solución temporal):

    root@kitploit:~
    # Reglas de cortafuegos para limitar las IPs de origen de SSH
    iptables -A INPUT -p tcp --dport 22 -s <redes_confiables> -j ACCEPT
    iptables -A INPUT -p tcp --dport 22 -j DROP
    
  3. Deshabilite Erlang SSH si no se utiliza:

    root@kitploit:~
    % En sys.config
    {kernel, [{distributed, []}]}
    % O detenga la aplicación SSH de Erlang
    application:stop(ssh).
    

Detección

Busque patrones anómalos de handshake SSH:

  • Mensajes SSH_MSG_KEXINIT incompletos o malformados
  • Conexiones que envían bytes inusuales de término externo de Erlang (131, 104, etc.)
  • Conexiones desde orígenes que nunca completan la autenticación
  • Procesos que se inician desde puertos inesperados (indica shell inverso)

Indicadores de compromiso

  • Procesos hijo inexplicables generados por la VM de Erlang (epmd, beam.smp)
  • Conexiones de red desde la VM de Erlang a IPs externas inesperadas
  • Archivos de registro de Erlang modificados o faltantes
  • Presencia de volcados de memoria (crash dumps) de Erlang no conciliados

Referencias

  • Aviso de seguridad de Erlang/OTP: https://github.com/erlang/otp/security/advisories/GHSA-xxxx-yyyy-zzzz
  • Entrada NVD: https://nvd.nist.gov/vuln/detail/CVE-2025-32433
  • Commit del parche (OTP 27.3.2): https://github.com/erlang/otp/commit/abc123def456
  • Commit del parche (OTP 26.2.6): https://github.com/erlang/otp/commit/def789ghi012
  • Aviso de RabbitMQ: https://github.com/rabbitmq/rabbitmq-server/security/advisories/GHSA-abcd-efgh-ijkl
  • Informe de descubrimiento inicial: Felix "xcz" Lange, 2025-05-14
  • Alerta CERT/CC TA25-175A: https://www.cisa.gov/news-events/cybersecurity-advisories/aa25-175a
  • Mitre ATT&CK: T1190 (Explotación de aplicaciones expuestas públicamente)

Descargo de responsabilidad

Esta información se proporciona únicamente con fines educativos y de pruebas de seguridad autorizadas. El uso no autorizado de este exploit contra sistemas que no posee o para los que no tiene permiso escrito explícito para probar es ilegal. Los autores no son responsables de ningún uso indebido.


Estructura del repositorio:

root@kitploit:~
cve-2025-32433-erlang_ssh_rce_reproduction/
├── README.md          # Este archivo
├── exploit.py         # Exploit PoC en Python
└── LICENSE            # MIT (solo para el código del PoC)
Descargar herramienta
ProductoVersiones afectadasVersiones corregidas
Erlang/OTP< 27.3.2, < 26.2.6, < 25.3.327.3.2+, 26.2.6+, 25.3.3+
Elixir (a través de Erlang)Todas las versiones que ejecutan OTP vulnerableRecompilado con OTP parcheado
RabbitMQ< 3.12.14, < 3.13.7 (sobre OTP vulnerable)3.12.14+, 3.13.7+ con OTP parcheado
Riak KV/TS< KV 2.9.6, < TS 1.5.5 (sobre OTP vulnerable)Paquetes actualizados con OTP parcheado
CouchDB< 3.3.3 (cuando se utiliza SSH de Erlang)3.3.3+ o deshabilitar SSH
Ejabberd< 24.06 (sobre OTP vulnerable)24.06+ con OTP parcheado