Skip to main content
Glama
arrugit

vuln_mcp_app

by arrugit

vuln_mcp_app

意図的に脆弱性を含み、ローカルで実行可能なModel Context Protocol(MCP)セキュリティラボ — 制御されたターゲット(概念的には「MCP版DVWA」)であり、別のFYPセキュリティスキャナを評価するために使用される。このアプリはターゲットであり、スキャナではない。 小規模で文書化された一連のMCP脆弱性をホストし、証拠を出力する。自身が脆弱であるかどうかを報告することはない(オラクルなし、SEC-006)。

⚠️ 教育・研究用途のみ。 すべてローカルで、合成データとダミーのシークレット(DEMO_SECRET_*)を使用して実行される。実際の認証情報なし、外部ターゲットなし、インターネットスキャンなし、ホストアクセスなし。

スコープ(正確に3つのラボ)

ID

OWASP MCP

脆弱性

ステータス

VULN-MCP03-001

MCP03

Tool Poisoning(ツールポイズニング)

実装済み

VULN-MCP05-001

MCP05

Command Injection & Execution(コマンドインジェクションおよび実行)

実装済み

VULN-MCP10-001

MCP10

Context Injection & Over-Sharing(コンテキストインジェクションと過剰共有)

保留中

追加の脆弱性ラボはスコープ外。実装済みの各ラボには、VULNERABLEモードと、実際に修正されたSECUREモードが用意されている。

Related MCP server: vuln-mcp-server

実行方法(Docker不要 — 1つのコマンド+ブラウザ)

アプリ全体は単一のuvicornプロセスから実行される。FastAPIがビルド済みUIを/で、APIを/api配下で提供する。

初回

# 1) Build the UI once (Node 18+). Produces frontend/dist.
cd frontend && npm install && npm run build && cd ..

# 2) Run the app (uv resolves Python deps automatically; Python 3.12+).
uv run uvicorn backend.app.main:app --reload --host 127.0.0.1 --port 8000

次に**http://127.0.0.1:8000を開くと、ラボUIが表示される。対話型APIドキュメントはhttp://127.0.0.1:8000/docs**にある。

uvではなく従来のvenvを好む場合?

python -m venv .venv && source .venv/Scripts/activate   # Windows Git Bash
pip install -r backend/requirements.txt
uvicorn backend.app.main:app --reload --host 127.0.0.1 --port 8000

初回ビルド後

uvicornコマンドを実行してブラウザを開くだけ。UIを再ビルド(npm run build)するのは、フロントエンドコードを変更した後のみ。

フロントエンドのホットリロード(任意、UI開発用)

APIを:8000で、Vite開発サーバを:5173で実行する(/apiをプロキシする):

# terminal 1
uv run uvicorn backend.app.main:app --reload --host 127.0.0.1 --port 8000
# terminal 2
cd frontend && npm run dev      # open http://127.0.0.1:5173

テスト

# Backend (pytest)
uv run pytest                    # or: .venv/Scripts/python -m pytest

# Frontend (Vitest + tsc)
cd frontend && npm test && npx tsc --noEmit

アーキテクチャ

Browser (React SPA, served by FastAPI at :8000)
        │  HTTP/JSON  (/api)
        ▼
  FastAPI control plane (ordinarily secure)  ── MCP client ──►  MCP tool registry
        │                                                        (vulnerable | secure)
        ▼                                                              │
   SQLite (labs, tools, telemetry, evidence)  ◄── telemetry/evidence ─┘

コントロールプレーンは通常セキュアなインフラストラクチャである(SEC-004)。明確にラベル付けされたMCPプレーンのツールだけが、vulnerableモードのときのみ脆弱になる。意図的に脆弱なファイルにはバナーが付く: # INTENTIONALLY VULNERABLE — <VULN-ID> — see docs/GROUND-TRUTH.md。

MCPトランスポート: フェーズ0ではインプロセスのレジストリトランスポートを使用するため、アプリ全体が1つのプロセスで実行される。ストリーム可能なHTTP MCPトランスポート(公式SDK)は、同じクライアントAPIの背後にある将来のアップグレードである。

MCP05サンドボックス(ビルド時): Dockerを排除したため、MCP05ラボのコマンド実行は制約付きインプロセスサブプロセスランナーで行われる — 一時的な作業ディレクトリ、プロジェクト提供のフェイクconvertシム、ハードタイムアウト、セキュアモードではシェルなし。爆発半径はローカルかつ合成的に保たれる(SEC-001/003)。Dockerが提供していたOSレベルの分離(ネットワークなし、cap-drop)は、その制約付きランナーに置き換えられる。sandbox/README.mdを参照。

