Skip to main content
Glama

mcp-tenant-isolation

Статический анализатор для многопользовательских SaaS и MCP-серверов. Выявляет утечки данных между арендаторами до попадания в продакшн.

57 детерминированных правил, охватывающих изоляцию арендаторов, фильтры запросов к БД, IDOR, область видимости ключей кэша, RLS, пробелы в схеме и специфические риски MCP (видимость инструментов, префикс кэша, привязка сессии, хранилище учетных данных). Работает с Prisma, Drizzle, сырым SQL, Next.js, Express и Fastify. Включает MCP-сервер для интеграции с Claude Desktop и Cursor.

npm version npm downloads CI Docker License: MIT

Для кого это

  • Разработчики 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

Демо

Terminal Demo

Правила

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

Динамическое пространство имен инструментов

Средняя

Инструменты регистрируются без пространства имен арендатора.

Архитектура

Конвейер сканера работает в шесть этапов:

  1. Парсеры - Babel AST для TS/JS, парсер схемы Prisma, парсер SQL-миграций, обнаружение импорта MCP SDK

  2. IR и граф потоков - Промежуточное представление, захватывающее источники, стоки, защитные механизмы, маршруты, определения инструментов MCP

  3. Движок правил - 57 детерминированных правил, оцениваемых на основе IR. Каждое правило определяет источники, стоки, необходимые защитные механизмы

  4. Фильтр ложных срабатываний - Обнаружение тестовых файлов, оценка достоверности, уточнение паттернов

  5. Формирователи отчетов - Терминал (с вердиктом), JSON, SARIF 2.1.0, AI-дружественный JSON (с подсказками по исправлению), Markdown (отчет для публикации)

  6. CLI и MCP-сервер - mti CLI с командами 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

Инструмент

Описание

scan_tenant_isolation

Сканировать путь к файлу или встроенный код. Возвращает структурированные результаты.

list_tenant_isolation_rules

Возвращает все 57 правил с метаданными. Фильтруется по категории.

explain_tenant_isolation_rule

Возвращает детали правила, соответствие OWASP, ID CWE, предложения по исправлению.

suppress_tenant_isolation_finding

Добавить подавление с причиной и сроком действия.

Интеграция с 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.

Что происходит:

  1. mti scan --format sarif --output results.sarif генерирует файл SARIF 2.1.0

  2. Действие upload-sarif отправляет его в API сканирования кода GitHub

  3. Каждый результат становится оповещением сканирования кода с файлом, строкой, серьезностью и подсказкой по исправлению

  4. Оповещения можно отклонять, исправлять или отслеживать непосредственно в интерфейсе GitHub

  5. Аннотации к пул-реквестам появляются автоматически на измененных файлах

Требования:

  • 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"
}

Поле

Описание

output

Формат вывода по умолчанию: terminal, json, sarif, ai, markdown

framework

Подсказка фреймворка: nextjs-app-router, nextjs-pages, express, fastify, auto

authHelpers

Пользовательские имена функций аутентификации для обнаружения (уменьшает ложные срабатывания)

tenantGuards

Пользовательские имена переменных защиты арендатора помимо стандартных

modelScopes

Переопределение классификации области видимости модели (userScoped, global, tenantScoped)

rulePacks

Пути к пользовательским файлам наборов правил JSON

Форматы отчетов

Формат

Флаг

Сценарий использования

Терминал

--format terminal (по умолчанию)

Консоль разработчика с вердиктом пройдено/не пройдено

JSON

--format json

Программное потребление, передача в другие инструменты

SARIF

--format sarif

GitHub Code Scanning, Azure DevOps

AI JSON

--format ai

Потребление AI-агентом с подсказками по исправлению и контекстом

Markdown

--format 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. Бесплатно и с открытым исходным кодом.

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    A
    maintenance
    Security 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.
    39
    1,673 npm
    6
    Apache 2.0
  • A
    license
    A
    quality
    C
    maintenance
    MCP server for Cursor that scans codebases for security issues including hardcoded secrets, SAST, vulnerable dependencies, and IaC misconfigurations.
    7
    MIT