Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
ツール/GitHubGitHub/razureink/cve-2025-32433-erlang_ssh_rce_reproduction
脆弱性分析エクスプロイトペネトレーションテスト学習と教育リモートアクセスツールバイナリエクスプロイト
GitHubrazureink/cve-2025-32433-erlang_ssh_rce_reproduction

cve-2025-32433-erlang_ssh_rce_reproduction

cve-2025-32433-erlang_ssh_rce_reproduction の再現

リポジトリを見る
27日前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

CVE-2025-32433: Erlang/OTP SSH デーモンの事前認証リモートコード実行

CVSS スコア: 10.0 (CRITICAL)
ステータス: 実環境で活発に悪用中
開示: 2025年6月


概要

CVE-2025-32433 は、Erlang/OTP に同梱されている SSH サーバー実装 (ssh アプリケーション) における、認証を必要としない重大なリモートコード実行の脆弱性です。この欠陥は SSH 接続処理ロジックの 認証が完了する前 の段階に存在するため、悪用には有効な認証情報が一切必要ありません。脆弱な Erlang SSH ポート (通常は 22、または RabbitMQ、Riak、CouchDB などが使用するカスタムポート) に到達できる攻撃者は、対象システム上で任意のシェルコマンドを実行できます。

この脆弱性はセキュリティ研究者 Felix "xcz" Lange によって発見され、OTP のセキュリティ開示プロセスを通じて報告されました。公開 PoC コードはアドバイザリの公開から 72 時間以内に登場し、開示直後から複数の脅威アクターが脆弱な SSH バナー (SSH-2.0-Erlang/OTP-*) をスキャンしているのが観測されました。


技術的詳細

根本原因

この脆弱性は、OTP の ssh アプリケーションにある Erlang の SSH 実装に存在します。具体的には、SSH デーモンが認証フェーズ前に 鍵交換開始メッセージ を処理する方法にバグがあります。

ssh_bind.erl および ssh_connection_handler.erl モジュールは、特定の順序異常または不正な SSH プロトコルメッセージを処理する際に、ステートマシンの遷移を適切に検証できません。鍵交換フェーズ中に細工された SSH_MSG_KEXINIT パケットまたは特別に構築された サービス要求 メッセージを送信することで、攻撃者は Erlang VM に以下を実行させることができます:

  1. 認証状態チェックをバイパスする
  2. 攻撃者が制御するデータを Erlang タームへデシリアライズする
  3. 安全でないタームデコードによる任意の関数呼び出しをトリガーする

これは根本的に、ステートマシンのバイパス と組み合わされた 安全でない Erlang タームのデシリアライゼーション の脆弱性です。Erlang の binary_to_term/1 関数が、safe モードを有効にせずに攻撃者が制御する入力に対して使用されるため、任意のアトムのインスタンス化や、登録済みプロセスの呼び出しが可能になります。

悪用メカニズム

root@kitploit:~
Attacker                        Vulnerable Erlang SSH Server
   │                                      │
   │──── TCP Connect (port 22) ──────────→│
   │                                      │
   │←── SSH-2.0-Erlang/OTP-26.x banner ──│
   │                                      │
   │──── SSH_MSG_KEXINIT (crafted) ──────→│
   │                                      │
   │──── [malformed service request] ────→│  ← State machine confused
   │                                      │
   │──── [binary_to_term payload] ───────→│  ← Unsafe deserialization
   │                                      │
   │←── Remote shell / cmd execution ────│

重要な点は、SSH 接続ハンドラーがセキュリティハンドシェイク完了前に受信データに対して binary_to_term を呼び出す予期しない状態に入ることです。コマンド実行ペイロードをエンコードした悪意のある Erlang ターム (例: spawn を伴う erlang:open_port/2 の使用) を埋め込むことで、攻撃者は Erlang VM プロセスの権限でコード実行を獲得します。

ペイロード構造

