
pentest-ai v1.3.1
Pentester IA open source qui prouve chaque découverte. Des oracles machine réexécutent chaque exploit ; les bugs vérifiés livrent une capsule de preuve que vous pouvez rejouer vous-même.
pentest-ai
Il ne signale pas. Il prouve.
Site web · Installation · Pourquoi la vérification · Benchmarks · Limites · Discord
⚠️ Outils offensifs, tests autorisés uniquement. En installant, vous acceptez la AUP et les Conditions. Voir Utilisation responsable ↓
Deux minutes, sans clé API, sans cible à vous
pip install ptai && ptai demo
ptai demo analyse une application vulnérable fournie et affiche 4 findings, 3 oracle-VERIFIED.
Il rejoue une preuve en direct depuis une capsule de preuve (replay 3/3), puis exécute les mêmes routes
durcies et affiche 0 findings.
Deux choses à remarquer. Les findings apparaissent et disparaissent avec la vulnérabilité plutôt que parce que l'outil se tait — la seule chose qui a changé entre les deux exécutions, c'est le correctif. Et un des quatre reste un candidat : le contournement de connexion SQLi est réel, mais aucun oracle n'a pu le re-prouver sur cette route, donc il n'obtient pas de badge. Cet écart, c'est le produit qui fonctionne, pas un bug de la démo.
Ce que VERIFIED signifie réellement ici
La plupart des scanners vous disent qu'une chose pourrait être exploitable et vous laissent le tri. ptai traite un finding comme un candidat jusqu'à ce qu'un oracle machine nommé rejoue l'exploit et le reproduise N fois sur N. Ce n'est qu'alors qu'il obtient le statut VERIFIED.
Trois propriétés font que ce n'est pas qu'un slogan :
Aucun LLM ne produit jamais de verdict. La règle est appliquée dans le code, pas par politique : un verdict qui ne peut pas nommer l'oracle qui l'a obtenu est rejeté. Un LLM coordonne l'exécution et raisonne sur les résultats. Il ne décide jamais si un bug est réel.
Chaque oracle a un contrôle qui doit échouer. Un contournement d'en-tête de confiance doit renvoyer du contenu privilégié avec l'en-tête et un refus sans lui. Une vérification d'identifiants divulgués doit être acceptée pour le vrai secret et rejetée pour un jumeau volontairement corrompu. Un endpoint qui répond 200 à tout ne gagne rien. C'est ce qui empêche « il a renvoyé 200 » d'être pris pour une preuve.
La sortie des scanners tiers est retenue. Les résultats de nuclei, nikto et zap ne deviennent pas des findings de leur propre autorité. Ils restent non vérifiés jusqu'à ce qu'un des propres oracles de ptai les re-prouve indépendamment.
Chaque finding VERIFIED est livré sous forme de capsule de preuve portable — le finding, la
recette pour le re-prouver, et le reçu. N'importe qui peut ptai replay contre la
cible en direct et voir l'oracle re-confirmer, sans faire confiance à ptai. Les capsules sont
volontairement non signées : le replay est le mécanisme de confiance, pas une signature que vous devez
prendre au pied de la lettre.
Des chiffres honnêtes
| Classes de vulnérabilités avec un oracle fonctionnel | 14 |
| Sondes dans la bibliothèque | 63 |
| Sondes pouvant obtenir VERIFIED | 28 |
| Types d'oracles | 23 |
| Wrappers d'outils | 203 |
| …qui transforment la sortie en findings aujourd'hui | 18 |
| Outils MCP | 52 |
| Agents spécialisés | 18 |
| Tests | 2 729 sur Python 3.10 / 3.12 / 3.14 |
Sur un honeypot volontairement vulnérable, 23 findings se vérifient sur ces 14 classes avec une précision de 100 % et zéro faux positif. Sur un OWASP Juice Shop standard, 12 se vérifient en une seule analyse.
Lisez ces chiffres attentivement, car les écarts sont le point. 63 sondes existent mais seulement 28 peuvent obtenir un verdict ; les 35 autres rapportent des candidats honnêtes. 203 wrappers sont enregistrés mais seulement 18 transforment la sortie d'outil en findings — les autres s'exécutent et renvoient du texte brut. La porte de l'oracle achète de la précision, pas du taux de détection : elle supprime les faux positifs, elle ne trouve pas plus de bugs.
Le harnais honeypot (tests/honeypot/) et une porte zéro-faux-positif sur application propre
(tests/cleanapp/) sont tous deux livrés dans ce
dépôt et s'exécutent dans le CI, donc ces résultats sont reproductibles plutôt que des captures d'écran.
Ce qu'il ne fait pas
Dit clairement, parce qu'un outil de sécurité qui se survend est pire qu'inutile.
- C'est un scanner d'applications web. Les 63 sondes et les 23 types d'oracles ciblent HTTP. AD, cloud, mobile et sans fil ont des agents et des wrappers d'outils, mais aucune bibliothèque de sondes ni d'oracles derrière eux.
- Il ne peut pas faire d'élévation de privilèges locale. Cela nécessite une exécution de code sur un hôte
que vous possédez déjà. ptai teste à distance et n'a pas ce canal, donc l'agent
privesc rapporte
unsupportedplutôt qu'un zéro trompeur. - Ce n'est pas un scanner CVE. Il n'y a pas de base de données version-vers-CVE ni de bibliothèque d'exploits. Le travail CVE se limite aux recherches osv.dev sur les manifests divulgués.
- Les playbooks planifient, ils n'exécutent pas.
ptai playbook runrésout les dépendances et affiche le plan. L'exécuter contre une cible n'est pas encore câblé. - Ce n'est pas autonome. Les agents de pentest LLM entièrement autonomes terminent 21 à 31 % des tâches de bout en bout ; les configurations assistées par un humain atteignent 64 %. ptai est conçu pour le second régime. Appuyez deux fois sur Ctrl+C pour prendre le relais en cours d'exécution.
La liste complète des défauts internes, y compris tout ce qui précède, est suivie ouvertement plutôt que discrètement. Si quelque chose ici est faux, ouvrez un problème et il sera corrigé.
Installation
Chemin 1 — Pilotez-le depuis Claude Code, Cursor ou Codex (sans clé API)
Votre abonnement IA existant est le LLM. ptai fournit les outils.
pip install ptai
ptai mcp install # détecte automatiquement vos clients MCP et écrit leurs configurations
Redémarrez le client et 52 outils sont là. Aucune clé Anthropic nécessaire sur ce chemin — le serveur MCP n'héberge aucun LLM propre par conception.
Chemin 2 — CLI autonome
pip install ptai
export ANTHROPIC_API_KEY=sk-... # ou OPENAI_API_KEY
ptai start https://target.example.com
# entièrement local, sans cloud :
export PENTEST_AI_LLM_PROVIDER=ollama
# ou déterministe, sans LLM du tout :
ptai start https://target.example.com --no-llm
Les dépenses sont plafonnées à 10 $ par engagement par défaut (PTAI_PRICE_LIMIT).
Outils de sécurité, API REST et autres options
ptai tools install --tier core # ou recommended / full
ptai tools install nmap nuclei # ou par nom
ptai serve # HTTP REST + WebSocket pour les tableaux de bord
ptai menu # lanceur interactif, sans LLM
Au début de l'engagement, le planificateur prédit quels outils l'exécution nécessite et demande une fois d'installer ceux qui manquent. Refusez et la réponse persiste.
Benchmarks
Reproductibles, dans git, avec des artefacts bruts. Pas de « taux de détection de 98,7 % » que vous ne pouvez pas auditer.
| Outil | Findings | Critique+Élevé | Buckets OWASP | Taux de FP |
|---|---|---|---|---|
| ptai | 88 | 46 | 5 | 0 % |
| ZAP 2.17.0 | 593 | 0 | 1 | 47 % |
| Nuclei 3.8.0 | 1 | 0 | 1 | 0 % |
| HexStrike v6.0 | 11 | 0 | 1 | – |
n=1, évaluateur unique, tentative unique sur OWASP Juice Shop. Méthodologie et sortie brute dans
benchmarks/ ; compte rendu complet dans docs/benchmarks/juice-shop.md.
La lecture honnête : ptai est fort sur les cibles web SPA avec une couverture de sondes organisée. HexStrike est plus large (cloud, binaire, CTF) et bat probablement ptai sur les surfaces traditionnelles explorables comme WordPress. Juice Shop est aussi l'application vulnérable la plus documentée sur Internet, donc le LLM et les auteurs de sondes ont une longueur d'avance — ce qui est exactement pourquoi le chiffre du honeypot privé est plus bas, et pourquoi les deux sont publiés.
Intégrez-le dans votre CI
- run: pip install ptai
- run: ptai start ${{ vars.STAGING_URL }} --ci --fail-on verified --sarif pentest.sarif
- uses: github/codeql-action/upload-sarif@v3
with: { sarif_file: pentest.sarif }
--fail-on verified casse le build uniquement sur un finding qu'un oracle a réellement prouvé,
donc la porte ne peut pas être déclenchée par le bruit du scanner. Les SARIF sont téléversés vers GitHub Code
Scanning, les findings sont publiés en commentaire de PR. Modèles GitLab et Jenkins dans
docs/ci-cd.md.
Comment ça fonctionne
recon ──▶ auth ──▶ web ──┬──▶ ad
├──▶ cloud ┌──────────────────┐
└──▶ api ──────────▶│ base de données │
│ findings │
│ protégée par │
│ périmètre │
└────────┬─────────┘
▼
verify (oracles, N/N)
▼
chain ─▶ validate ─▶ detect ─▶ report
md · html · pdf · SARIF · JUnit
18 agents spécialisés exécutent les phases. Avec une clé API, chacun utilise un LLM pour raisonner sur les résultats ; sans elle, il s'exécute comme une boucle d'outils déterministe. L'ordre des phases et la détection sont identiques dans les deux cas — les sondes trouvent les bugs, le LLM coordonne seulement.
À qui ça s'adresse
Les équipes AppSec qui intègrent une analyse authentifiée dans chaque PR, avec une porte qui ne se déclenche que sur des findings prouvés. Les consultants qui veulent que le rapport s'écrive tout seul et une capsule que les propres ingénieurs du client peuvent rejouer. Les chasseurs de bug bounty qui préfèrent trier 12 findings prouvés plutôt que 600 peut-être. Les utilisateurs de Claude Code / Cursor / Codex qui veulent de vrais outils derrière leur assistant sans une autre facture d'API.
Travaillez avec moi
L'outil est MIT et gratuit pour toujours — cela ne changera pas.
Si vous voulez un pentest livré plutôt que de le faire vous-même, ou un espace de travail hébergé avec historique et accès d'équipe, les deux sont sur pentestai.xyz. Chaque finding d'un engagement livré est accompagné d'une capsule de preuve que vos ingénieurs peuvent rejouer eux-mêmes, ce qui est un artefact matériellement différent d'un PDF plein de niveaux de gravité.
Questions : [email protected]
Utilisation responsable
ptai exécute de réelles opérations réseau et hôte contre les cibles que vous spécifiez. Vous êtes seul responsable d'avoir une autorisation écrite explicite pour chaque cible. Tester des systèmes que vous ne possédez pas peut violer le Computer Fraud and Abuse Act, le Computer Misuse Act 1990, l'article 32 du RGPD et leurs équivalents ailleurs.
La première exécution demande l'acceptation de l'AUP et la persiste. Définissez
PENTEST_AI_AUP_ACCEPTED=1 dans le CI. Les hôtes hors périmètre sont refusés au moment de
l'invocation de l'outil. Trois garde-fous sont désactivés par défaut et valent la peine d'être activés :
intensity=safe ignore les sondes qui modifient l'état, respect_rate_limits honore
429/Retry-After, et strict_scope refuse les requêtes hors hôte.
Callbacks hors bande (OAST) — confidentialité
Les classes aveugles (SSRF/SQLi/XXE aveugles, XSS stocké, SSTI, Log4Shell) sont détectées via
des callbacks qui, par défaut, sont routés vers le oast.fun public de ProjectDiscovery.
Chaque engagement génère une nouvelle paire de clés RSA-2048 localement. Les payloads d'interaction sont chiffrés AES-CTR-256 au repos, la clé étant enveloppée en RSA-OAEP-SHA256 vers votre clé publique, donc seul votre processus local peut les déchiffrer. Mais les métadonnées sont visibles par le serveur : qu'une interaction a eu lieu, l'IP source de la cible, l'horodatage et le protocole.
PortSwigger interdit l'utilisation de collaborateurs publics dans ses règles de bug bounty, et les grands programmes exigent de plus en plus une infrastructure de callbacks contrôlée par le testeur. Pour les engagements payants, auto-hébergez Interactsh :
ptai start http://target --oast-server https://oast.example.com --oast-token <T>
ptai start http://target --no-oast # ou désactivez entièrement
FAQ
Ai-je besoin d'une clé API ? Pas sur le chemin MCP — votre abonnement Claude Code / Cursor / Codex est le LLM. Seule la CLI autonome en a besoin, et même là, Ollama s'exécute entièrement en local.
Est-ce autonome ? Non, et il ne prétend pas l'être. Les sondes détectent, le LLM coordonne, vous décidez. Ctrl+C deux fois prend le relais en cours d'exécution.
Sûr pour la production ? Uniquement avec une autorisation écrite et les trois garde-fous ci-dessus activés.
Est-ce qu'il téléphone à la maison ? Aucune télémétrie ; les findings restent sur votre disque. Les callbacks OAST sont
la seule exception — voir ci-dessus, ou exécutez --no-oast.
En quoi est-ce différent de demander à Claude de pirater quelque chose ? Une bibliothèque de sondes déterministe organisée trouve les bugs et un oracle machine les prouve. Un LLM seul vous donne une supposition plausible sans aucun moyen de savoir si elle est réelle.
Écosystème
| Dépôt | Quoi |
|---|---|
| pentest-ai | Ce dépôt. CLI + serveur MCP. |
| pentest-ai-agents | Fichiers de sous-agents Claude Code autonomes. Optionnel. |
Communauté : Discord · Discussions · Problèmes
Historique d'étoiles
Licence
MIT. Faites-en ce que vous voulez.
Si ptai vous a sauvé un dimanche, mettez une étoile au dépôt.