
Como Detectar Vazamento de Dados entre Inquilinos em Servidores MCP e SaaS Multi-Inquilino
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
Servidor MCP 1.1.0 da endoflife.ai: Exposição KEV, verificações SBOM e dispositivos de borda para agentes de IA
O servidor MCP da endoflife.ai agora possui dez ferramentas de leitura. Novas funcionalidades incluem exposição a vulnerabilidades conhecidas e status de dispositivos de borda, essenciais para a segurança de versões de software.

O que os agentes de IA realmente veem ao buscar seu Ator Apify
O artigo explora como os agentes de IA interagem com o servidor MCP da Apify, destacando a importância da descrição e otimização dos Ators para serem encontrados. Inclui uma análise de como os resultados de busca diferem entre humanos e agentes.
Como o Protocolo de Contexto do Modelo (MCP) muda para sempre o lançamento de recursos em SaaS
O Protocolo de Contexto do Modelo (MCP) é mais do que leitura de dados; sua aplicação mais poderosa é a orquestração de aplicativos em tempo de execução, permitindo que agentes de IA gerenciem anúncios e guias de onboarding sem código efêmero.
Gostou do conteudo?
Receba toda semana as principais novidades sobre WebMCP.