
run-code MCPツールを介した未認証リモートコード実行CVE-2026-5029の概念実証(PoC)エクスプロイト —
--transport httpでサーバーを実行した際にrun-codeMCPツールを介してトリガーされる、Code Runner MCP Serverの重大な未認証リモートコード実行(RCE)脆弱性。
| プロパティ | 詳細 |
|---|---|
| CVE ID | CVE-2026-5029 |
| CVSSスコア | 8.7 / 10 — 高 |
| CWE | CWE-306 — 重要な機能に対する認証の欠如 |
| 影響を受ける製品 | Code Runner MCP Server |
| 影響を受けるバージョン | (未パッチ)--transport httpを介してrun-codeツールを公開しているすべてのバージョン |
| 認証 | 不要(未認証) |
| パッチ状況 | 未修正 |
| 発見者 | Phantom Hat |
Code Runner MCP Serverは、--transport httpフラグ付きで起動すると、ポート3088にJSON-RPC /mcpエンドポイントを公開します。このエンドポイントには認証なしで到達できます — APIキーもセッショントークンもオリジンチェックもありません。
このポートに到達できる未認証のリモート攻撃者は、run-code MCPツールを直接呼び出すことができます。このツールは任意のソースコードと言語識別子を受け取り、一時ファイルに書き込んで、対応するインタプリタ(bash、python、powershell、その他30以上)を使用してchild_process.exec()で実行します。
どの段階でもcodeパラメータにサニタイゼーションが適用されないため、MCPサーバーを実行しているプロセスの権限で**完全な未認証リモートコード実行(RCE)**が発生します。
┌──────────┐ JSON-RPC tools/call ┌───────────────────────┐ exec() ┌──────────┐
│ Attacker │ ──── run-code tool ─────▶│ /mcp (port 3088) │ ─────────▶ │ RCE │
│ │ (no auth needed) │ Code Runner MCP │ │ on Host │
└──────────┘ └───────────────────────┘ └──────────┘
/mcpエンドポイントに接続し、利用可能なMCPツールを列挙するrun-codeツールの入力スキーマ(code、languageId)を取得するcodeを含む細工済みtools/call JSON-RPCリクエストを送信するcodeを一時ファイルに書き込み、選択されたインタプリタで実行する.
├── exploit.py # 🎯 Interactive RCE exploit shell (Rich-based terminal UI)
└── README.md # 📖 You are here
exploit.py — 対話型エクスプロイト主要なエクスプロイトスクリプトであり、セキュリティ評価やケーススタディでのプロフェッショナルな使用を目的に構築されています。ターゲットのMCPサーバーに接続し、対話型シェルにドロップします。このシェルでは、任意のコマンドが脆弱なrun-codeツールを通じてライブで実行されます。
主な機能:
-lによる実行言語の選択(デフォルトはshellscript)pipパッケージマネージャ# Clone the repository
git clone https://github.com/0x00phantom-hat/CVE-2026-5029-Exploit.git
cd CVE-2026-5029-RCE-Exploit
# Install dependencies
pip install fastmcp rich
# Drop into an interactive RCE shell (default: shellscript)
python3 exploit.py -u http://TARGET:3088/mcp
# Use a specific language interpreter
python3 exploit.py -u http://TARGET:3088/mcp -l python
# List all languages the MCP server advertises support for
python3 exploit.py -u http://TARGET:3088/mcp --available
# Probe which language runtimes are actually installed on the target
python3 exploit.py -u http://TARGET:3088/mcp --installed -v
# Show the help menu
python3 exploit.py -h
接続すると、エクスプロイトは対話型プロンプトに切り替わります:
PhantomHat-MCP@Exploit-CVE-2026-5029 $ id
exitと入力するとセッションを終了します。
--transport httpを実行しない — デフォルトのstdioトランスポートを使用する127.0.0.1にバインドし、認証付きリバースプロキシまたはVPNの背後に配置するrun-codeの呼び出しや異常な子プロセスを監視するこのツールは、許可されたセキュリティテストおよび教育目的のみで提供されます。
コンピュータシステムへの不正アクセスは、Computer Fraud and Abuse Act(CFAA)、Computer Misuse Act、および世界各国の同様の法律を含む法律の下で違法です。作者は、本ソフトウェアの誤用について一切の責任を負いません。
このツールは、あなたが所有するシステム、またはテストについて明示的な書面による許可を得たシステムに対してのみ使用してください。
作者: Phantom Hat
許可されたペネトレーションテストおよびセキュリティ研究のみを目的としています。
| フラグ | 説明 | デフォルト |
|---|
-u, --url | (必須) MCPサーバーのURL | — |
-l, --language | コード実行に使用する言語 | shellscript |
-a, --available | サポートされているすべての言語を一覧表示 | フラグ |
-i, --installed | ターゲット上のインストール済み言語ランタイムをプローブ | フラグ |
-v, --verbose | 冗長出力モード | フラグ |
-h, --help | ヘルプメニューを表示 | — |
| フェーズ | 名前 | 説明 |
|---|
| 1 | 🔍 列挙 | /mcpに接続し、利用可能なMCPツールを列挙する |
| 2 | 🧪 スキーマの発見 | run-codeの入力スキーマ(code、languageId)を確認する |
| 3 | 💣 エクスプロイトの送信 | 攻撃者が制御するcodeを含む細工済みtools/callリクエストを送信する |
| 4 | 🚀 対話型実行 | ライブシェルにドロップ — すべてのコマンドがターゲットホスト上で実行される |