
Como Detectar Vazamento de Dados entre Inquilinos em Servidores MCP e SaaS Multi-Inquilino
Curadoria, tradução e análise: Redação Triplo Hub.
A Lacuna de Segurança Oculta em Servidores MCP Multi-Tenant
Quando você constrói uma aplicação SaaS multi-tenant ou um servidor MCP (Modelo de Protocolo de Contexto) que atende a várias organizações, vazamento de dados entre tenants é uma das vulnerabilidades mais perigosas que você pode lançar. Um único filtro de organizationId ausente em uma consulta de banco de dados pode expor os dados de um tenant a outro — e scanners de segurança tradicionais como Snyk, Semgrep e CodeQL não detectam esses padrões.
É por isso que eu criei mcp-tenant-isolation — um scanner de análise estática com 57 regras determinísticas especificamente projetadas para detectar falhas de isolamento de tenants em bases de código multi-tenant.
O Que É Isolamento de Tenants?
O isolamento de tenants garante que os dados pertencentes a uma organização (tenant) nunca sejam acessíveis a outra. Em um aplicativo SaaS multi-tenant, cada consulta de banco de dados, leitura de cache e acesso a arquivos deve ser restrito ao organizationId do tenant atual.
A falha mais comum se parece com isto:
// VULNERÁVEL: Sem filtro de organizationId
const users = await prisma.user.findMany({
where: { role: 'admin' }
});
// SEGURO: Consulta restrita ao tenant
const users = await prisma.user.findMany({
where: { role: 'admin', organizationId: ctx.orgId }
});
Parece óbvio em isolamento. Mas em uma base de código com mais de 100 rotas de API, dezenas de funções de biblioteca e cadeias de middleware complexas, filtros de tenants ausentes são fáceis de perder na revisão de código e impossíveis para ferramentas SAST tradicionais detectarem.
Por Que Scanners Tradicionais Perdem Isso
Ferramentas como Snyk e Semgrep são excelentes em detectar:
- Injeção de SQL
- XSS
- Vulnerabilidades de dependência
- Vazamento de segredos
Mas elas não entendem o contexto do tenant. Elas não sabem que organizationId é o limite do tenant. Elas não rastreiam quais funções requerem guardas de tenant. Elas não podem te dizer que prisma.user.findMany({ where: { role: 'admin' } }) está faltando um filtro crítico de tenant.
mcp-tenant-isolation preenche essa lacuna com 57 regras em 7 categorias:
Categorias de Regras
| Categoria | Regras | O Que Detecta |
|---|---|---|
| Consultas de Banco de Dados (DBQ) | 12 | Falta de organizationId em findMany, findUnique, updateMany, deleteMany, groupBy, aggregate
|
| Esquema (SCH) | 6 | Colunas de tenant ausentes, índices compostos ausentes, políticas RLS ausentes |
| Isolamento de Armazenamento de Arquivos (FSI) | 4 | Chaves S3/Blob não restritas, prefixo de tenant ausente em caminhos de arquivos |
| Escopo de Chaves de Cache (CKS) | 5 | Chaves Redis/memoização sem prefixo de tenant |
| IDOR | 8 | Referências diretas inseguras a objetos — acessando recursos por ID sem verificação de propriedade |
| Registro (LOG) | 6 | Falta de contexto de tenant em logs estruturados |
| Específico de MCP (MCP) | 15 | Visibilidade da ferramenta, prefixo de cache, vinculação de sessão, isolamento de cofre de credenciais, superfície de injeção de prompt |
Início Rápido
Instalação
npm install -g mcp-tenant-isolation
Escaneie sua base de código
mti scan ./src
Saída
O scanner produz um veredicto claro de aprovação/reprovação com descobertas detalhadas:
╔══════════════════════════════════════════╗
║ Scanner de Isolamento de Tenant MCP v1.6.2 ║
║ Veredicto: REPROVADO ║
╚══════════════════════════════════════════╝
Descobertas: 47 ativas, 12 suprimidas, 3 de baseline
DBQ-001 ALTO app/api/users/route.ts:23
Falta organizationId em prisma.user.findMany()
Remediação: Adicione organizationId à cláusula where:
where: { ..., organizationId: ctx.orgId }
IDOR-003 ALTO app/api/documents/[id]/route.ts:45
Sem verificação de propriedade após findUnique por ID
Remediação: Verifique result.organizationId === ctx.orgId
Integração CI/CD
Ações do GitHub (Ação Pré-construída)
- uses: subodhkc/mcp-tenant-isolation@v1
with:
path: ./src
format: sarif
npx Manual
- name: Executar escaneamento de isolamento de tenant
run: npx mcp-tenant-isolation scan ./src --format sarif --output scan.sarif
- name: Enviar para a Análise de Código do GitHub
uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: scan.sarif
A saída SARIF se integra diretamente com Segurança Avançada do GitHub — as descobertas aparecem na aba de Segurança do seu repositório ao lado dos resultados do CodeQL.
Integração do Servidor MCP
O pacote inclui um servidor MCP com 4 ferramentas que agentes de IA (Claude Desktop, Cursor, Cline) podem usar:
{
"mcpServers": {
Empresas brasileiras que utilizam soluções SaaS multi-inquilino devem estar atentas ao vazamento de dados entre inquilinos, uma vulnerabilidade crítica. A implementação de ferramentas como mcp-tenant-isolation pode ajudar a garantir a segurança dos dados e a conformidade com regulamentações de privacidade.
Noticias relacionadas

Contagem de ferramentas é custo de contexto: por que meu servidor MCP expõe 6 ferramentas em vez de 26
O artigo discute a importância de limitar o número de ferramentas expostas em um servidor MCP para otimizar o desempenho e reduzir custos operacionais.
Comparação de Servidores MCP da Zillow: 6 Testados, 3 Funcionam
O artigo analisa seis servidores MCP de terceiros para acessar dados de aluguel no Zillow, destacando a eficácia e latência de cada um.

Controle Direto do Claude sobre Mensagens In-App em SaaS
O artigo explora como o Model Context Protocol (MCP) pode ser utilizado para orquestração de aplicativos em tempo real, permitindo que agentes de IA gerenciem mensagens in-app sem a necessidade de código UI efêmero.
Gostou do conteudo?
Receba toda semana as principais novidades sobre WebMCP.