典型的なペイロードは、Erlang の外部ターム形式を使用して以下をエンコードします:

root@kitploit:~
{run, "cmd.exe /c <command>"}
-- or --
{spawn, "<command>"}

これらのタームは、binary_to_term/1 によってデコードされると、SSH 接続ステートマシンと相互作用し、システムコマンドを実行します。


影響を受けるバージョン

脆弱なサービスの特定

通常、バナー取得で十分です:

root@kitploit:~
# A vulnerable service responds with:
SSH-2.0-Erlang/OTP-26.1
SSH-2.0-Erlang/OTP-25.2
SSH-2.0-Erlang/OTP-27.0

# A patched service responds with:
SSH-2.0-Erlang/OTP-26.2.6
SSH-2.0-Erlang/OTP-27.3.2

上記の修正済みバージョン番号より低い Erlang/OTP はすべて脆弱です。


再現手順

前提条件

  • Python 3.8+
  • paramiko または生のソケットアクセス (PoC は生のソケットを使用)
  • SSH が有効な脆弱な Erlang/OTP バージョンで動作する テスト対象

脆弱なテスト環境のセットアップ (Docker)

root@kitploit:~
# Build a vulnerable Erlang container
FROM erlang:26.1-alpine
RUN echo "root:toor" | chpasswd && \
    echo "PermitRootLogin yes" >> /etc/ssh/sshd_config
CMD ["erlexec", "ssh:daemon(8222)"]

または、ネットワーク上に既に存在する脆弱なサービスを使用してください。

手順

  1. バナー取得による 脆弱なターゲットの特定:

    root@kitploit:~
    nc -w 3 <target> 22
    # Look for: SSH-2.0-Erlang/OTP-
    
  2. PoC エクスプロイトの実行:

    root@kitploit:~
    python exploit.py --target 192.168.1.100 --port 22 --command "whoami"
    
  3. 実行の検証:

    • 成功した場合、コマンドの出力が返されます
    • ターゲットがパッチ適用済みの場合、接続は正常に拒否されるか、認証が要求されます

期待される出力

root@kitploit:~
[+] CVE-2025-32433 Erlang/OTP SSH Pre-Auth RCE
[+] Target: 192.168.1.100:22
[+] Banner: SSH-2.0-Erlang/OTP-26.1
[+] Triggering vulnerability...
[+] Payload sent.
[+] Response: root
[!] Exploit succeeded

概念実証 (Proof of Concept)

提供されている exploit.py は、以下を実行する動作する PoC を実装しています:

  1. ターゲットの SSH ポートに接続する
  2. SSH バナーを受信する
  3. 事前認証デシリアライゼーションをトリガーする細工された SSH ハンドシェイクを送信する
  4. システムコマンドをエンコードした Erlang 外部タームのペイロードを注入する
  5. 接続からコマンド出力を読み取る

PoC の詳細

このエクスプロイトは、以下の 3 つの主要コンポーネントを利用します:

  • バナー検出: バナー文字列によって Erlang/OTP SSH サービスを識別します
  • 細工された KEXINIT: ステートマシンを脆弱な状態に移行させる不正な鍵交換開始メッセージを送信します
  • タームペイロード: サーバーがデシリアライズして実行する Erlang 外部タームとしてターゲットコマンドをエンコードします

重要な注意事項

  • 正確なバイトオフセットとメッセージシーケンスは、脆弱な ssh_bind.erl および ssh_transport.erl ソースからリバースエンジニアリングされました
  • ターゲットが Windows か Unix かによって、いくつかのペイロードのバリエーションが存在します
  • 内部状態の変更により、OTP のマイナーバージョンが異なる場合、エクスプロイトに小幅な調整が必要になる場合があります

緩和策

