Skip to main content
Glama
arrugit

vuln_mcp_app

by arrugit

vuln_mcp_app

Намеренно уязвимая, локально запускаемая лаборатория безопасности Model Context Protocol (MCP) — контролируемая цель (концептуально «DVWA для MCP»), используемая для оценки отдельного сканера безопасности FYP. Это приложение — цель, а не сканер. Оно содержит небольшой задокументированный набор уязвимостей MCP и генерирует доказательства; оно никогда не сообщает, уязвимо ли оно (без оракула, SEC-006).

⚠️ Только для образовательных / исследовательских целей. Всё работает локально с синтетическими данными и фиктивными секретами (DEMO_SECRET_*). Никаких реальных учётных данных, внешних целей, сканирования Интернета или доступа к хосту.

Область (ровно три лаборатории)

ID

OWASP MCP

Уязвимость

Статус

VULN-MCP03-001

MCP03

Отравление инструментов (Tool Poisoning)

реализовано

VULN-MCP05-001

MCP05

Внедрение и выполнение команд (Command Injection & Execution)

реализовано

VULN-MCP10-001

MCP10

Внедрение контекста и чрезмерный обмен (Context Injection & Over-Sharing)

в ожидании

Дополнительные лаборатории уязвимостей не входят в область. Каждая реализованная лаборатория поставляется с УЯЗВИМЫМ и действительно исправленным БЕЗОПАСНЫМ режимом.

Related MCP server: vuln-mcp-server

Запуск (без Docker — одна команда + браузер)

Всё приложение работает из одного процесса uvicorn: FastAPI обслуживает собранный интерфейс на / и 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 — появится интерфейс лаборатории. Интерактивная документация API доступна по адресу http://127.0.0.1:8000/docs.

Предпочитаете классический venv вместо uv?

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 и откройте браузер. Пересобирайте интерфейс (npm run build) только после изменения кода фронтенда.

Горячая перезагрузка фронтенда (опционально, для разработки UI)

Запустите API на :8000 и dev-сервер 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 использует внутрипроцессный транспорт реестра, поэтому всё приложение работает в одном процессе. Потоковый HTTP-транспорт MCP (официальный SDK) — будущее обновление за тем же клиентским API.

Песочница MCP05 (когда будет построена): с удалением Docker выполнение команд для лаборатории MCP05 работает в ограниченном внутрипроцессном раннере подпроцессов — временная рабочая директория, предоставляемый проектом фиктивный shim convert, жёсткий таймаут и отсутствие оболочки в безопасном режиме. Радиус поражения остаётся локальным и синтетическим (SEC-001/003); изоляция на уровне ОС, которую давал Docker (без сети, 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. Запустите FYP против HTTP + MCP поверхностей. 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 — контракты проектирования, хранятся только локально (в git-игноре). Обновлено 2026-08-21 до модели запуска без Docker.

Текущее состояние

MCP03 и MCP05 завершены (все фазы). Работает без Docker через uvicorn. MCP10 заготовлен в каталоге и ещё не построен. См. CLAUDE.md.

Related MCP Connectors

Related MCP Servers