Auditoria de Servidores MCP para Envenenamento de Ferramentas
Aviso de uso autorizado: Auditar servidores MCP pode conectar e sondar endpoints de ferramentas ativos. Escaneie apenas servidores que você possui ou está autorizado a avaliar. Trate as descrições de ferramentas escaneadas como entrada não confiável — não carregue um servidor MCP não auditado em um agente privilegiado. Sondar endpoints MCP de terceiros para SSRF ou fraquezas de autenticação sem permissão pode ser ilegal.
Visão Geral
O Protocolo de Contexto de Modelo (MCP) permite que agentes de IA descubram e chamem ferramentas externas anunciadas por servidores MCP. Cada ferramenta expõe um nome e uma descrição em linguagem natural que o LLM do agente lê antes de decidir chamá-la. No início de 2025, a Invariant Labs divulgou que este campo de descrição é uma superfície de ataque: um servidor malicioso pode incorporar instruções ocultas na descrição de uma ferramenta (um ataque de envenenamento de ferramenta, OWASP MCP03:2025), e um modelo capaz as seguirá silenciosamente — exfiltrando arquivos, vazando segredos ou redirecionando chamadas de ferramentas — enquanto retorna uma resposta de aparência normal ao usuário. Como as descrições das ferramentas são carregadas no contexto do agente, o envenenamento de ferramentas é efetivamente uma injeção de prompt indireta entregue através da cadeia de suprimentos (MITRE ATLAS AML.T0010 Comprometimento da Cadeia de Suprimentos de ML).
Além do envenenamento, os servidores MCP introduzem riscos clássicos de infraestrutura: sombreamento de ferramentas (um servidor malicioso substitui o comportamento de uma ferramenta confiável), rug pulls (a descrição de uma ferramenta muda após a aprovação do usuário), fluxos tóxicos (uma combinação de ferramentas que permite a exfiltração de dados), SSRF em ferramentas que buscam URLs no lado do servidor e exposição não autenticada de servidores MCP vinculados a interfaces de rede. Esta skill audita servidores MCP de ponta a ponta usando mcp-scan da Invariant Labs para análise estática e de runtime, além de verificações manuais para SSRF e autenticação, e fixação de ferramentas para detectar rug pulls.
Quando Usar
- Antes de adicionar um novo servidor MCP a uma pilha de agentes (Claude Desktop, Cursor, VS Code, Windsurf, agentes personalizados).
- Durante uma revisão de segurança de um servidor MCP desenvolvido internamente.
- Ao validar que ferramentas aprovadas não mudaram silenciosamente (detecção de rug pull).
- Como um gate de CI/CD que escaneia configurações MCP e definições de SKILL/ferramenta a cada alteração.
- Durante a resposta a incidentes quando um agente tomou ações inesperadas consistentes com uma ferramenta envenenada.
Pré-requisitos
- Python 3.10+ e
uv(parauvx), ou pip. - O(s) arquivo(s) de configuração MCP que você deseja escanear (ex.:
~/.cursor/mcp.json,~/.vscode/mcp.json, configuração do Claude Desktop). - Instale as ferramentas:
# uv fornece uvx (runner recomendado para mcp-scan)
curl -LsSf https://astral.sh/uv/install.sh | sh # ou: pipx install uv
# mcp-scan (Invariant Labs) — não requer instalação global com uvx
uvx mcp-scan@latest --help
# Para o modo proxy de runtime (extra separado)
uvx --with "mcp-scan[proxy]" mcp-scan@latest proxy --help
# Auxiliares de sondagem manual
pip install requests mcp
Objetivos
- Escanear estaticamente todos os servidores MCP instalados em busca de envenenamento de ferramentas, sombreamento, rug pulls e fluxos tóxicos.
- Inspecionar descrições brutas de ferramentas/prompts/recursos em busca de instruções ocultas ou ofuscadas.
- Fixar hashes de ferramentas para detectar alterações de descrição pós-aprovação (defesa contra rug pull).
- Testar ferramentas que buscam URLs para Server-Side Request Forgery (SSRF).
- Verificar se os servidores MCP são autenticados e não expostos em interfaces não confiáveis.
- Opcionalmente, impor proteções de runtime com o proxy mcp-scan.
Mapeamento MITRE ATT&CK
| ID | Nome Oficial | Relevância |
|---|---|---|
| AML.T0010 | Comprometimento da Cadeia de Suprimentos de ML | Um servidor MCP de terceiros envenenado é um comprometimento da cadeia de suprimentos do agente |
| AML.T0051.001 | Injeção de Prompt em LLM: Indireta | Descrições de ferramentas envenenadas são injeção indireta no contexto do agente |
| AML.T0053 | Comprometimento de Plugin de LLM | Ferramentas MCP são os plugins do agente; o envenenamento as compromete |
| AML.T0057 | Vazamento de Dados de LLM | Payload comum de uma ferramenta envenenada: exfiltrar arquivos/segredos |
Fluxo de Trabalho
1. Escaneamento estático de configurações MCP instaladas
O mcp-scan descobre automaticamente locais de configuração conhecidos; você também pode passar um caminho explicitamente.
# Escaneia todas as configurações MCP auto-descobertas
uvx mcp-scan@latest
# Escaneia um arquivo de configuração específico
uvx mcp-scan@latest ~/.vscode/mcp.json
# Emite JSON legível por máquina para CI
uvx mcp-scan@latest --json ~/.cursor/mcp.json > mcp_scan_report.json
O mcp-scan sinaliza envenenamento de ferramentas, sombreamento de ferramentas, escalada entre origens, rug pulls e fluxos tóxicos.
2. Inspecionar descrições brutas de ferramentas
Imprima toda descrição de ferramenta/prompt/recurso sem verificação e, em seguida, leia-as em busca de instruções ocultas, blocos <important> ou texto imperativo direcionado ao modelo.
uvx mcp-scan@latest inspect ~/.cursor/mcp.json
Procure por bandeiras vermelhas: instruções ao assistente ("não conte ao usuário", "leia ~/.ssh/id_rsa"), documentação falsa aninhada, texto de largura zero/contrabandeado por Unicode ou diretivas para chamar outras ferramentas.
3. Fixar hashes de ferramentas para detectar rug pulls
O mcp-scan rastreia hashes de descrições de ferramentas para que uma alteração silenciosa posterior seja sinalizada. Execute escaneamentos em uma programação; uma incompatibilidade de hash em uma ferramenta previamente aprovada indica um rug pull.
# Execute regularmente; o mcp-scan relata hashes de ferramentas alterados desde a última aprovação
uvx mcp-scan@latest ~/.cursor/mcp.json
4. Enumerar ferramentas programaticamente e auditar metadados
Conecte-se ao servidor com o SDK MCP oficial e inspecione o esquema anunciado diretamente.
# enumerate_tools.py (exemplo de servidor MCP via stdio)
import asyncio
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client
async def main():
params = StdioServerParameters(command="node", args=["./suspect-mcp-server.js"])
async with stdio_client(params) as (read, write):
async with ClientSession(read, write) as session:
await session.initialize()
tools = await session.list_tools()
for t in tools.tools:
print(f"{t.name}: {len(t.description or '')} caracteres")
print((t.description or "")[:400])
asyncio.run(main())
5. Testar ferramentas que buscam URLs para SSRF
Se uma ferramenta aceitar uma URL e buscá-la no lado do servidor, tente alcançar alvos internos de metadados/loopback (apenas em sistemas que você possui).
# ssrf_probe.py
import asyncio
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client
SSRF_TARGETS = [
"http://169.254.169.254/latest/meta-data/", # AWS IMDS
"http://127.0.0.1:22/", "http://localhost:6379/", "file:///etc/passwd",
]
async def main():
params = StdioServerParameters(command="node", args=["./suspect-mcp-server.js"])
async with stdio_client(params) as (r, w):
async with ClientSession(r, w) as s:
await s.initialize()
for url in SSRF_TARGETS:
res = await s.call_tool("fetch_url", {"url": url})
body = str(res.content)[:200]
print(f"[SSRF?] {url} -> {body}")
asyncio.run(main())
6. Verificar autenticação e exposição de rede
Verifique se servidores MCP remotos (transporte HTTP/SSE) exigem autenticação e não estão vinculados a 0.0.0.0 em redes não confiáveis.
# Confirme se um endpoint MCP SSE/HTTP responde sem credenciais
curl -s -i http://mcp-host:8000/sse | head -n 20
# Verifique as interfaces de escuta de um servidor MCP em execução local
ss -tlnp | grep -E ':(8000|3000|6277)'
Um endpoint MCP que retorna listagens de ferramentas ou aceita tools/call sem autenticação é exposição não autenticada — corrija com um token/OAuth e vincule a localhost ou a um gateway autenticado.
7. Impor proteções de runtime (opcional)
Para proteção contínua, direcione o tráfego MCP do agente através do proxy mcp-scan, que verifica chamadas de ferramentas, restrições de fluxo de dados, PII e injeção indireta em tempo real.
uvx --with "mcp-scan[proxy]" mcp-scan@latest proxy
8. Relatar descobertas
Documente cada descoberta com servidor, ferramenta, evidência (a descrição envenenada / resposta SSRF / listagem não autenticada), gravidade e mapeamento ATLAS. Recomende remover ou isolar servidores envenenados, adicionar autenticação, fixar ferramentas aprovadas e habilitar o proxy.
Ferramentas e Recursos
| Ferramenta | Propósito | Origem |
|---|---|---|
| mcp-scan | Scanner de segurança MCP estático + runtime | https://github.com/invariantlabs-ai/mcp-scan |
| SDK Python MCP | Enumeração/chamada programática de ferramentas | https://github.com/modelcontextprotocol/python-sdk |
| OWASP MCP Top 10 | Referência de risco MCP (MCP03 Envenenamento de Ferramenta) | https://owasp.org/www-project-mcp-top-10/ |
| Blog Invariant Labs | Divulgação de envenenamento de ferramentas | https://invariantlabs.ai/blog/introducing-mcp-scan |
| MITRE ATLAS | Taxonomia de técnicas de ameaças de IA | https://atlas.mitre.org/ |
Referência de Ameaças MCP
| Ameaça | Descrição | Detecção |
|---|---|---|
| Envenenamento de ferramenta | Instruções ocultas na descrição da ferramenta | Escaneamento mcp-scan / inspeção |
| Sombreamento de ferramenta | Servidor malicioso substitui ferramenta confiável | Verificações de origem cruzada mcp-scan |
| Rug pull | Descrição muda após aprovação | Fixação de ferramenta (hash) mcp-scan |
| Fluxo tóxico | Combinação de ferramentas que permite exfiltração | Análise de fluxo tóxico mcp-scan |
| SSRF | Ferramenta de busca de URL atinge alvos internos | ssrf_probe contra servidor próprio |
| Exposição não autenticada | Endpoint MCP sem autenticação | curl/interface ss e verificação de autenticação |
Critérios de Validação
- Todas as configurações MCP instaladas escaneadas estaticamente com mcp-scan
- Descrições brutas de ferramentas/prompts/recursos inspecionadas para instruções ocultas
- Hashes de ferramentas fixados e detecção de rug pull habilitada
- Ferramentas enumeradas programaticamente via SDK MCP
- Ferramentas que buscam URLs testadas para SSRF contra alvos próprios
- Autenticação e exposição de rede de servidores remotos verificadas
- Proteções de proxy de runtime avaliadas ou implantadas, quando apropriado
- Descobertas mapeadas para MITRE ATLAS AML.T0010 e OWASP MCP03:2025
- Gravidade atribuída e remediação documentada para cada descoberta
- Re-escaneamento agendado para capturar futuros rug pulls