
Serveur Model Context Protocol pour la découverte autonome de vulnérabilités
Serveur Model Context Protocol pour l'automatisation de la recherche en sécurité
Compatible avec :
MCPwner est un serveur Model Context Protocol (MCP) qui intègre des outils de test de sécurité dans des workflows pilotés par LLM. Il fournit une interface unifiée pour la recherche de secrets, l'analyse statique (SAST), l'analyse de composition logicielle (SCA), la sécurité de l'infrastructure en tant que code (IaC), le fuzzing de code source, la reconnaissance, les tests de sécurité dynamiques (DAST) et la recherche de vulnérabilités, y compris la découverte de 0-day.
Au lieu d'enchaîner manuellement des outils et de coller les sorties dans votre LLM, MCPwner standardise et diffuse les résultats directement dans le contexte de travail du modèle. Cela permet un raisonnement continu, une corrélation et la découverte de chemins d'attaque tout au long du cycle de vie de la recherche en sécurité – de la cartographie des surfaces d'attaque et l'identification des vulnérabilités connues à la découverte de nouveaux vecteurs d'attaque.
Note : Ce projet est en cours de développement actif. En savoir plus sur les MCP ici.
Les outils suivants sont prévus pour les prochaines versions.
Générateurs de chaînes de gadgets et de charges utiles pour l'exploitation des points de désérialisation identifiés lors de l'analyse SAST. Des écosystèmes matures de chaînes de gadgets existent pour Java, .NET et PHP ; Python est couvert via la génération de pickles malveillants (la désérialisation Ruby/Node est basée sur des charges utiles et fait partie du corpus de charges utiles ci-dessous) :
Corpus de charges utiles et de listes de mots pour alimenter les outils ci-dessus :
"Enumerate and scan example.com" → MCPwner chains: Subfinder + Amass → Masscan + Nmap → httpx → Katana + gau → ffuf + Arjun
### Scanner un dépôt GitHub pour des secrets```
"Scan https://github.com/example/repo for secrets"
→ MCPwner runs Gitleaks, TruffleHog, detect-secrets and correlates findings
"Run a security audit on my Python project" → MCPwner runs Bandit (SAST), OSV-Scanner (SCA), and secrets scanning
### Analyse des chemins d'attaque```
"Find vulnerabilities in the authentication module"
→ MCPwner runs CodeQL queries, cross-references with secrets and SCA results
"Test for SQLi and XSS on http://localhost:8080" → MCPwner chains: sqlmap + Dalfox and verifies findings
## Installation
### Prérequis
**Configuration système :**
- Docker Engine 20.20+ et Docker Compose 2.0+
- 8 Go de RAM minimum (16 Go recommandés pour exécuter plusieurs outils)
- 20 Go d'espace disque libre (les images d'outils de sécurité sont volumineuses)
- Plateformes prises en charge : Linux, macOS, Windows (avec WSL2)
**Client MCP :**
- Claude Desktop, Cursor, Kiro ou tout client compatible MCP
### Configuration
1. **Cloner le dépôt** : ```bash
git clone https://github.com/nedlir/mcpwner.git
cd mcpwner
Une fois les conteneurs Docker en cours d'exécution, ajoutez MCPwner à votre client MCP :
Important : Enregistrement dynamique des outils
MCPwner utilise une architecture modulaire et optionnelle. Les outils de sécurité sont régis par les profiles Docker Compose.
.env (COMPOSE_PROFILES=sast,secrets,reconnaissance,dast,etc) dicte quels conteneurs sont mis en ligne. Alternativement, vous pouvez remplacer ce comportement et lancer des profils spécifiques via la CLI : docker compose --profile sast --profile dast up -d.semgrep), omettez leur catégorie (sast) du fichier .env et listez manuellement les autres outils souhaités (bandit,gosec,codeql).utilities (par exemple Linguist, WireMock, Chromium) sont traités comme des dépendances centrales permanentes. Ils s'exécutent inconditionnellement avec docker compose up -d pour garantir que les dépendances critiques entre outils (comme la détection de langue) fonctionnent toujours.Emplacements des fichiers de configuration :
~/Library/Application Support/Claude/claude_desktop_config.json (macOS)mcp.json dans votre projet ou votre répertoire de paramètresInstallation en un clic (nécessite Docker en cours d'exécution) :
Configuration manuelle :
Ajoutez ce qui suit à votre fichier de configuration MCP :```json { "mcpServers": { "mcpwner": { "command": "docker", "args": ["exec", "-i", "mcpwner-server", "python", "src/server.py"], "env": {} } } }
Redémarrez votre client MCP pour charger la nouvelle configuration du serveur.
### Analyse de projets locaux
Pour analyser des projets depuis votre machine hôte, montez-les dans le conteneur en ajoutant un volume dans `docker-compose.yaml`:```yaml
services:
mcpwner:
volumes:
- /path/to/your/projects:/mnt/projects:ro
Utilisez ensuite l'outil create_workspace avec :
source_type="local"source="/mnt/projects/my-project"MCPwner persiste automatiquement les métadonnées de l'espace de travail et de la base de données CodeQL lors des redémarrages du conteneur en utilisant un stockage basé sur des fichiers dans le volume Docker partagé (/workspaces/.metadata/). Aucune configuration requise - le système charge les données existantes au démarrage et les enregistre après chaque opération en utilisant des écritures atomiques pour éviter la corruption.
Contrôle du nettoyage de l'espace de travail :
cleanup_workspace fournit un contrôle granulaire :
delete_files=True, delete_metadata=False - Libérer de l'espace disque mais préserver l'historique de l'espace de travail (recommandé)delete_files=True, delete_metadata=True - Suppression complète de l'espace de travail et des métadonnéesdelete_files=False, delete_metadata=True - Supprimer de la liste mais conserver les fichiers sur le disqueSauvegarde :```bash
docker run --rm -v mcpwner_workspaces:/data -v $(pwd):/backup
alpine tar czf /backup/workspaces-backup.tar.gz /data
docker run --rm -v mcpwner_workspaces:/data -v $(pwd):/backup
alpine tar xzf /backup/workspaces-backup.tar.gz -C /
## Architecture
MCPwner utilise une communication basée sur HTTP entre les conteneurs pour prendre en charge les déploiements à distance futurs. Bien qu'actuellement optimisé pour une utilisation locale, l'architecture peut être adaptée pour des déploiements sur serveur distant avec des modifications mineures.
**Principes de conception :**
- Isolation des conteneurs pour l'exécution d'outils de sécurité
- Formats de sortie standardisés pour la consommation par LLM (SARIF/JSON)
- Architecture de plugin extensible pour de nouveaux outils
- API sans état (les mémoires sont gérées par l'utilisateur)
**Aperçu de l'architecture :**```mermaid
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]
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
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 IDE fill:none,stroke:#ddd,stroke-width:2px,stroke-dasharray: 5 5
MCPwner expose les outils suivants via l'interface MCP :
Gestion des espaces de travail :
create_workspace - Initialiser un espace de travail de scan à partir d'un chemin local, d'une URL Git ou d'un dépôt GitHublist_workspaces - Lister tous les espaces de travail disponiblescleanup_workspace - Supprimer un espace de travail et les données associéesRegistre des constatations :
Limité à l'espace de travail, persistant sur disque (<workspace>/findings/<id>.json) et toujours disponible — aucun conteneur ni contrôle d'intégrité requis. C'est la source de vérité pour le pipeline de recherche multi-agent : chaque hypothèse, résultat de PoC et verdict de révision est une entrée de constatation plutôt qu'un texte.
upsert_finding - Créer ou mettre à jour une constatation. Fusionne en profondeur avec une entrée existante par défaut, de sorte qu'un agent peut écrire son propre sous-objet (ex. poc) sans écraser les champs d'un autre agent (ex. review)list_findings - Lister toutes les constatations dans un espace de travail, éventuellement filtrées par status (ex. poc-confirmed, review-approved)get_finding - Récupérer une seule constatation par son identifiantSAST (Analyse statique) :
run_sast_scan - Exécuter des outils d'analyse statique (Semgrep, Bandit, Gosec, Brakeman, PMD, Psalm, NodeJsScan, Joern, YASA)get_sast_report - Récupérer les résultats du scan SASTsast_list_tools - Lister les outils SAST disponiblesDétection de secrets :
run_secrets_scan - Exécuter des outils de détection de secrets (Gitleaks, TruffleHog, Whispers, detect-secrets, Hawk-Eye)get_secrets_report - Récupérer les résultats du scan de secretssecrets_list_tools - Lister les outils de détection de secrets disponiblesSCA (Analyse de composition logicielle) :
run_sca_scan - Analyser les dépendances pour les vulnérabilités (Grype, Syft, OSV-Scanner, Retire.js)get_sca_report - Récupérer les résultats du scan SCAsca_list_tools - Lister les outils SCA disponiblesReconnaissance :
run_reconnaissance_scan - Exécuter un seul outil de reconnaissance (Subfinder, Amass, Nmap, Masscan, httpx, Katana, ffuf, bbot, gau, Arjun, wafw00f, Kiterunner)run_reconnaissance_chain - Enchaîner plusieurs outils de reconnaissance séquentiellementget_reconnaissance_report - Récupérer les résultats du scan de reconnaissancereconnaissance_list_tools - Lister les outils de reconnaissance disponiblesCodeQL :
detect_languages - Détecter les langages dans une base de code via Linguistcreate_codeql_database - Créer une base de données CodeQL pour l'analyselist_databases - Lister les bases de données CodeQL disponibleslist_query_packs - Lister les packs de requêtes disponiblesexecute_query - Exécuter des requêtes CodeQL spécifiquesSécurité de l'infrastructure et IaC :
run_iac_scan - Scanner les configurations d'infrastructure en tant que code pour les mauvaises configurations (Checkov, KICS, Terrascan, TFSec, Hadolint)get_iac_report - Récupérer les résultats du scan IaCiac_list_tools - Lister les outils de scan IaC disponiblesFuzzing source :
run_fuzzing_scan - Exécuter une campagne de fuzzing guidé par couverture en boîte blanche contre un harnais par cible (Atheris, Jazzer, Jazzer.js, PHP-Fuzzer)get_fuzzing_report - Récupérer les résultats de crash du fuzzing (entrée crash + trace de pile)fuzzing_list_tools - Lister les moteurs de fuzzing disponibles, filtrés par langage détectéDAST (Test de sécurité dynamique des applications) :
run_dast_scan - Exécuter des outils de test de sécurité dynamique des applications (sqlmap, NoSQLMap, Commix, Dalfox, SSTImap, SSRFmap, jwt_tool, interactsh)get_dast_report - Récupérer les résultats du scan DASTdast_list_tools - Lister les outils DAST disponiblesUtilitaires :
run_utilities_scan - Exécuter un outil utilitaire contre une cible en direct (Linguist, WireMock, Mitmproxy, aiohttp, Headless Chromium)get_utilities_report - Récupérer les résultats du scan utilitaireutilities_list_tools - Lister les outils utilitaires disponibles et leurs options de configurationSanté et surveillance :
health_check - Vérifier la disponibilité du serveur et des outilslist_tools - Lister tous les outils disponibles et leur statutMCPwner exécute des outils de sécurité pouvant effectuer des opérations intrusives. Utilisez-le uniquement sur des systèmes et des bases de code que vous possédez ou pour lesquels vous avez une autorisation explicite de test — l'accès non autorisé est illégal. Limitez l'accès au serveur MCP aux utilisateurs autorisés et envisagez l'isolation réseau pour les déploiements en production. Examinez les configurations des outils avant d'exécuter des scans, car certains outils peuvent générer un trafic réseau ou une charge système importants. Consignez l'exécution des outils et les résultats, en gardant à l'esprit que les scans de sécurité peuvent déclencher des alertes dans les systèmes de surveillance. Suivez les pratiques de divulgation responsable lors du signalement des vulnérabilités découvertes à l'aide de MCPwner. Maintenez les images Docker à jour et analysez régulièrement les conteneurs pour détecter les vulnérabilités. Ne commettez jamais de clés API, de jetons ou d'identifiants dans les fichiers de configuration — utilisez des variables d'environnement ou des systèmes de gestion de secrets à la place.
De plus, vous êtes responsable de votre propre sécurité lors de l'utilisation de ces outils et de l'accès à des bibliothèques tierces ; il est suggéré d'exécuter le tout dans un environnement sandboxé et sans authentification spéciale (minimisé et durci lorsque cela est réalisable).
![]() | ![]() | ![]() | ![]() | ![]() |
|---|
| Subfinder | Amass | Nmap | Masscan | ffuf |