技術スタック

React + TypeScript + Vite + Tailwind · Python 3.12 + FastAPI + Pydantic v2 · 公式Python MCP SDK · SQLite + SQLModel · pytest + httpx · Vitest + Testing Library。uv/uvicornで実行(Dockerなし)。

APIサーフェス(FYPで分析可能)

GET /api/health · GET /api/labs · GET /api/labs/{id} · POST /api/labs/{id}/mode|reset|attack|start · GET /api/labs/{id}/telemetry · GET /api/mcp/servers|tools · GET /api/mcp/tools/{id} · POST /api/mcp/tools/{id}/call · GET /api/vulnerabilities(カタログメタデータのみ) · GET /api/evidence。

どのエンドポイントも脆弱性の判定を開示しない(SEC-006)。

FYPでの使用(評価ループ)

  1. ターゲットを起動する(MCP03はデフォルトでvulnerable)。

  2. docs/GROUND-TRUTH.mdの手動検証でラボがアクティブであることを確認する。

  3. HTTP + MCPサーフェスに対してFYPを実行する。

  4. 結果をdocs/GROUND-TRUTH.mdと比較する。

  5. Secureに切り替えて再実行し、偽陽性を測定する。

  6. リセットして繰り返す。

プロジェクトドキュメント

  • docs/GROUND-TRUTH.md — 解答キー(脆弱性ごと+マトリックス)。

  • docs/OWASP-MCP-MAPPING.md — OWASP MCP Top 10マッピング。

  • docs/TEST-SCENARIOS.md — FYP検証シナリオ。

  • CLAUDE.md — 実装メモリ / 現在のフェーズ状態。

  • docs/PRD.md、docs/TDD.md — 設計契約、ローカルのみ保持(git-ignored)。Dockerなしの実行モデルに合わせて2026-08-21に更新。

現在の状態

MCP03とMCP05は完了(全フェーズ)。uvicornでDockerフリー実行。MCP10はカタログにスキャフォールドされているだけで、まだビルドされていない。CLAUDE.mdを参照のこと# vuln_mcp_app

意図的に脆弱性を持つ、ローカルで実行可能なModel Context Protocol(MCP)セキュリティラボ — 制御されたターゲット(概念的には「MCP版DVWA」)であり、別のFYPセキュリティスキャナを評価するために使用されます。このアプリはターゲットであり、スキャナではありません。 小規模で文書化された一連のMCP脆弱性をホストし、証拠を出力します。自身が脆弱であるかどうかは決して報告しません(オラクルなし、SEC-006)。

⚠️ 教育・研究目的のみ。 すべてローカルで、合成データとダミーシークレット(DEMO_SECRET_*)を使用して実行します。実際の認証情報、外部ターゲット、インターネットスキャン、ホストアクセスはありません。

スコープ(正確に3つのラボ)

ID

OWASP MCP

脆弱性

ステータス

VULN-MCP03-001

MCP03

ツールポイズニング

*実装済み

VULN-MCP05-001

MCP05

コマンド注入と実行

*実装済み

VULN-MCP10-001

MCP10

コシテキスト注入と過剣共有

未着手

追加の脆弱性ラボはスコープ外です。実装済みの各ラボには、VULNERABLE(脆弱)モードと、実際に修正されたSECURE(セキュア)モードが同梱されています。

実行方法(Docker不要 — コマンド1つ+ブラウザ)

アプリ全体が単一のuvicornプロセスから実行されます。FastAPIがビルド済みUIを/に、APIを/api配下で提供します。

初回のみ

# 1) Build the UI once (Node 18+). Produces frontend/dist.
cd frontend && npm install && npm run build && cd ..

# 2) Run the app (uv resolves Python deps automatically; Python 3.12+).
uv run uvicorn backend.app.main:app --reload --host 127.0.0.1 --port 8000

次に**http://127.0.0.1:8000を開くと、ラボUIが表示されます。インタラクティブなAPIドキュメントはhttp://127.0.0.1:8000/docs**にあります。

通常のuvではなくvenvを利用したい場合は?

python -m venv .venv && source .venv/Scripts/activate   # Windows Git Bash
pip install -r backend/requirements.txt
uvicorn backend.app.main:app --reload --host 127.0.0.1 --port 8000

