mcp-tenant-isolation
mcp-tenant-isolation
Статический анализатор для многопользовательских SaaS и MCP-серверов. Выявляет утечки данных между арендаторами до попадания в продакшн.
57 детерминированных правил, охватывающих изоляцию арендаторов, фильтры запросов к БД, IDOR, область видимости ключей кэша, RLS, пробелы в схеме и специфические риски MCP (видимость инструментов, префикс кэша, привязка сессии, хранилище учетных данных). Работает с Prisma, Drizzle, сырым SQL, Next.js, Express и Fastify. Включает MCP-сервер для интеграции с Claude Desktop и Cursor.
Для кого это
Разработчики SaaS, создающие многопользовательские приложения, которым нужно выявлять утечки данных между арендаторами
Разработчики MCP-серверов, создающие инструменты для работы с данными в разрезе арендаторов
Команды безопасности, которым нужна изоляция арендаторов в рамках CI/CD
Разработчики AI-агентов, которые хотят, чтобы их агенты сканировали код по запросу
Related MCP server: @squirex.dev/mcp-server
Зачем
Сканеры безопасности общего назначения (Snyk, Semgrep, CodeQL) не понимают паттерны изоляции арендаторов или архитектуру MCP-серверов. Утечки данных между арендаторами остаются незамеченными. Этот инструмент заполняет этот пробел с помощью 57 целенаправленных детерминированных правил.
Каждое правило является детерминированным и воспроизводимым. Никакого машинного обучения, никаких ложных предположений. Каждое правило проверяет конкретные паттерны кода, наличие защитных механизмов и пути потоков данных. Вы получаете одинаковые результаты при каждом запуске.
Установка
npm install -g mcp-tenant-isolation
# or use npx (no install needed)
npx mcp-tenant-isolation scan ./src
# or use Docker (no Node.js needed)
docker run --rm -v $(pwd):/code subodhkc/mcp-tenant-isolation scan /code/srcБыстрый старт
mti scan ./src
mti scan ./src --format sarif --output results.sarif
mti scan ./src --format markdown --output TENANT-ISOLATION-REPORT.md
mti scan ./src --format ai --output findings.json
mti scan ./src --severity HIGH
mti initДемо
Правила
42 Общих правила для многопользовательских систем
Префикс | Категория | Кол-во | Серьезность | Описание |
TCM | Управление контекстом арендатора | 6 | Критическая | ID арендатора из сессий, а не из ввода клиента. Распространение контекста через асинхронные границы. |
DBQ | Изоляция запросов к БД | 10 | Критическая | Каждый запрос, затрагивающий данные в разрезе арендатора, должен содержать фильтр по арендатору. |
IDOR | Предотвращение IDOR | 5 | Критическая | Поиск по ID должен проверять принадлежность арендатору. |
CSI | Изоляция кэша и сессий | 4 | Высокая | Ключи кэша и данные сессий должны быть в разрезе арендатора. |
API | Безопасность API | 3 | Высокая | Ограничение скорости с учетом арендатора и ограничение области видимости ответов. |
FSI | Изоляция файлового хранилища | 4 | Высокая | Доступ к S3, Blob и файловой системе должен быть в разрезе арендатора. |
LOG | Логирование и аудит | 4 | Средняя | Журналы аудита должны включать контекст арендатора. |
SCH | Схема и миграции | 6 | Высокая | Модели Prisma и SQL-миграции должны включать колонки арендатора. |
15 Специфических правил MCP
ID | Название | Серьезность | Описание |
MCP-001 | Ограничение видимости инструментов | Критическая | Обработчик инструмента не имеет фильтра разрешения/запрета на основе арендатора. |
MCP-002 | Префикс арендатора в ключе кэша | Критическая | Результаты инструмента кэшируются без префикса арендатора. |
MCP-003 | Привязка сессии к пользователю+арендатору | Критическая | ID сессии используется как единственная авторизация. |
MCP-004 | Обмен токенами (RFC 8693) | Высокая | Исходный токен передается вместо обмена токенами. |
MCP-005 | Ограничение скорости на арендатора | Средняя | Отсутствует ограничение скорости на вызовы инструментов для каждого арендатора. |
MCP-006 | Пространство имен векторного хранилища для арендатора | Высокая | Общее векторное хранилище без пространств имен арендаторов. |
MCP-007 | Инъекция в описание инструмента | Средняя | Описание инструмента может обойти изоляцию. |
MCP-008 | Область видимости хранилища учетных данных для арендатора | Критическая | Хранилище учетных данных хранит токены без привязки к арендатору. |
MCP-009 | Общий сервисный аккаунт | Высокая | Один общий ключ API для всех вызовов API арендаторов. |
MCP-010 | Очистка сессии при отключении | Средняя | Отсутствует детерминированная очистка сессии. |
MCP-011 | Идентификатор арендатора в телеметрии | Низкая | Телеметрия удаляет идентификатор арендатора. |
MCP-012 | Локальная привязка (127.0.0.1) | Высокая | MCP-сервер привязывается к 0.0.0.0 вместо 127.0.0.1. |
MCP-013 | Корневая директория файловой системы для арендатора | Высокая | Обработчик инструмента обращается к файловой системе без корня арендатора. |
MCP-014 | Утечка артефактов между арендаторами | Высокая | Хранилище артефактов без префикса арендатора. |
MCP-015 | Динамическое пространство имен инструментов | Средняя | Инструменты регистрируются без пространства имен арендатора. |
Архитектура
Конвейер сканера работает в шесть этапов:
Парсеры - Babel AST для TS/JS, парсер схемы Prisma, парсер SQL-миграций, обнаружение импорта MCP SDK
IR и граф потоков - Промежуточное представление, захватывающее источники, стоки, защитные механизмы, маршруты, определения инструментов MCP
Движок правил - 57 детерминированных правил, оцениваемых на основе IR. Каждое правило определяет источники, стоки, необходимые защитные механизмы
Фильтр ложных срабатываний - Обнаружение тестовых файлов, оценка достоверности, уточнение паттернов
Формирователи отчетов - Терминал (с вердиктом), JSON, SARIF 2.1.0, AI-дружественный JSON (с подсказками по исправлению), Markdown (отчет для публикации)
CLI и MCP-сервер -
mtiCLI с командами scan/init/rules/suppress/baseline/mcp. MCP-сервер предоставляет 4 инструмента
MCP-сервер
Пакет включает MCP-сервер для интеграции с AI-агентами. Он работает локально через транспорт stdio (не требует хостинга):
{
"mcpServers": {
"tenant-isolation": {
"command": "npx",
"args": ["-y", "mcp-tenant-isolation", "mcp"]
}
}
}Добавьте это в конфигурацию вашего Claude Desktop, Cursor или другого MCP-клиента, чтобы ваш AI-агент мог сканировать код на предмет проблем с изоляцией арендаторов по запросу.
Инструменты MCP
Инструмент | Описание |
| Сканировать путь к файлу или встроенный код. Возвращает структурированные результаты. |
| Возвращает все 57 правил с метаданными. Фильтруется по категории. |
| Возвращает детали правила, соответствие OWASP, ID CWE, предложения по исправлению. |
| Добавить подавление с причиной и сроком действия. |
Интеграция с CI/CD
Вариант 1: Готовое действие GitHub (самый простой)
Добавьте это в .github/workflows/tenant-isolation.yml:
name: Tenant Isolation Scan
on: [push, pull_request]
jobs:
scan:
runs-on: ubuntu-latest
permissions:
contents: read
security-events: write
steps:
- uses: actions/checkout@v4
- uses: subodhkc/mcp-tenant-isolation@v1
with:
path: ./src
severity: HIGH
fail-on: HIGHЗапускает сканирование, загружает SARIF в GitHub Code Scanning, создает артефакт отчета в Markdown и завершает workflow ошибкой, если обнаружены результаты HIGH или CRITICAL.
Вариант 2: Ручной npx
# .github/workflows/tenant-isolation.yml
name: Tenant Isolation Scan
on: [push, pull_request]
jobs:
scan:
runs-on: ubuntu-latest
permissions:
contents: read
security-events: write
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
- run: npx mcp-tenant-isolation scan ./src --format sarif --output results.sarif
- uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: results.sarifКоды выхода
Код | Значение |
0 | Результаты не найдены |
1 | Результаты найдены |
2 | Ошибка (неверная конфигурация, ошибка парсинга и т.д.) |
Интеграция с GitHub Code Scanning
Когда вы загружаете вывод SARIF с помощью github/codeql-action/upload-sarif@v3, результаты появляются на вкладке Security > Code scanning alerts вашего репозитория. Это работает как с бесплатными репозиториями, так и с репозиториями, где включен Advanced Security.
Что происходит:
mti scan --format sarif --output results.sarifгенерирует файл SARIF 2.1.0Действие
upload-sarifотправляет его в API сканирования кода GitHubКаждый результат становится оповещением сканирования кода с файлом, строкой, серьезностью и подсказкой по исправлению
Оповещения можно отклонять, исправлять или отслеживать непосредственно в интерфейсе GitHub
Аннотации к пул-реквестам появляются автоматически на измененных файлах
Требования:
permissions: security-events: writeв вашем workflowФайл SARIF должен быть создан до шага загрузки
Конфигурация
Создайте .mtirc.json в корне вашего проекта:
{
"rules": {
"severity": {
"DBQ-001": "HIGH",
"MCP-001": "CRITICAL"
},
"exclude": ["DBQ-010"]
},
"paths": {
"include": ["src/**/*"],
"exclude": ["**/*.test.ts", "**/*.spec.ts"]
},
"suppressions": ".mti-suppressions.json",
"baseline": ".mti-baseline.json"
}Расширенная конфигурация
{
"rules": {
"severity": { "DBQ-001": "HIGH" },
"exclude": ["DBQ-010"]
},
"paths": {
"include": ["src/**/*"],
"exclude": ["**/*.test.ts"]
},
"output": "terminal",
"framework": "nextjs-app-router",
"authHelpers": ["requireAuth", "getServerSession", "withAuth"],
"tenantGuards": ["organizationId", "tenantId", "workspaceId"],
"modelScopes": {
"userScoped": ["User", "UserSession"],
"global": ["Tenant", "AuditLog"]
},
"rulePacks": ["./custom-rules.json"],
"suppressions": ".mti-suppressions.json",
"baseline": ".mti-baseline.json"
}Поле | Описание |
| Формат вывода по умолчанию: |
| Подсказка фреймворка: |
| Пользовательские имена функций аутентификации для обнаружения (уменьшает ложные срабатывания) |
| Пользовательские имена переменных защиты арендатора помимо стандартных |
| Переопределение классификации области видимости модели (userScoped, global, tenantScoped) |
| Пути к пользовательским файлам наборов правил JSON |
Форматы отчетов
Формат | Флаг | Сценарий использования |
Терминал |
| Консоль разработчика с вердиктом пройдено/не пройдено |
JSON |
| Программное потребление, передача в другие инструменты |
SARIF |
| GitHub Code Scanning, Azure DevOps |
AI JSON |
| Потребление AI-агентом с подсказками по исправлению и контекстом |
Markdown |
| Отчет для публикации в PR, командном ревью, документации |
# Generate a Markdown report for a PR
mti scan ./src --format markdown --output TENANT-ISOLATION-REPORT.md
# Upload SARIF to GitHub Code Scanning
mti scan ./src --format sarif --output results.sarifТехнологический стек
Парсинг AST: @babel/parser (TypeScript, JSX), парсер схемы Prisma, парсер SQL-миграций
Движок правил: Декларативный паттерн RuleSpec с обнаружением защитных механизмов и сбором доказательств
CLI: Commander
MCP: @modelcontextprotocol/sdk (транспорт stdio)
Вывод: Терминал (с вердиктом), JSON, SARIF 2.1.0, AI JSON (с исправлением), Markdown
Тестирование: Vitest
План развития
v1.6.2 (Текущая)
57 правил (42 общих + 15 специфических для MCP)
Поддержка TypeScript и JavaScript
Анализ схемы Prisma
Анализ SQL-миграций (RLS, колонки арендатора, индексы)
CLI (mti) с выводом в терминал, JSON, SARIF, AI JSON, Markdown
Вердикт пройдено/не пройдено в терминале и отчетах Markdown
Подсказки по исправлению для всех 57 правил
MCP-сервер для интеграции с AI-агентами
Политика подавления с истечением срока
Отслеживание базовой линии с diff
Переопределение серьезности в .mtirc.json
Пользовательские наборы правил (JSON)
Настраиваемые вспомогательные функции аутентификации и защитные механизмы арендатора
Классификация области видимости модели с переопределениями конфигурации
Обнаружение фреймворка (Next.js, Express, Fastify)
Фильтрация путей, не относящихся к продакшну
v1.7.0 (Запланировано)
Поддержка Python (FastAPI, Django, Flask)
Анализ ORM SQLAlchemy
Режим наблюдения (mti scan --watch)
Расширение для VS Code
v2.0.0 (Будущее)
Тестовый полигон для состязания двух арендаторов во время выполнения
Поддержка языков Go и Ruby
Инкрементальное сканирование с кэшем AST
Ссылки
Лицензия
MIT. Бесплатно и с открытым исходным кодом.
This server cannot be deployed
Maintenance
Related MCP Connectors
Zero-config MCP security scanner for AI-generated apps. 25K+ vulnerability patterns.
Detects database migration table locks, terraform cost leaks, and OWASP API flaws.
Code security scanner for founders and small teams: leaked secrets, missing RLS, injection, CVEs
Hosted SQL Server MCP server for Claude, ChatGPT and Cursor, with each action switched per account.
Related MCP Servers
- AlicenseBqualityAmaintenanceSecurity MCP server with 300+ rules for AI-generated code. Scans Next.js, Supabase, Clerk, Stripe, Prisma, Hono, GraphQL and 20+ modules. Zero config, runs locally.391,673 npm6Apache 2.0
- FlicenseAqualityDmaintenanceMCP server that scans Salesforce Agentforce metadata for security vulnerabilities using 61+ SAST rules, integrating into AI coding workflows to guard against OWASP LLM top 10 risks.164 npm-
- AlicenseAqualityCmaintenanceMCP server for Cursor that scans codebases for security issues including hardcoded secrets, SAST, vulnerable dependencies, and IaC misconfigurations.7MIT
- AlicenseNot gradedqualityDmaintenanceMulti-language SAST and AI-powered fuzzing MCP server for Claude Code integration, enabling static and dynamic security analysis of code.MIT