
Framework agentique de tests de pénétration automatisés alimenté par de grands modèles de langage
Agent de test de pénétration autonome piloté par IA
Publié à USENIX Security 2024
Site officiel : pentestgpt.com »
Article de recherche
·
·
Le pipeline CTF autonome est pluggable en backend pour Claude Code et Codex. Le mode interactif modernisé hérité (
pentestgpt-legacy) supporte un ensemble de fournisseurs plus large : OpenAI, Anthropic, Google Gemini, DeepSeek, xAI, Qwen, Moonshot, et Ollama local. Voir Mode interactif multi-LLM.
claude) - installé et authentifié pour les exécutions locales de Claude. Voir docs Claude Codecodex) - installé et authentifié pour les exécutions locales de Codex. Le flux Docker ci-dessous regroupe les deux CLI.git clone https://github.com/GreyDGL/PentestGPT.git
cd PentestGPT
make install # exécute uv sync
| Commande | Description |
|---|---|
make install | Installer les dépendances |
make test | Exécuter tous les tests |
make check | Exécuter lint + vérification de type |
make build | Construire le paquet distribuable |
# Exécuter contre une cible (mode CTF par défaut)
pentestgpt --target 10.10.11.234
# Avec contexte de défi
pentestgpt --target 10.10.11.50 --instruction "Site WordPress, se concentrer sur les vulnérabilités de plugins"
# Mode test de pénétration (découverte d'actifs → vulnérabilités → rapport)
pentestgpt --target 10.10.11.234 --mode pentest
# Lister les sessions précédemment sauvegardées
pentestgpt --list-sessions
L'agent travaille à travers un pipeline multi-étapes, en alimentant les résultats de chaque étape dans la suivante — recon → exploitation → walkthrough pour CTF, découverte d'actifs → identification de vulnérabilités → rapport pour test de pénétration.
Une image autonome regroupe l'outil + les CLI Claude Code et Codex. Vous vous connectez une fois et les sessions persistent dans des volumes nommés — pas de reconnexion lors des exécutions ultérieures.
make docker-build # construire l'image de l'outil
make docker-login # UNE SEULE FOIS, idempotent : vérifie les connexions, ne connecte que ce qui manque
make docker-auth-status # vérifier que les deux sont connectés (ROUNDTRIP=1 pour une vérification en direct d'un jeton)
# Exécuter le pipeline contre une cible (n'importe quel backend / modèle / mode) :
make docker-run TARGET=http://127.0.0.1:8000 BACKEND=codex MODEL=gpt-5.5 MODE=ctf
make docker-run TARGET=10.10.11.234 BACKEND=claude MODEL=opus MODE=pentest
make docker-login connecte Claude (setup-token → jeton stocké dans le volume) et Codex (son
propre codex login dans le conteneur, rappel OAuth transféré via socat — non amorcé, car les jetons de rafraîchissement ChatGPT
sont à usage unique). Il est idempotent : ré-exécuter saute ce qui est encore valide. Les connexions persistent à travers
la recréation du conteneur ; make docker-down les conserve, make docker-nuke supprime les volumes de connexion (pour
forcer une nouvelle connexion / faire tourner un jeton). Conception + détails : docs/docker-dev-plan.md.
Le PentestGPT classique, avec humain dans la boucle, de l'article USENIX 2024 est préservé et
modernisé sous pentestgpt-legacy. Il exécute trois sessions LLM coopérantes —
raisonnement / génération / analyse — qui maintiennent une Arborescence de tâches de test de pénétration (PTT) pendant que vous
pilotez la session de manière interactive (next, more, todo, discuss). Le pipeline autonome à étapes fixes
supporte les backends Claude et Codex ; ce mode hérité dialogue nativement avec de nombreux fournisseurs
via leurs SDK officiels.
Définissez une clé API pour tout fournisseur que vous souhaitez utiliser (dans votre environnement ou .env — voir
.env.example). Seuls les fournisseurs que vous configurez sont activés.
OPENAI_API_KEY=... ANTHROPIC_API_KEY=... GEMINI_API_KEY=... # ou GOOGLE_API_KEY
DEEPSEEK_API_KEY=... GROK_API_KEY=... QWEN_API_KEY=... KIMI_API_KEY=...
# Choisir automatiquement les meilleurs modèles disponibles pour chaque session
pentestgpt-legacy
# Choisir les modèles par session
pentestgpt-legacy --reasoning-model claude-opus-4-8 --parsing-model gemini-3.5-flash
# Modèle local via Ollama (compatible OpenAI)
pentestgpt-legacy --reasoning-model ollama:qwen3 --base-url http://localhost:11434/v1
# Lister tous les modèles pris en charge (montre quels fournisseurs sont configurés)
pentestgpt-legacy --list-models
# Test aller-retour en direct de chaque modèle configuré et afficher une matrice réussite/échec
pentestgpt-legacy --smoke-test
pentestgpt-legacy --list-models affiche toujours le registre en direct. Ré-exécutez --smoke-test
après des changements d'ID de modèle. Instantané actuel :
| Fournisseur | Modèles actuels | Hérités (conservés) | Clé d'env. |
|---|---|---|---|
| OpenAI | gpt-5.5, gpt-5.5-pro, gpt-5.4-mini, gpt-5.4-nano, gpt-5.2, gpt-5.3-codex | gpt-4o, gpt-4o-mini, o3, o4-mini | OPENAI_API_KEY |
| Anthropic | claude-opus-4-8, claude-sonnet-4-6, claude-haiku-4-5-20251001 | — | ANTHROPIC_API_KEY |
| Google Gemini | gemini-3.1-pro, gemini-3.5-flash, gemini-3-pro, gemini-3.1-flash-lite | gemini-2.5-pro, gemini-2.5-flash | GEMINI_API_KEY / GOOGLE_API_KEY |
| DeepSeek | deepseek-v4-flash, deepseek-v4-pro | deepseek-chat, deepseek-reasoner | DEEPSEEK_API_KEY |
| xAI Grok | grok-4.3 | — | GROK_API_KEY / XAI_API_KEY |
| Alibaba Qwen | qwen3.7-max, qwen3.5-flash | qwen3-max | QWEN_API_KEY / DASHSCOPE_API_KEY |
| Moonshot Kimi | kimi-k2.6 | — | KIMI_API_KEY (par défaut .cn ; définir MOONSHOT_BASE_URL pour .ai) |
| Local (Ollama) | ollama:<model> (p. ex. ollama:qwen3) |
Le registre se trouve dans
pentestgpt_legacy/llm/registry.py(la source unique de vérité). Ajouter un modèle est une entréeModelSpec; les fournisseurs compatibles OpenAI réutilisent un connecteur.
PentestGPT collecte des données d'utilisation anonymes pour aider à améliorer l'outil. Ces données sont envoyées à notre projet Langfuse et incluent :
Aucune donnée sensible n'est collectée - les sorties de commandes, identifiants ou valeurs réelles de drapeaux ne sont jamais transmises.
# Via un indicateur en ligne de commande
pentestgpt --target 10.10.11.234 --no-telemetry
# Via une variable d'environnement
export LANGFUSE_ENABLED=false
PentestGPT a atteint un taux de réussite de 86,5 % (90/104 benchmarks) lors d'une expérience de suite de validation XBOW
en décembre 2025. Ce nombre est un résultat de recherche historique, pas une garantie de régression
actuelle de pentestgpt-agent.
Les harnais XBOW et les archives de résultats sont maintenus en dehors de ce référentiel de produit en tant qu'artefacts de recherche uniquement à titre de référence. Le CLI PentestGPT pris en charge, le Makefile, le CI et l'exécution Docker n'exposent pas d'exécuteur XBOW. Une future évaluation pourrait réutiliser ce corpus via un adaptateur détenu séparément sans en faire une dépendance du produit.
Si vous utilisez PentestGPT dans votre recherche, veuillez citer notre article :
@inproceedings{299699,
author = {Gelei Deng and Yi Liu and Víctor Mayoral-Vilches and Peng Liu and Yuekang Li and Yuan Xu and Tianwei Zhang and Yang Liu and Martin Pinzger and Stefan Rass},
title = {{PentestGPT}: Evaluating and Harnessing Large Language Models for Automated Penetration Testing},
booktitle = {33rd USENIX Security Symposium (USENIX Security 24)},
year = {2024},
isbn = {978-1-939133-44-1},
address = {Philadelphia, PA},
pages = {847--864},
url = {https://www.usenix.org/conference/usenixsecurity24/presentation/deng},
publisher = {USENIX Association},
month = aug
}
Distribué sous la licence MIT. Voir LICENSE.md pour plus d'informations.
Avertissement : Cet outil est destiné à des fins éducatives et aux tests de sécurité autorisés uniquement. Les auteurs ne cautionnent aucune utilisation illégale. Utilisez-le à vos risques et périls.
| — |
aucune (OLLAMA_BASE_URL) |