MCPwner
Teste automatizado de vulnerabilidades de segurança
Documentação
MCPwner
Cuidado com o Texugo
Servidor do Model Context Protocol para pesquisa autônoma de segurança
Compatível com:
Sumário
- Visão Geral
- Fluxo de Trabalho
- Ferramentas Integradas
- Instalação
- Documentação
- Arquitetura
- Persistência de Dados
- Licença
Visão Geral
MCPwner é um servidor MCP que oferece ao seu agente LLM um kit completo de segurança ofensiva. Ele expõe mais de 55 ferramentas containerizadas por meio de uma única interface MCP - SAST, SCA, segredos, IaC, reconhecimento, DAST, fuzzing guiado por cobertura, CodeQL (consultas integradas e personalizadas), um navegador headless, um servidor de callback OOB, um sandbox de scripts PoC com oráculos determinísticos e um registro persistente de descobertas.
A arquitetura é projetada para pesquisa de vulnerabilidades conduzida por agentes: uma única sessão de agente - independente de modelo (Claude, Cursor, Kiro, Gemini ou qualquer agente de codificação compatível com MCP) - percorre as fases de pesquisa (reconhecimento, auditoria de código, validação de PoC, revisão adversarial), registrando cada etapa no registro compartilhado de descobertas. Cada descoberta progride da hipótese à prova empírica e ao relatório verificado - "sem exploit, sem relatório".
Nota: Este projeto está em desenvolvimento ativo. Saiba mais sobre MCPs aqui.
Fluxo de Trabalho
MCPwner é o servidor de ferramentas; seu agente LLM é o cérebro. Um engajamento típico de pesquisa profunda:
| Fase | O que acontece | Ferramentas MCPwner usadas |
|---|---|---|
| Workspace | Clonar alvo, detectar stack | create_workspace, detect_languages |
| Descobrir | Varredura ampla por padrões conhecidos | run_sast_scan, run_sca_scan, run_secrets_scan, run_reconnaissance_chain, execute_query |
| Triagem | Eliminar falsos positivos, comprovar alcançabilidade | index_code_facts, query_code_facts, execute_query (CodeQL personalizado) |
| Pesquisa | Caçar bugs inéditos via diffs e análise de variantes | diff_discovery, run_fuzzing_scan, CodeQL personalizado |
| Provar | Validação empírica com oráculos determinísticos | run_poc_scan (sandbox), run_dast_scan, run_utilities_scan (chromium) |
| Relatório | Apenas descobertas verificadas por oráculo são entregues | upsert_finding, generate_report |
O registro usa upserts com merge profundo, de modo que o veredito review de uma fase posterior nunca sobrescreve os dados poc de uma fase anterior (e vice-versa) - e permanece consistente se o contexto do agente for redefinido no meio do engajamento.
Ferramentas Integradas
Reconhecimento
![]() | ![]() | ![]() | ![]() | ![]() |
|---|---|---|---|---|
| Subfinder | Amass | Nmap | Masscan | ffuf |
![]() | ![]() | ![]() | ![]() | |
|---|---|---|---|---|
| bbot | httpx | Katana | gau | Arjun |
![]() | ![]() |
|---|---|
| wafw00f | Kiterunner |
Teste Estático de Segurança de Aplicações (SAST)
![]() | ![]() | ![]() | ![]() | ![]() |
|---|---|---|---|---|
| CodeQL | Psalm | Gosec | Bandit | Semgrep |
![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
|---|---|---|---|---|---|
| Brakeman | PMD | NodeJsScan | Joern | YASA | OpenGrep |
Fuzzing de Código-Fonte
![]() | ![]() | ![]() | ![]() |
|---|---|---|---|
| Atheris | Jazzer | Jazzer.js | PHP-Fuzzer |
Varredura de Segredos
![]() | ![]() | ![]() | ![]() | ![]() |
|---|---|---|---|---|
| Gitleaks | TruffleHog | detect-secrets | Whispers | Hawk-Eye |
Análise de Composição de Software (SCA)
![]() | ![]() | ![]() | ![]() |
|---|---|---|---|
| Grype | Syft | OSV-Scanner | Retire.js |
Segurança de Infraestrutura e IaC
![]() | ![]() | ![]() | ![]() | ![]() |
|---|---|---|---|---|
| Checkov | KICS | Terrascan | TFSec | Hadolint |
Teste Dinâmico de Segurança de Aplicações (DAST)
![]() | ![]() | ![]() | ![]() | ![]() |
|---|---|---|---|---|
| sqlmap | NoSQLMap | Commix | Dalfox | SSTImap |
![]() | ![]() | ![]() |
|---|---|---|
| SSRFmap | jwt_tool | interactsh |
Utilitários
![]() | ![]() | ![]() | ![]() | ![]() |
|---|---|---|---|---|
| Linguist | WireMock | Mitmproxy | aiohttp | Chromium w. Playwright |
Validação de PoC
| PoC-Script Sandbox |
|---|
| Executor de oráculo determinístico |
O sandbox de PoC executa scripts de exploit Python/bash escritos pelo agente dentro da rede do alvo e retorna um veredito de oráculo determinístico (aprovado/reprovado com base no código de saída ou em marcadores explícitos). É assim que o MCPwner comprova bugs de lógica, IDOR/BOLA, condições de corrida e bypasses de controle de acesso que DAST prontos para uso não conseguem expressar.
Instalação
Pré-requisitos
Requisitos do Sistema:
- Docker Engine 20.10+ e Docker Compose 2.0+
- Mínimo de 8GB de RAM (16GB recomendados para executar várias ferramentas)
- 20GB de espaço livre em disco (as imagens das ferramentas de segurança são grandes)
- Plataformas suportadas: Linux, macOS, Windows (com WSL2)
Cliente MCP:
- Claude Desktop, Cursor, Kiro ou qualquer cliente compatível com MCP
Configuração
-
Clone o repositório:
git clone https://github.com/nedlir/mcpwner.git cd mcpwner -
Configure o servidor:
cp .env.example .env cp config/config.yaml.example config/config.yaml -
Inicie os serviços:
docker compose up -d --build -
Verifique se os serviços estão em execução:
docker compose ps
Conecte Sua IDE
Depois que os contêineres Docker estiverem em execução, adicione o MCPwner ao seu cliente MCP.
Registro Dinâmico de Ferramentas: O MCPwner usa Docker Compose profiles para categorias de ferramentas opcionais. A variável COMPOSE_PROFILES do arquivo .env controla quais contêineres iniciam. O servidor MCP verifica os contêineres em execução na inicialização e registra apenas ferramentas saudáveis - se um contêiner estiver inativo, suas ferramentas simplesmente não aparecem. O Linguist (detecção de idioma / índice de fatos de código) é executado incondicionalmente; os utilitários de teste dinâmico (Chromium, WireMock, mitmproxy, fuzzer) são opcionais e são iniciados com os perfis dast e poc.
Instalação com um clique (requer Docker em execução):
Configuração Manual:
Adicione ao seu arquivo de configuração do MCP (claude_desktop_config.json, mcp.json, etc.):
{
"mcpServers": {
"mcpwner": {
"command": "docker",
"args": ["exec", "-i", "mcpwner-server", "python", "src/server.py"],
"env": {}
}
}
}
Reinicie seu cliente MCP para carregar a nova configuração do servidor.
Escaneando Projetos Locais
Monte seus projetos no contêiner adicionando um volume em docker-compose.yaml:
services:
mcpwner:
volumes:
- /path/to/your/projects:/mnt/projects:ro
Em seguida, use create_workspace com source_type="local" e source="/mnt/projects/my-project".
Documentação
Guias adicionais estão no wiki do projeto:
- Início rápido - inicie a frota de ferramentas com
COMPOSE_PROFILESe conecte o servidor MCP ao seu cliente. - Configuração -
.env/COMPOSE_PROFILES,config.yamle o mapa de portas das ferramentas. - Solução de problemas - ferramentas ausentes, contêineres não saudáveis e falhas na construção de imagens.
- Adicionando uma ferramenta - conecte um novo contêiner de scanner à frota e ao registro de ferramentas.
Contribuindo? Veja CONTRIBUTING.md para estilo de código, hooks de pre-commit e testes.
Arquitetura
graph LR
subgraph IDE[" "]
LLM[🤖<br/>LLM]
Client[MCP Client]
LLM -.-> Client
end
Server[MCPwner Server]
SAST[SAST Tools]
Secrets[Secrets Scanning]
SCA[SCA Tools]
Recon[Reconnaissance]
CodeQL[CodeQL Service]
Linguist[Language Detection]
Utilities[Utilities]
IaC[IaC Security]
Fuzzing[Source Fuzzing]
DAST[DAST Tools]
PoC[PoC Sandbox]
Client -->|JSON-RPC 2.0| Server
Server -->|HTTP| SAST
Server -->|HTTP| Secrets
Server -->|HTTP| SCA
Server -->|HTTP| Recon
Server -->|HTTP| CodeQL
Server -->|HTTP| Linguist
Server -->|HTTP| Utilities
Server -->|HTTP| IaC
Server -->|HTTP| Fuzzing
Server -->|HTTP| DAST
Server -->|HTTP| PoC
style LLM fill:#7C3AED,stroke:#5B21B6,stroke-width:3px,color:#fff
style Client fill:#4A90E2,stroke:#2E5C8A,stroke-width:3px,color:#fff
style Server fill:#F5A623,stroke:#C17D11,stroke-width:3px,color:#fff
style SAST fill:#E74C3C,stroke:#C0392B,stroke-width:2px,color:#fff
style Secrets fill:#9B59B6,stroke:#7D3C98,stroke-width:2px,color:#fff
style SCA fill:#1ABC9C,stroke:#16A085,stroke-width:2px,color:#fff
style Recon fill:#00BCD4,stroke:#0097A7,stroke-width:2px,color:#fff
style CodeQL fill:#E67E22,stroke:#CA6F1E,stroke-width:2px,color:#fff
style Linguist fill:#3498DB,stroke:#2874A6,stroke-width:2px,color:#fff
style Utilities fill:#6D28D9,stroke:#4C1D95,stroke-width:2px,color:#fff
style IaC fill:#059669,stroke:#047857,stroke-width:2px,color:#fff
style Fuzzing fill:#B91C1C,stroke:#7F1D1D,stroke-width:2px,color:#fff
style DAST fill:#D35400,stroke:#A04000,stroke-width:2px,color:#fff
style PoC fill:#DC2626,stroke:#991B1B,stroke-width:2px,color:#fff
style IDE fill:none,stroke:#ddd,stroke-width:2px,stroke-dasharray: 5 5
Princípios de Design:
- Isolamento de contêineres para execução de ferramentas de segurança
- Saída padronizada (SARIF/JSON) para consumo por LLM
- Registro dinâmico de ferramentas - apenas contêineres saudáveis aparecem como ferramentas
- Registro persistente de descobertas com semântica de mesclagem profunda entre fases de pesquisa
- Oráculos determinísticos para validação de PoC (código de saída, marcadores, callbacks OOB, execução de XSS)
Fluxo de Trabalho do Agente
O MCPwner é uma infraestrutura de ferramentas. Uma sessão de agente única - independente de modelo (Claude, Cursor, Kiro, Gemini ou qualquer agente de codificação compatível com MCP) - conduz todo o engajamento, executando cada fase por si só (recon → mapeamento de API → ambiente → auditoria de código → pesquisa de vulnerabilidades → PoC → revisão) e registrando o progresso no registro de descobertas. Não há serviço de orquestração separado ou arquivo de configuração: o MCPwner expõe ferramentas, o agente fornece o fluxo de trabalho.
Para uma subtarefa longa e isolada - canonicamente, montar e conduzir um ambiente alvo vivo em um contêiner - o agente pode opcionalmente transferir para uma sessão auxiliar se seu host suportar uma, mas o fluxo nunca depende disso.
Persistência de Dados
O MCPwner persiste metadados do espaço de trabalho, bancos de dados CodeQL e descobertas entre reinicializações de contêineres usando armazenamento baseado em arquivos no volume Docker compartilhado (/workspaces/.metadata/). O registro de descobertas está sempre disponível (sem gate de saúde do contêiner) - é assim que o agente rastreia descobertas entre fases e recupera o estado após um reset de contexto.
Limpeza do Espaço de Trabalho:
delete_files=True, delete_metadata=False- Liberar espaço em disco, preservar históricodelete_files=True, delete_metadata=True- Remoção completadelete_files=False, delete_metadata=True- Remover da lista, manter arquivos




















































