
pentest-ai v1.4.0
Pentester de IA de código abierto que demuestra cada hallazgo. Los oráculos automáticos re-ejecutan cada exploit; los errores verificados incluyen una cápsula de prueba que puedes reproducir tú mismo.
pentest-ai
No lo señala. Lo demuestra.
Sitio web · Instalación · Por qué la verificación · Benchmarks · Límites · Discord
⚠️ Herramienta ofensiva, solo para pruebas autorizadas. Al instalar aceptas la AUP y los Términos. Consulta Uso responsable ↓
Dos minutos, sin clave de API, sin objetivo propio
pip install ptai && ptai demo
ptai demo escanea una aplicación vulnerable incluida y muestra 4 findings, 3 oracle-VERIFIED.
Reproduce uno en vivo desde una cápsula de prueba (replay 3/3), luego ejecuta las mismas rutas
endurecidas e imprime 0 findings.
Dos cosas a notar. Los hallazgos aparecen y desaparecen con la vulnerabilidad en lugar de porque la herramienta se quedó en silencio — lo único que cambió entre las dos ejecuciones es la corrección. Y uno de los cuatro sigue siendo un candidato: el bypass de login por SQLi es real, pero ningún oráculo pudo volver a demostrarlo en esa ruta, así que no obtiene una insignia. Esa brecha es el producto funcionando, no un error en la demo.
Qué significa realmente VERIFIED aquí
La mayoría de los escáneres te dicen que algo podría ser explotable y te dejan el triaje a ti. ptai trata un hallazgo como un candidato hasta que un oráculo de máquina con nombre vuelve a ejecutar el exploit y lo reproduce N de N veces. Solo entonces obtiene VERIFIED.
Tres propiedades hacen que eso sea más que un eslogan:
Ningún LLM produce jamás un veredicto. La regla se aplica en código, no por política: un veredicto que no puede nombrar el oráculo que lo obtuvo es rechazado. Un LLM coordina la ejecución y razona sobre los resultados. Nunca decide si un bug es real.
Cada oráculo tiene un control que debe fallar. Un bypass de cabecera de confianza tiene que devolver contenido privilegiado con la cabecera y una denegación sin ella. Una comprobación de credenciales filtradas tiene que ser aceptada para el secreto real y rechazada para un gemelo deliberadamente corrupto. Un endpoint que responde 200 a todo no gana nada. Esto es lo que evita que "devolvió 200" se confunda con una prueba.
La salida de escáneres de terceros se retiene. Los resultados de nuclei, nikto y zap no se convierten en hallazgos por su propia autoridad. Permanecen sin verificar hasta que uno de los oráculos propios de ptai los vuelve a demostrar de forma independiente.
Cada hallazgo VERIFIED se entrega como una cápsula de prueba portátil — el hallazgo, la
receta para volver a demostrarlo y el recibo. Cualquiera puede hacer ptai replay contra el
objetivo en vivo y ver al oráculo reconfirmar, sin confiar en ptai. Las cápsulas son
deliberadamente sin firma: el replay es el mecanismo de confianza, no una firma que tengas que
aceptar por fe.
Números honestos
| Clases de vulnerabilidad con un oráculo funcional | 14 |
| Sondas en la biblioteca | 64 |
| Sondas que pueden obtener VERIFIED | 30 |
| Tipos de oráculo | 24 |
| Envoltorios de herramientas | 203 |
| …que hoy convierten la salida en hallazgos | 18 |
| Herramientas MCP | 52 |
| Agentes especialistas | 18 |
| Pruebas | 2.729 en Python 3.10 / 3.12 / 3.14 |
En un honeypot deliberadamente vulnerable, 23 hallazgos se verifican en esas 14 clases
con 100% de precisión y cero falsos positivos. En un OWASP Juice Shop estándar, 17
hallazgos se verificaron en el barrido del 2026-08-23 — informe HTTP en alcance / verificado /
precisión, no 17/116. Una sesión MCP Path 1 del 2026-08-25 (cliente MCP ejecutando
run_probe, el objetivo murió antes de la verificación del orquestador) obtuvo 12 pruebas verificadas
con 100% de precisión frente a 64 desafíos HTTP en alcance (20 no se perseguirán). Las claves de OSINT,
Web3 y solo-UI de Juice Shop quedan fuera del marcador de automatización por diseño.
Lee esos números con atención, porque las brechas son el punto. Existen 64 sondas pero solo 30 pueden obtener un veredicto; las otras 34 reportan candidatos honestos. 203 envoltorios están registrados pero solo 18 convierten la salida de herramientas en hallazgos — el resto se ejecutan y devuelven texto sin procesar. La puerta del oráculo compra precisión, no tasa de detección: elimina falsos positivos, no encuentra más bugs.
El arnés del honeypot (tests/honeypot/) y una puerta de cero falsos positivos
para aplicaciones limpias (tests/cleanapp/) se incluyen en este
repositorio y se ejecutan en CI, así que son reproducibles en lugar de capturas de pantalla.
Qué no hace
Dicho claramente, porque una herramienta de seguridad que se sobrevalora es peor que inútil.
- Es un escáner de aplicaciones web. Las 64 sondas y los 24 tipos de oráculo apuntan a HTTP. AD, cloud, móvil y wireless tienen agentes y envoltorios de herramientas, pero no hay biblioteca de sondas ni oráculos detrás de ellos.
- No puede hacer escalada de privilegios local. Eso requiere ejecución de código en un host
que ya controlas. ptai prueba de forma remota y no tiene ese canal, así que el agente de privesc
reporta
unsupporteden lugar de un cero engañoso. - No es un escáner de CVE. No hay base de datos de versión-a-CVE ni biblioteca de exploits. El trabajo de CVE se limita a consultas a osv.dev sobre manifiestos filtrados.
- Los playbooks planifican, no ejecutan.
ptai playbook runresuelve dependencias e imprime el plan. Ejecutarlo contra un objetivo aún no está conectado. - No es autónomo. Los agentes de pentest LLM totalmente autónomos completan el 21–31% de las tareas de principio a fin; las configuraciones asistidas por humanos alcanzan el 64%. ptai está construido para el segundo régimen. Pulsa Ctrl+C dos veces para tomar el control a mitad de ejecución.
La lista completa de defectos internos, incluido todo lo anterior, se rastrea abiertamente en lugar de en silencio. Si algo aquí está mal, abre un issue y se corregirá.
Instalación
Ruta 1 — Manejarlo desde Claude Code, Cursor o Codex (sin clave de API)
Tu suscripción de IA existente es el LLM. ptai aporta las herramientas.
pip install ptai
ptai mcp install # auto-detects your MCP clients and writes their configs
Reinicia el cliente y las 52 herramientas están ahí. No se necesita clave de Anthropic en esta ruta — el servidor MCP no aloja ningún LLM propio por diseño.
Ruta 2 — CLI independiente
pip install ptai
export ANTHROPIC_API_KEY=sk-... # or OPENAI_API_KEY
ptai start https://target.example.com
# fully local, no cloud:
export PENTEST_AI_LLM_PROVIDER=ollama
# or deterministic, no LLM at all:
ptai start https://target.example.com --no-llm
El gasto está limitado a $10 por compromiso por defecto (PTAI_PRICE_LIMIT).
Herramientas de seguridad, API REST y otras opciones
ptai tools install --tier core # or recommended / full
ptai tools install nmap nuclei # or by name
ptai serve # HTTP REST + WebSocket for dashboards
ptai menu # interactive launcher, no LLM
Al inicio del compromiso, el planificador predice qué herramientas necesita la ejecución y pregunta una vez para instalar las que faltan. Si rechazas, la respuesta persiste.
Benchmarks
Reproducibles, en git, con artefactos sin procesar. Sin "98,7% de tasa de detección" que no puedas auditar.
| Herramienta | Hallazgos | Crítico+Alto | Categorías OWASP | Tasa 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, un solo evaluador, una sola ejecución en OWASP Juice Shop. Metodología y salida sin procesar en
benchmarks/; análisis completo en docs/benchmarks/juice-shop.md.
La lectura honesta: ptai es fuerte en objetivos web SPA con cobertura de sondas curada. HexStrike es más amplio (cloud, binario, CTF) y probablemente supera a ptai en superficies rastreables tradicionales como WordPress. Juice Shop es además la aplicación vulnerable mejor documentada de internet, así que tanto el LLM como los autores de las sondas tienen ventaja — que es exactamente por qué el número del honeypot privado es más bajo, y por qué ambos se publican.
Ponlo en 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 rompe la compilación solo ante un hallazgo que un oráculo realmente demostró,
así que la puerta no puede activarse por ruido del escáner. SARIF se sube a GitHub Code
Scanning, los hallazgos se publican como comentario en el PR. Plantillas de GitLab y Jenkins en
docs/ci-cd.md.
Cómo funciona
recon ──▶ auth ──▶ web ──┬──▶ ad
├──▶ cloud ┌──────────────────┐
└──▶ api ──────────▶│ findings DB │
│ scope-guarded │
└────────┬─────────┘
▼
verify (oracles, N/N)
▼
chain ─▶ validate ─▶ detect ─▶ report
md · html · pdf · SARIF · JUnit
18 agentes especialistas ejecutan las fases. Con una clave de API cada uno usa un LLM para razonar sobre los resultados; sin una, se ejecuta como un bucle determinista de herramientas. El orden de las fases y la detección son idénticos en ambos casos — las sondas encuentran los bugs, el LLM solo coordina.
Para quién es
Equipos de AppSec que integran un escaneo autenticado en cada PR, con una puerta que solo se activa ante hallazgos demostrados. Consultores que quieren que el informe se escriba solo y una cápsula que los propios ingenieros del cliente puedan reproducir. Cazadores de bug bounty que prefieren hacer triaje de 12 hallazgos demostrados que de 600 quizás. Usuarios de Claude Code / Cursor / Codex que quieren herramientas reales detrás de su asistente sin otra factura de API.
Trabaja conmigo
La herramienta es MIT y gratuita para siempre — eso no cambiará.
Si quieres un pentest entregado en lugar de ejecutarlo tú mismo, o un espacio de trabajo alojado con historial y acceso de equipo, ambos están en pentestai.xyz. Cada hallazgo en un compromiso entregado se envía con una cápsula de prueba que tus ingenieros pueden reproducir ellos mismos, lo cual es un artefacto materialmente distinto de un PDF lleno de puntuaciones de severidad.
Preguntas: [email protected]
Uso responsable
ptai ejecuta operaciones reales de red y host contra los objetivos que especifiques. Eres el único responsable de contar con autorización escrita explícita para cada objetivo. Probar sistemas que no posees puede violar la Computer Fraud and Abuse Act, la Computer Misuse Act 1990, el Artículo 32 del GDPR y equivalentes en otros lugares.
La primera ejecución solicita la aceptación de la AUP y la persiste. Establece
PENTEST_AI_AUP_ACCEPTED=1 en CI. Los hosts fuera de alcance se rechazan en el
momento de invocación de la herramienta. Tres barreras de protección se envían desactivadas por defecto y vale la pena activarlas:
intensity=safe omite sondas que mutan estado, respect_rate_limits respeta
429/Retry-After, y strict_scope rechaza solicitudes fuera del host.
Callbacks fuera de banda (OAST) — privacidad
Las clases ciegas (SSRF/SQLi/XXE ciegos, XSS almacenado, SSTI, Log4Shell) se detectan mediante
callbacks que por defecto se enrutan al oast.fun público de ProjectDiscovery.
Cada compromiso genera un par de claves RSA-2048 nuevo localmente. Las cargas útiles de interacción se cifran en reposo con AES-CTR-256 con la clave envuelta en RSA-OAEP-SHA256 hacia tu clave pública, así que solo tu proceso local puede descifrarlas. Pero los metadatos son visibles para el servidor: que ocurrió una interacción, la IP de origen del objetivo, la marca de tiempo y el protocolo.
PortSwigger prohíbe el uso de colaboradores públicos en sus reglas de bug bounty, y los programas grandes cada vez exigen más infraestructura de callback controlada por el tester. Para compromisos de pago, autoaloja Interactsh:
ptai start http://target --oast-server https://oast.example.com --oast-token <T>
ptai start http://target --no-oast # or disable entirely
FAQ
¿Necesito una clave de API? No en la ruta MCP — tu suscripción de Claude Code / Cursor / Codex es el LLM. Solo la CLI independiente necesita una, e incluso ahí Ollama se ejecuta totalmente en local.
¿Es autónomo? No, y no pretende serlo. Las sondas detectan, el LLM coordina, tú decides. Ctrl+C dos veces toma el control a mitad de ejecución.
¿Es seguro contra producción? Solo con autorización escrita y las tres barreras de protección anteriores activadas.
¿Llama a casa? No por defecto. Los hallazgos permanecen en tu disco. Puedes
optar por contadores de uso anónimos con ptai telemetry enable (sin objetivos,
sin hallazgos; esquema en engine/telemetry.py). Los callbacks OAST van por defecto a
oast.fun de ProjectDiscovery a menos que pases --oast-server o --no-oast.
¿En qué se diferencia esto de pedirle a Claude que hackee algo? Una biblioteca de sondas determinista y curada encuentra los bugs y un oráculo de máquina los demuestra. Un LLM solo te da una conjetura plausible sin forma de saber si es real.
Ecosistema
| Repo | Qué |
|---|---|
| pentest-ai | Este repo. CLI + servidor MCP. |
| pentest-ai-agents | Archivos de subagente de Claude Code independientes. Opcional. |
Comunidad: Discord · Discussions · Issues
Historial de estrellas
El antiguo gráfico en línea (api.star-history.com) está vacío: GitHub restringió la API pública de stargazers de la que dependían esos SVG. La serie en vivo está en star-history.com. El README no enlaza directamente a un host de reemplazo — el navegador de cada visitante habría descargado ese SVG.
Licencia
MIT. Haz lo que quieras con él.
Si ptai te ahorró un domingo, dale una estrella al repo.