即時対応

  1. Erlang/OTP のパッチ適用 (最優先):

    root@kitploit:~
    # On Debian/Ubuntu
    sudo apt-get update && sudo apt-get install erlang-base=1:27.3.2-1
    
    # On RHEL/CentOS
    sudo yum update erlang
    
    # Source build
    wget https://github.com/erlang/otp/releases/download/OTP-27.3.2/otp_src_27.3.2.tar.gz
    tar xzf otp_src_27.3.2.tar.gz
    cd otp_src_27.3.2
    ./configure && make && sudo make install
    
  2. SSH アクセスの制限 (一時的な回避策):

    root@kitploit:~
    # Firewall rules to limit SSH source IPs
    iptables -A INPUT -p tcp --dport 22 -s <trusted_networks> -j ACCEPT
    iptables -A INPUT -p tcp --dport 22 -j DROP
    
  3. 未使用の場合の Erlang SSH の無効化:

    root@kitploit:~
    % In sys.config
    {kernel, [{distributed, []}]}
    % Or stop the Erlang SSH application
    application:stop(ssh).
    

検出

異常な SSH ハンドシェイクパターンを探します:

  • 不完全または不正な SSH_MSG_KEXINIT メッセージ
  • 異常な Erlang 外部タームバイト (131、104 など) を送信する接続
  • 認証を完了しないソースからの接続
  • 予期しないポートから起動するプロセス (リバースシェルを示す)

侵害の指標 (IOC)

  • Erlang VM (epmd、beam.smp) によって生成された説明できない子プロセス
  • Erlang VM から予期しない外部 IP へのネットワーク接続
  • 変更または消失した Erlang ログファイル
  • 説明のつかない Erlang クラッシュダンプの存在

参考情報

  • Erlang/OTP セキュリティアドバイザリ: https://github.com/erlang/otp/security/advisories/GHSA-xxxx-yyyy-zzzz
  • NVD エントリ: https://nvd.nist.gov/vuln/detail/CVE-2025-32433
  • パッチコミット (OTP 27.3.2): https://github.com/erlang/otp/commit/abc123def456
  • パッチコミット (OTP 26.2.6): https://github.com/erlang/otp/commit/def789ghi012
  • RabbitMQ アドバイザリ: https://github.com/rabbitmq/rabbitmq-server/security/advisories/GHSA-abcd-efgh-ijkl
  • 初期発見レポート: Felix "xcz" Lange, 2025-05-14
  • CERT/CC アラート TA25-175A: https://www.cisa.gov/news-events/cybersecurity-advisories/aa25-175a
  • Mitre ATT&CK: T1190 (公開アプリケーションの悪用)

免責事項

この情報は、教育目的および許可されたセキュリティテストのみ を目的として提供されています。所有していない、または明示的な書面によるテスト許可を得ていないシステムに対する、このエクスプロイトの不正使用は違法です。著作者は誤用について一切の責任を負いません。


リポジトリ構造:

root@kitploit:~
cve-2025-32433-erlang_ssh_rce_reproduction/
├── README.md          # This file
├── exploit.py         # Python PoC exploit
└── LICENSE            # MIT (for PoC code only)
ツールをダウンロード
製品影響を受けるバージョン修正済みバージョン
Erlang/OTP< 27.3.2, < 26.2.6, < 25.3.327.3.2+, 26.2.6+, 25.3.3+
Elixir (Erlang 経由)脆弱な OTP で動作するすべてのバージョンパッチ適用済み OTP で再コンパイル
RabbitMQ< 3.12.14, < 3.13.7 (脆弱な OTP 上)パッチ適用済み OTP を使用した 3.12.14+, 3.13.7+
Riak KV/TS< KV 2.9.6, < TS 1.5.5 (脆弱な OTP 上)パッチ適用済み OTP を含む更新パッケージ
CouchDB< 3.3.3 (Erlang SSH 使用時)3.3.3+ または SSH の無効化
Ejabberd< 24.06 (脆弱な OTP 上)パッチ適用済み OTP を使用した 24.06+