Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
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.

FeedsContactoPrivacidad© 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

Ver Repositorio
16hace 2 mesesAún no revisado

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

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

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:

{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

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

Identificación de servicios vulnerables

Normalmente, una captura de banner es suficiente:

# 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)

# 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:

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

    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

[+] 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

Descargar herramienta