Rce Guard について
Rce Guardは、MCPサーバー運用者向けに隔離ポリシー記述子を生成し、サブプロセスのコマンドを既知のRCEパターンと照合するライブラリです。v0.1はポリシーを記述しますが、実行中のプロセスには適用しません。
主な機能
- 01プロセス隔離ポリシー記述子の生成
- 02ネットワーク送信先許可リスト
- 03既知のRCEパターン検査
- 04サーバー間のカナリア追跡
- 05追記型NDJSON監査ログ
- 06Unicode入力の正規化
活用シーン
- 01MCPサブプロセス向けポリシー生成
- 02コマンドの既知RCEパターン検査
- 03サーバー間のカナリア漏えい追跡
MCP 対応
サブプロセスの登録と監査、コマンド検査、カナリア追跡、送信先ポリシー記述子の出力、監査ログの読み取りを行うMCPサーバーを提供します。v0.1のツールは実行中のプロセスにポリシーを適用しません。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
6掲載時のツール一覧 · 3 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| args | array | いいえ | |
| binary | string | はい | |
| serverId | string | はい | |
| trustTier | enum | はい | LOW | MEDIUM | HIGH | CRITICAL |
| isolationProfile | object | いいえ | |
| isolationProfile.cpuMs | integer | いいえ | |
| isolationProfile.memMB | integer | いいえ | |
| isolationProfile.pidMax | integer | いいえ | |
| isolationProfile.fsReadOnly | array | いいえ | |
| isolationProfile.fsWritable | array | いいえ | |
| isolationProfile.egressAllowlist | array | いいえ |
詳細
StudioMeyer MCP Stack の一部 — マヨルカ島で開発 🌴 · ご利用の際は ⭐ をお願いします
mcp-rce-guard
MCP サーバー向けのポリシー合成、振る舞いベースの CVE リプレイ、カナリア追跡ライブラリです。Foundation Pillar 9。
v0.1 の範囲:カーネルレベルのサンドボックスではなく、ポリシーシンセサイザー
これが何であり、何ではないかを正確に把握してください。 v0.1 は、分離用のポリシー記述子(landlock JSON プロファイル、sandbox-exec .sb スキームファイル、cgroups-v2 仕様マップ)を合成し、既知の RCE 脆弱性パターンに該当する形状がサブプロセスのコマンドにないかをスキャンする振る舞いベースの述語を提供するビルディングブロックライブラリです。実行中のプロセスにポリシーを適用することはありません。サブプロセスを起動するホストが、記述子をプラットフォーム固有のシステムコール(Linux landlock、macOS sandbox-exec、cgroups-v2 のファイル書き込み)に変換する役割を担います。
ネイティブな強制適用(NAPI-RS の landlock バインディング、sandbox-exec の execa ラップ、終了時クリーンアップを伴う cgroups-v2 のファイル書き込み、クロスプラットフォーム統合テスト)は v0.2 の段階に含まれ、v0.1 には同梱されません。多層防御を実現するには、ホスト側でポリシー出力を実際の強制適用に接続する必要があります。このライブラリは、その前半部分を適切に処理します。
次の用途には、このライブラリを使用してください。
- MCP サブプロセスに許可する読み取り、書き込み、起動、通信の範囲を、型付きで検証可能な方法で記述したい場合。
- サブプロセスコマンドにおける既知の RCE 脆弱性クラス(MCP-SDK-RCE-2026-04-22、CVE-2026-27124、Nginx-MCP RCE 9.8、インタープリターのインライン評価による RCE)に加え、simulate_attacker_input コーパスに含まれる 5 種類のシェルインジェクションと 3 種類の全角 Unicode ペイロードパターンを再現可能な方法でスキャンしたい場合。
- すべての分離判断を追記専用の NDJSON 監査ログに記録したい場合。改ざん検知可能な署名の検証(Acra パターンの鍵導出 + ローテーション + 統合検証ツール)は v0.2 のロードマップに含まれます。v0.1 では署名なしのログを提供し、署名機能は v0.2 の成果物として扱います。
カーネル境界で悪意のあるサブプロセスを実際に封じ込めるサンドボックスが必要な場合、v0.1 は使用しないでください。その場合は、v0.1 の記述子を強制適用ヘルパーと組み合わせる必要があります。そのヘルパーは v0.2 で提供されます。
機能(v0.1)
- プロセス分離ポリシーの合成 — landlock(Linux >=5.13)ポリシー記述子、sandbox-exec(macOS)Scheme プロファイル、cgroups-v2 仕様(memory.max、pids.max、cpu.max)を出力します。記述子のみで、システムコールは実行しません。
- ネットワーク送信許可リスト — ワイルドカード / 完全一致 / サフィックス / port:* によるマッチングを備えたデフォルト拒否ポリシーです。記述子のみで、nftables / パケットフィルターとの統合はありません。
- CVE リプレイスイート — 既知の MCP サーバー RCE ベクトル(
mcp-sdk-rce-2026-04-22、cve-2026-27124、nginx-mcp-rce-9.8、mcp-interpreter-eval-rce)に対する振る舞いベースの述語です。エクスプロイトペイロードではなく、対象コマンドに脆弱性のある形状がないかをスキャンする述語です。mcp-interpreter-eval-rceフィクスチャ(0.1.1 で追加)は、シェルバイナリやシェルのメタ文字を使わずに任意のコードを実行するインタープリターのインライン評価シンク(node -e/--eval/-p、python -c、perl -e、ruby -e、php -r、deno eval、bun -e)を検出します。シェルメタ文字の述語も、0.1.1 以降はコマンド区切り文字としての改行/CR を検出します。完全一致トークンの照合により、--experimental-vm-modules、--max-old-space-size、--inspectなどの無害な起動フラグは検出対象外になります。 - サーバー間カナリアトークン — トークンを発行し、下流の stdout / fs-write / network-egress ストリームに漏えいがないかをスキャンします(MCPHunt arXiv 2604.27819 のパターン)。
- NDJSON 追記専用監査ログ — すべてのツール呼び出しを
$MCP_RCE_GUARD_HOME/audit.logに追記します。100MB ごとにローテーションし、バックアップは最大 10 個です。v0.1 では署名なしで提供されます(プロセス内の検証ツールはありません)。v0.2 では、Acra パターンの HMAC チェーン、鍵導出、ローテーションの安全性、統合検証ツールを追加します。 - Pillar 8(mcp-stdio-shellguard)と共有する NFKC + ゼロ幅文字除去 + Bidi ブロック正規化。
インストール
npm install -g mcp-rce-guard
または、npx から実行します。
npx -y mcp-rce-guard serve
ツール(MCP、仕様 2025-06-18)
| ツール | 目的 | readOnly | destructive |
|---|---|---|---|
register_subprocess | 分離プロファイルを指定して子 MCP サーバーを登録し、ハンドル、フィンガープリント、ポリシー記述子を取得します | yes | no |
audit_subprocess | 要求された引数が登録済みの許可リストと一致することを検証します(NFKC 正規化後、不可視文字の有無をチェック) | yes | no |
scan_cve_replay | 対象サーバーのコマンドに対して動作述語を実行します | yes | no |
track_canary | カナリアトークンを発行し、下流サーバーに漏えいがないかスキャンします | yes | no |
inject_egress_policy | 登録済みのサブプロセスに対するネットワーク送信許可リスト記述子を出力します(v0.1 では記述子のみ) | yes | no |
get_audit_log | フィルターを指定して NDJSON 監査ログのエントリーを読み取ります | yes | no |
v0.1 に関する注記: v0.1 では、6 つすべてのツールが
readOnlyHint=true, destructiveHint=falseです。ポリシー記述子を出力して監査ログに追記しますが、サブプロセスの状態は変更しないためです。ネイティブの強制適用機能が組み込まれる v0.2 では、inject_egress_policyのdestructiveHintがtrueに変更されます。
CLI
mcp-rce-guard serve # start MCP server on stdio
mcp-rce-guard platform # detect isolation backend (landlock/sandbox-exec/unsupported)
mcp-rce-guard scan-cve <cmd> # one-shot CVE replay against a command
mcp-rce-guard audit-log # tail the audit log
mcp-rce-guard policy <profile.json> # synthesize landlock+cgroups+sandbox-exec from JSON
互換性マトリックス
| プラットフォーム | 分離バックエンド | ネットワーク送信 | cgroups |
|---|---|---|---|
| Linux >= 5.13 | landlock | nftables フック(帯域外) | cgroups-v2 |
| Linux < 5.13 | 非対応 | 非対応 | 非対応 |
| macOS 11+ | sandbox-exec (.sb) | sandbox-exec ネットワークルール | n/a |
| Windows | 非対応(予定:AppContainer) | n/a | n/a |
レイヤーアーキテクチャ(v0.1)
Pillar 1 (mcp-protocol-conformance) — protocol input shape
↓
Pillar 8 (mcp-stdio-shellguard) — argv allowlist + invisible-codepoint detection
↓
Pillar 9 (mcp-rce-guard, this lib) — policy synthesis + CVE-replay scan + canary
↓
Host spawner (caller responsibility) — applies the policy descriptor via real syscalls
v0.2 では、最下部のボックスが Pillar 9 に統合されます(NAPI-RS landlock バインディング、sandbox-exec 実行ラップ、クリーンアップを伴う cgroups-v2 のファイルシステム書き込み)。それまでは、ホストが記述子をプラットフォームに橋渡しする必要があります。
信頼レベル
| レベル | mem | pids | egress | 用途 |
|---|---|---|---|---|
LOW | 256MB | 32 | なし | レジストリから取得した信頼できない MCP |
MEDIUM | 512MB | 64 | API のみ | スコープが限定された既知のベンダー |
HIGH | 1024MB | 128 | 広範 | ソースコードをレビュー済みの自社 MCP |
CRITICAL | 2048MB | 256 | 制限なし | ローカル OS に統合された MCP。ソースコードを自分で所有しています |
監査ログの場所
$MCP_RCE_GUARD_HOME/audit.log # default: ~/.mcp-rce-guard/audit.log
エントリーは 1 行につき 1 つの JSON ドキュメントとして書き込まれ(NDJSON)、1 行ごとに JSON.parse で読み戻されます。そのため、args 文字列内の任意の文字(タブ、引用符、埋め込みエスケープシーケンス)を安全に往復できます。100MB でローテーションし、最大 10 個のバックアップ(audit.log.1 .. audit.log.10)を保持します。
v0.1 ではエントリーに署名しません。以前の MCP_RCE_GUARD_SIGNING_KEY による HMAC-SHA256 の仕組みは、公開前に削除されました。プロセス内の検証機能がなく、鍵長の検証もローテーション戦略もなかったため、セキュリティ対策を装うだけのものだったからです。v0.2 では、検証機能を備えた Acra パターンのチェーン(KDF(master) → per-entry HMAC、鍵のローテーション、統合された verify_audit_log ツール)を提供します。
注記
- v0.1 が出力するのはポリシー記述子です。実際の landlock システムコールの適用は、起動ヘルパーの責任です(関心の分離:ポリシーの合成は移植可能ですが、システムコールはプラットフォーム固有です)。ネイティブバインディングのラッパーは v0.2 での提供を予定しています。
- CVE フィクスチャは実行可能なエクスプロイトではなく、動作述語です。「対象のコマンドは、悪用可能と知られている形式に一致するか」を確認します。「エクスプロイトを発動できるか」を確認するものではありません。
- カナリアトークンでは、
__MCP_CANARY_<hex>__マーカー内に暗号学的にランダムな 64 桁の 16 進数文字列を使用します。パターンの一意性は統計的なものであり、ジェネレーターを制御する敵対者に対して暗号学的に保証されるものではありません。
既知の問題 v0.1
これらは実際に存在しますが、v0.1 系列では許容されている制限事項です。以下の v0.2 ロードマップで追跡しています。いずれかがユースケースの妨げになる場合は、 v0.2.x リリースが公開されたら、そのバージョンに固定してください。
- 監査ログのローテーションには TOCTOU の隙間があります(
src/audit/log.tsrotateAuditLog)。サイズの確認と名前の変更はアトミックではありません。 マルチプロセス/高並行性の環境では、2 つの追記処理がどちらも「ローテーションが 必要」と判断し、両方が名前の変更を試みる可能性があります。負けた側の追記は、 新しく作成された空のアクティブログに書き込まれます。回避策:書き込みを直列化するか、 プロセスごとに書き込み処理を 1 つだけ実行してください。v0.2 では ローテーションをproper-lockfileによる制御下に置く予定です。 - 再起動時にインメモリ状態が失われます(
src/state.ts)。登録済みの サブプロセスとカナリアチェーンはプロセスメモリ内に保持されます。プロセスを 再起動するとレジストリが空になるため、オペレーターは再登録する必要があります。 v0.2 では、オプトインの永続化レイヤーとして SQLite ベースのストアを計画しています。 - CI の
mcp-protocol-validatorステップは厳格なゲートではありません (.github/workflows/ci.yml)。上流のツールがまだ安定化の途中のため、 バリデーターはcontinue-on-error: trueで実行されます。失敗は CI の注釈として 表示されますが、処理はブロックされません。上流が安定したら、v0.2 で厳格なゲートに 引き上げる予定です。 - v0.1 では監査ログに署名がありません。「監査ログの場所」を参照してください。 v0.2 では、検証可能な Acra パターンの署名付きチェーンを追加します。
v0.2 ロードマップ(保留中、コミット日未定)
mcp-rce-guard+mcp-rce-demo+mcp-rce-fixturesを含む pnpm ワークスペース(Marketplace の配布衛生:CVE フィクスチャーは別途配布)。- Linux 向け NAPI-RS Landlock バインディング(kernel >=5.13)。C ブリッジなしでは、prctl + LANDLOCK_CREATE_RULESET を使ったプレーンな
child_process.spawnはテストできません。 - macOS の sandbox-exec を execa でラップし、プロファイルファイルのライフサイクルを管理します(deny-network は connection-refused を、deny-fs-read は EACCES を発生させます)。
- cgroups-v2 の fs.writeFile に権限チェック、終了時のクリーンアップ、シグナルハンドラーを追加します。
- 統合テスト
tests/integration/linux-landlock.test.ts+tests/integration/macos-sandbox-exec.test.ts。 - 各機能を実行時に実演する 6 つのツール(read_isolated_file、attempt_egress_blocked、spawn_subprocess_audited、replay_cve_demo、inject_canary_demo、get_demo_audit)を備えたリファレンスサーバー
mcp-rce-demo。 - ubuntu-latest GitHub Actions ランナーでのレイテンシーテスト「サブプロセスの spawn p95 <200ms」。
- 3 つすべての npm パッケージで Sigstore Trusted Publishing OIDC を使用します。
- 検証可能な Acra パターンの監査ログチェーン:KDF マスターキー → エントリーごとの HMAC、重複期間を設けた鍵のローテーション、統合された
verify_audit_logツール。検証機能がなかったため公開前に削除された、v0.1 の HMAC-SHA256 プロトタイプを置き換えます。
ライセンス
MIT — Copyright (c) 2026 Matthias Meyer (StudioMeyer)
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。