MCPwner

Teste automatizado de vulnerabilidades de segurança

Documentação

MCPwner

MCPwner Badger Avatar

Cuidado com o Texugo

Servidor do Model Context Protocol para pesquisa autônoma de segurança

Docker MCP Python License

Compatível com:

Kiro Cursor Claude VS Code Windsurf


Sumário

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:

FaseO que aconteceFerramentas MCPwner usadas
WorkspaceClonar alvo, detectar stackcreate_workspace, detect_languages
DescobrirVarredura ampla por padrões conhecidosrun_sast_scan, run_sca_scan, run_secrets_scan, run_reconnaissance_chain, execute_query
TriagemEliminar falsos positivos, comprovar alcançabilidadeindex_code_facts, query_code_facts, execute_query (CodeQL personalizado)
PesquisaCaçar bugs inéditos via diffs e análise de variantesdiff_discovery, run_fuzzing_scan, CodeQL personalizado
ProvarValidação empírica com oráculos determinísticosrun_poc_scan (sandbox), run_dast_scan, run_utilities_scan (chromium)
RelatórioApenas descobertas verificadas por oráculo são entreguesupsert_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

SubfinderAmassNmapMasscanffuf
bbothttpxKatanagauArjun
wafw00fKiterunner

Teste Estático de Segurança de Aplicações (SAST)

CodeQLPsalmGosecBanditSemgrep

BrakemanPMDNodeJsScanJoernYASAOpenGrep

Fuzzing de Código-Fonte

AtherisJazzerJazzer.jsPHP-Fuzzer

Varredura de Segredos

GitleaksTruffleHogdetect-secretsWhispersHawk-Eye

Análise de Composição de Software (SCA)

GrypeSyftOSV-ScannerRetire.js

Segurança de Infraestrutura e IaC

CheckovKICSTerrascanTFSecHadolint

Teste Dinâmico de Segurança de Aplicações (DAST)

sqlmapNoSQLMapCommixDalfoxSSTImap

SSRFmapjwt_toolinteractsh

Utilitários

LinguistWireMockMitmproxyaiohttpChromium 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

  1. Clone o repositório:

    git clone https://github.com/nedlir/mcpwner.git
    cd mcpwner
    
  2. Configure o servidor:

    cp .env.example .env
    cp config/config.yaml.example config/config.yaml
    
  3. Inicie os serviços:

    docker compose up -d --build
    
  4. 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):

Kiro Cursor Claude VS Code Windsurf

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_PROFILES e conecte o servidor MCP ao seu cliente.
  • Configuração - .env / COMPOSE_PROFILES, config.yaml e 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órico
  • delete_files=True, delete_metadata=True - Remoção completa
  • delete_files=False, delete_metadata=True - Remover da lista, manter arquivos

Licença

Apache 2.0