初回ビルド後

uvicornコマンドを実行し、ブラウザを開くだけです。UIを再ビルド(npm run build)するのは、フロントエンドコードを変更した後のみです。

フロントエンドのホットリロード(任意、UI開発用)

APIを:8000で、Vite開発サーバを:5173で実行します(/apiをプロキシします):

# terminal 1
uv run uvicorn backend.app.main:app --reload --host 127.0.0.1 --port 8000
# terminal 2
cd frontend && npm run dev      # open http://127.0.0.1:5173

テスト

# Backend (pytest)
uv run pytest                    # or: .venv/Scripts/python -m pytest

# Frontend (Vitest + tsc)
cd frontend && npm test && npx tsc --noEmit

アーキテクチャ

Browser (React SPA, served by FastAPI at :8000)
        │  HTTP/JSON  (/api)
        ▼
  FastAPI control plane (ordinarily secure)  ── MCP client ──►  MCP tool registry
        │                                                        (vulnerable | secure)
        ▼                                                              │
   SQLite (labs, tools, telemetry, evidence)  ◄── telemetry/evidence ─┘

コントロールプレーンは通常セキュリティ対策済みのインフラです(SEC-004)。明確にラベル付けされたMCPプレーンツールのみが、vulnerableモードのときだけ脆弱になります。意図的に脆弱なファイルにはバナーが付いています: # INTENTIONALLY VULNERABLE — <VULN-ID> — see docs/GROUND-TRUTH.md。

MCPトランスポート: フェーズ0ではインプロセスのため、アプリ全体が1つのプロセスで動作します。ストリーミング可能なHTTP MCPトランスポート(公式SDK)は、同じクライアントAPIを通じた将来のアップグレードです。

MCP05サンドボックス(ビルド時): Dockerを排除したため、MCP05ラボのコマンド実行は制約付きインプロセスのサブプロセスランナーで行われます — 一時的な作業ディレクトリ、プロジェクト提供のフェイクconvertシム、ハードタイムアウト、セキュアモードではシェルなし。爆発半径はローカルで合成データのみに限定されます(SEC-001/003)。Dockerが提供していたOSレベルの分離(ネットワークなし、cap-drop)は、その制約付きランナーに置き換えられます。sandbox/README.mdを参照してください。

アーキテクチャ(tech stack)

React + TypeScript + Vite + Tailwind · Python 3.12 + FastAPI + Pydantic v2 · 公式Python MCP SDK · SQLite + SQLModel · pytest + httpx · Vitest + Testing Library. uv/uvicornで実行(Dockerなし)。

APIサーフェス(FYPで分析可能)

GET /api/health · GET /api/labs · GET /api/labs/{id} · POST /api/labs/{id}/mode|reset|attack|start · GET /api/labs/{id}/telemetry · GET /api/mcp/servers|tools · GET /api/mcp/tools/{id} · POST /api/mcp/tools/{id}/call · GET /api/vulnerabilities(カタログメタデータのみ) · GET /api/evidence。

どのエンドポイントも脆弱性の判定を公開しません(SEC-006)。

このアプリをFYPに対して使用する(評価ループ)

  1. ターゲットを起動する(MCP03はデフォルトでvulnerable)。2. docs/GROUND-TRUTH.mdの手動検証でラボがアクティブであることを確認する。3. HTTP + MCPサーフェスに対してFYPを実行する。4. 調査結果をdocs/GROUND-TRUTH.mdと比較する。

  2. Secureに切り替えて再実行し、誤検知を測定する。6. リセットして繰り返す。

プロジェクトドキュメント

  • docs/GROUND-TRUTH.md — 回答集(脆弱性ごと+マトリックス)。

  • docs/OWASP-MCP-MAPPING.md — OWASP MCP Top 10マッピング。

  • docs/TEST-SCENARIOS.md — FYP検証シナリオ。

  • CLAUDE.md — 実装メモリ / 現在のフェーズ状態。

  • docs/PRD.md、docs/TDD.md — 設計契約書、ローカル保存のみ(gitignore対象)。Dockerなしの実行モデンに合わせて2026-08-21に更新。

現在の状態

MCP03とMCP05は完了(全フェーズ)。uvicornでDockerフリー実行。MCP10はカタログにシードされていますが、まだ構築されていません。CLAUDE.mdを参照。

Related MCP Connectors

Related MCP Servers