Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
ApiHunter — Escáner de seguridad de API asíncrono en Rust para CORS, CSP, GraphQL, JWT, OpenAPI y comprobaciones activas de postura de API. | Kitploit
Herramientas/GitHubGitHub/teycir/apihunter
ReconocimientoEscáneres de VulnerabilidadesAnálisis Dinámico (Sandboxing)Explotación de Aplicaciones WebRecopilación de InformaciónSeguridad WebPruebas de PenetraciónDevSecOpsSeguridad de APIs
GitHubteycir/apihunter

ApiHunter

Escáner de seguridad de API asíncrono en Rust para CORS, CSP, GraphQL, JWT, OpenAPI y comprobaciones activas de postura de API.

192hace 1 mesRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Ver RepositorioSitio web
Compartir

Support Development

If this project helps your work, support ongoing maintenance and new features.

ETH Donation Wallet
0x11282eE5726B3370c8B480e321b3B2aA13686582

Ethereum donation QR code

Scan the QR code or copy the wallet address above.

🎯 ApiHunter

Typing SVG

Rust Security API Async CI License


📺 Video Demo

ApiHunter Demo Video
Click to watch the full demo on YouTube

🖥️ Desktop App Snapshots

ApiHunter Desktop — Overview panel with version chip, health check, and Full Scan target input

ApiHunter Desktop — Full Scan controls: Quick Passive / Deep Active presets, collapsible Safety, Runtime Limits, and Scanner Toggles sections

ApiHunter Desktop — Results analytics dashboard: severity heatmap, worst-target card, scan efficiency, summary, findings breakdown, and top checks

ApiHunter Desktop — Results lower panel: target ranking, scanner coverage, check severity breakdown, per-target summary, and one-click export buttons


📑 Table of Contents

  • Video Demo
  • Desktop App Snapshots
  • Why ApiHunter?
  • Scanner Modules
  • Features
  • Comparison with Other Tools
  • Quick Start
  • Architecture
  • Template Tooling
  • Scan Scripts
  • Testing Strategy
  • Documentation
  • Roadmap
  • Installation
  • CLI Reference
  • Exit Codes
  • Security & Legal Guardrails
  • Related Projects
  • About
  • FAQ
  • License

Async, modular API security scanner for API baseline testing and regression detection.
Combines discovery with targeted checks (CORS/CSP/GraphQL/OpenAPI/JWT/API Security) using adaptive concurrency and CI-ready outputs (NDJSON/SARIF).

Use cases: offense for red-team/API pentest discovery and exploit validation, and defense for CI/CD regression gating, continuous API hardening, and early misconfiguration detection.

Scanning at scale? See Triage Mode — scan 5000 targets in 20 minutes with core security checks, then use Enrich Mode to add threat intelligence context (ports, CVEs, ASN, domain age) to findings.

Naming

  • Project/repository: ApiHunter
  • Cargo package: apihunter
  • Library crate: api_scanner
  • CLI binary: apihunter (default for cargo run)

GitHub Metadata (Recommended)

Set these in the GitHub repository settings for discoverability:

  • Description: Async API security scanner for CORS/CSP/GraphQL/JWT/OpenAPI and active API posture checks.
  • Website: https://github.com/Teycir/ApiHunter
  • Topics: rust, security, api-security, scanner, graphql, cors, csp, jwt, openapi, sarif, ndjson

Repository Flow```mermaid

flowchart LR A[CLI apihunter] --> B[main.rs] D[Input Sources] --> E[Pre-filter + Discovery] B --> C[HttpClient + Config] E --> F[runner.rs] C --> F

root@kitploit:~
F --> G1[Passive scanners]
F --> G2[Active scanners]

I[template-tool] --> H[CVE templates]
H --> G2

G1 --> J[Findings]
G2 --> J
J --> K[Reporter]
K --> L[Auto Reports]
K --> M[CI/CD Controls]
root@kitploit:~
## ¿Por qué ApiHunter?

### Ventajas principales

- **Arquitectura centrada en API**: Diseñado específicamente para APIs REST/GraphQL, no adaptado de escáneres de aplicaciones web
- **Reducción inteligente de falsos positivos**:
  - Detección catch-all de SPA con sondeos de prueba
  - Validación de secretos según contexto (frontend vs backend)
  - Validación de contenido del cuerpo y verificación de referer
  - Huella digital de respuestas para saltar hallazgos duplicados
- **Seguro para producción por diseño**:
  - Concurrencia adaptativa (AIMD) que reduce la velocidad en caso de errores
  - Límite de velocidad por host con retrasos configurables
  - Controles de cortesía (reintentos, tiempos de espera, evasión de WAF)
  - Modo de prueba para comprobaciones activas
- **Sigilo y evasión**:
  - Rotación de User-Agent en tiempo de ejecución desde un conjunto curado (assets/user_agents.txt)
  - Retrasos aleatorios en las solicitudes con jitter
  - Cumplimiento de retraso por host (evita patrones de ráfaga)
  - Lógica de reintento con retroceso exponencial
  - Inyección de encabezados personalizados para mezclarse con tráfico legítimo
  - Temporización adaptativa basada en respuestas del servidor
  - Sin huellas dactilares de escáner codificadas en modo predeterminado

### Inmersión profunda en técnicas de sigilo

ApiHunter utiliza varias técnicas de sigilo para evitar la detección por parte de WAF (Firewall de Aplicaciones Web) y sistemas de protección contra bots:

#### 1. Rotación de User-Agent
**Qué hace:** Cicla aleatoriamente entre más de 100 cadenas de User-Agent reales de navegador desde un archivo (`assets/user_agents.txt`)

**Por qué funciona:** Los bots suelen usar el mismo User-Agent (como `curl/7.68.0`). Al hacerse pasar por Chrome, Firefox, Safari, etc., te mezclas con el tráfico legítimo

**Analogía simple:** Como usar diferentes disfraces en lugar de usar siempre el mismo uniforme

#### 2. Temporización aleatoria y jitter
**Qué hace:** Agrega retrasos aleatorios entre solicitudes (controlado por `--delay-ms`) con jitter (pequeñas variaciones aleatorias)

**Por qué funciona:** Los bots envían solicitudes en intervalos perfectos (exactamente 100ms de diferencia). Los humanos son impredecibles. La temporización aleatoria hace que el tráfico parezca orgánico

**Analogía simple:** Caminar con pasos irregulares en lugar de marchar como un robot

#### 3. Cumplimiento de retraso por host
**Qué hace:** Rastrea el retraso por separado para cada dominio, no globalmente

**Por qué funciona:** Evita patrones de ráfaga donde golpeas un host 50 veces instantáneamente. Cada host ve solicitudes corteses y espaciadas

**Analogía simple:** Turnarse en diferentes conversaciones en lugar de gritarle a una persona repetidamente

#### 4. Concurrencia adaptativa (AIMD)
**Qué hace:** Reduce automáticamente la velocidad al recibir errores 429 (límite de velocidad) o 503 (servidor ocupado), acelera cuando tiene éxito

**Por qué funciona:** Retrocede cuando es detectado, imita cómo los navegadores reintentan. Los WAF ven "este cliente respeta nuestros límites"

**Analogía simple:** Reducir la velocidad cuando hay tráfico congestionado, acelerar en carreteras abiertas

#### 5. Reintento con retroceso exponencial
**Qué hace:** Cuando una solicitud falla, espera 1s, luego 2s, luego 4s antes de reintentar

**Por qué funciona:** Los clientes legítimos reintentan con cortesía. Los bots suelen golpear inmediatamente o rendirse

**Analogía simple:** Tocar una puerta, esperar más tiempo cada vez en lugar de golpear continuamente

#### 6. Sin huellas dactilares de escáner
**Qué hace:** No envía encabezados como `X-Scanner: ApiHunter` ni patrones predecibles

**Por qué funciona:** Muchas herramientas dejan firmas (plantillas de Nuclei, patrones de sqlmap). ApiHunter evita marcadores obvios

**Analogía simple:** No llevar una etiqueta con el nombre que diga "Probador de Seguridad"

#### 7. Reutilización y agrupación de conexiones
**Qué hace:** Utiliza grupos de clientes HTTP por host, mantiene las conexiones activas

**Por qué funciona:** Los navegadores reutilizan conexiones. Abrir/cerrar para cada solicitud parece sospechoso

**Analogía simple:** Mantener la puerta abierta en lugar de cerrarla de golpe y tocar el timbre de nuevo

#### 8. Inyección de encabezados personalizados
**Qué hace:** Puede agregar encabezados como `Referer`, `X-Forwarded-For`, cookies personalizadas

**Por qué funciona:** Hace que las solicitudes parezcan provenir de un flujo de aplicación legítimo (hicieron clic en un enlace, tienen cookies de sesión)

**Analogía simple:** Mostrar un comprobante de entrada al ingresar a un lugar en lugar de saltar la valla

#### Comparación de detección

| Técnica | Sin evasión | Con evasión |
|---------|-------------|-------------|
| **User-Agent** | `python-requests/2.28.0` (bot obvio) | `Mozilla/5.0 (Windows NT 10.0; Win64; x64)...` (parece Chrome) |
| **Temporización** | Intervalos perfectos de 100ms → WAF bloquea | 120ms, 95ms, 180ms → parece humano |
| **Reintentos** | Reintento instantáneo → baneo | Esperar 1s→2s→4s → "cliente paciente" |
| **Concurrencia** | 100 golpes paralelos → alarma | Adaptativo 5→10→3 según respuesta → "navegador educado" |

#### Cuándo usar `--waf-evasion`

- Probar APIs en producción con Cloudflare/Akamai/AWS WAF
- Evitar baneos de IP durante escaneos grandes
- Pruebas de penetración donde necesitas pasar desapercibido

- **CI/CD nativo**:
  - Diferenciación con línea base (solo reportar nuevos hallazgos)
  - Salida NDJSON en streaming para monitoreo en tiempo real
  - SARIF 2.1.0 para escaneo de código en GitHub/GitLab
  - Máscara de bits de código de salida para control de pipelines
  - Filtrado basado en severidad y umbrales de fallo
- **Rendimiento a escala**:
  - Tiempo de ejecución asíncrono en Rust (tokio) con abstracciones de costo cero
  - Escaneo concurrente con paralelismo limitado por semáforo
  - Grupos de clientes HTTP por host para evitar cuellos de botella de conexión
  - Uso eficiente de memoria (sin pausas de GC)
- **Soporte completo de autenticación**:
  - Flujos de autenticación basados en JSON con extracción de cookies/encabezados
  - Pruebas IDOR/BOLA con doble identidad
  - Importación de archivos de sesión (integración con Excalibur)
  - Autenticación Bearer, Basic y encabezados personalizados
  - Cliente no autenticado automático para comprobaciones de escalada de privilegios

## Módulos del escáner

ApiHunter incluye 13 módulos de escáner incorporados. Consulta [docs/scanners.md](https://github.com/teycir/apihunter/blob/HEAD/docs/scanners.md) para conocer la lógica de detección detallada.

| Escáner | Tipo | Qué detecta |
|---------|------|-------------|
| **CORS** | Pasivo | Orígenes comodín, orígenes reflejados con credenciales, aceptación de origen nulo, vulnerabilidades de bypass de expresiones regulares (ataques de sufijo/prefijo), falta de Vary: Origin, métodos preflight no seguros |
| **CSP** | Pasivo | Falta de Content-Security-Policy, directivas unsafe-inline/unsafe-eval, orígenes comodín, hosts CDN eludibles (gadgets JSONP), falta de frame-ancestors |
| **GraphQL** | Pasivo | Introspección habilitada, campos sensibles de esquema (tipos de usuario/contraseña/token), sugerencias de campos (fuga de esquema), agrupación de consultas, amplificación de alias (DoS), exposición de GraphiQL/Playground |
| **JWT** | Pasivo | Tokens alg=none, secretos HS256 débiles (basado en lista de palabras), caducidad faltante/excesiva, claims sensibles en payload, vulnerabilidades de confusión de algoritmo |
| **OpenAPI** | Pasivo | Esquemas de seguridad faltantes, operaciones sin requisitos de autenticación, endpoints de subida de archivos, operaciones obsoletas aún presentes, endpoints sensibles no asegurados |
| **Versionado de API** | Pasivo | Divulgación de encabezado de versión, versiones concurrentes heredadas/nuevas de API, encabezados de obsolescencia y desviación de respuesta entre variantes benignas de consulta/versión (más modo profundo con `--response-diff-deep`) |
| **gRPC/Protobuf** | Pasivo + Activo | Señales de transporte/tipo de contenido gRPC, pistas de superficie protobuf, y señales opcionales de reflexión/sonda de estado |
| **Seguridad de API** | Pasivo + Activo | Falta de encabezados de seguridad (X-Content-Type-Options, X-Frame-Options), divulgación de versión del servidor, acceso no autenticado a rutas sensibles, enumeración de métodos HTTP, endpoints de depuración, patrones de exposición de secretos, comprobaciones activas de IDOR/BOLA (comparación de cuerpo + encabezados seleccionados), sondeos de callback SSRF ciego, y señales de sonda de bypass/puerta de enlace |
| **Asignación masiva** | Activo | Campos sensibles reflejados (is_admin, role, permissions), cambios de estado persistidos, escalada de privilegios mediante inyección de campos |
| **OAuth/OIDC** | Activo | Bypass de validación de URI de redirección, falta de parámetro state, problemas de soporte PKCE (falta de S256, plain permitido), flujo implícito habilitado, concesión de contraseña habilitada |
| **Límite de velocidad** | Activo | Falta de limitación de velocidad (sondas de ráfaga), falta de encabezados Retry-After, bypass de suplantación de encabezado IP (X-Forwarded-For) |
| **WebSocket** | Activo | Aceptación de actualización WebSocket en rutas comunes, falta de validación de origen, conexiones WebSocket no autenticadas |
| **Plantillas CVE** | Activo | Detección de CVE basada en plantillas desde `assets/cve_templates/*.toml` (actualmente 168 plantillas), coincidencia diferencial de línea base vs bypass |

**Los escáneres pasivos** se ejecutan por defecto y analizan las respuestas sin enviar solicitudes diseñadas.  
**Los escáneres/comprobaciones activos** requieren `--active-checks` y envían sondas potencialmente invasivas (IDOR/BOLA, mutación, pruebas de bypass).  
IDOR/BOLA se encuentra bajo el escáner `API Security` (no hay una bandera `--no-idor` específica; usa `--no-api-security` para deshabilitarlo).

### Notas de salida y señales del módulo

Estas notas resumen cómo se emiten los hallazgos y qué suele causar ruido:

| Módulo | Prefijo / Forma del hallazgo | Falsos positivos comunes | Falsos negativos comunes |
|---------|------------------------------|--------------------------|--------------------------|
| CORS | `cors/*` con campos de origen/evidencia | Reflexión en rutas no sensibles | Comprobaciones de origen aplicadas solo en rutas autenticadas |
| CSP | `csp/*` con evidencia de directiva | CSP heredado aplicado intencionalmente durante migración | CSP entregado solo en ruta de CDN de producción |
| GraphQL | `graphql/*` con endpoint + señal de capacidad | Playground público destinado a inquilinos internos/pruebas | Controles de esquema habilitados solo después de autenticación |
| JWT | `jwt/*` con evidencia de claim/encabezado de token | Tokens de prueba/demo en respuestas sintéticas | El token nunca aparece en las respuestas escaneadas |
| OpenAPI | `openapi/*` con contexto de operación/seguridad | Especificación incluye intencionalmente endpoints obsoletos pero bloqueados | Especificación no disponible o dividida en documentos privados |
| Versionado de API | `api_versioning/*` + `response_diff/*` | Múltiples versiones compatibles durante migraciones controladas | Rutas versionadas no descubribles desde el conjunto semilla actual |
| gRPC/Protobuf | `grpc_protobuf/*` con evidencia de transporte/reflexión | Metadatos similares a gRPC en proxies perimetrales sin superficie RPC expuesta | Endpoints gRPC detrás de host/ruta separados no alcanzados desde el conjunto semilla |
| Seguridad de API | `api_security/*` con evidencia de encabezado/ruta/método | Endpoints de depuración/prueba expuestos intencionalmente en no producción | Controles aplicados detrás de contexto de autenticación/sesión |
| Asignación masiva | `mass_assignment/*` con deltas reflejados/persistidos | Comportamiento de eco que no persiste estado en backend | Mutaciones rechazadas por reglas de validación ocultas |
| OAuth/OIDC | `oauth/*` con evidencia de redirección/metadatos | Configuración de IdP no productiva con políticas relajadas | Políticas dinámicas no visibles en metadatos |
| Límite de velocidad | `rate_limit/*` con comportamiento de ráfaga/429 | Modelado de tráfico global enmascara comportamiento del limitador a nivel de aplicación | Limitadores de ventana larga no activados por ventana de sonda corta |
| WebSocket | `websocket/*` con comprobaciones de actualización/origen | Endpoints WS públicos intencionalmente anónimos | Autenticación requerida mediante encabezados de handshake no proporcionados en la sonda |
| Plantillas CVE | `cve/<id>/<check>` con evidencia de plantilla | Colisión de huella digital en endpoints genéricos | Ruta/contexto vulnerable no alcanzado desde URLs semilla |

Para conocer los detalles comprobación por comprobación y las recomendaciones de remediación, consulta [docs/scanners.md](https://github.com/teycir/apihunter/blob/HEAD/docs/scanners.md) y [docs/findings.md](https://github.com/teycir/apihunter/blob/HEAD/docs/findings.md).
Los documentos del escáner ahora incluyen un [Catálogo de comprobaciones del módulo](https://github.com/teycir/apihunter/blob/HEAD/docs/scanners.md#module-check-catalog) alineado con la fuente y un [Modelo de expectativa de falsos positivos](https://github.com/teycir/apihunter/blob/HEAD/docs/scanners.md#false-positive-expectation-model).

## Características

### Análisis de seguridad pasivo
- **Detección de configuración incorrecta de CORS**:
  - Generación dinámica de origen basada en el dominio objetivo
  - Pruebas de bypass de expresiones regulares (ataques de sufijo/prefijo)
  - Puntuación de severidad consciente de credenciales
  - Detección de origen comodín y nulo
- **Análisis de políticas CSP**:
  - Detección de política de seguridad de contenido faltante/débil
  - Directivas unsafe-inline/eval
  - Detección de fuentes comodín
  - Patrones de bypass de políticas
- **Seguridad GraphQL**:
  - Detección de consultas de introspección
  - Análisis de tipos/campos sensibles
  - Detección de soporte de agrupación de consultas
  - Sondeo de amplificación de alias (DoS)
  - Fuzzing activo de mutaciones (`--active-checks`, soporta `--dry-run`)
  - Exposición de GraphiQL/Playground
- **Análisis de tokens JWT**:
  - Confusión de algoritmo (alg=none, HS256→RS256)
  - Detección de secretos débiles (lista de palabras curada)
  - Detección de tokens de larga duración (exp faltante/excesivo)
  - Exposición de claims sensibles
  - Extracción de tokens de encabezados y cookies
- **Análisis de OpenAPI/Swagger**:
  - Validación de esquemas de seguridad
  - Detección de endpoints de subida de archivos
  - Marcado de operaciones obsoletas
  - Definiciones de seguridad faltantes
  - Caché de especificaciones para rendimiento
- **Cobertura de gRPC/Protobuf**:
  - Detección de metadatos/tipo de contenido de respuesta gRPC
  - Detección de pistas de superficie protobuf desde metadatos de endpoint/forma de ruta
  - Señales opcionales de sonda activa de reflexión/salud en rutas gRPC conocidas
- **Detección de exposición de secretos**:
  - Claves AWS (AKIA*, secret keys)
  - Claves de API de Google (AIza*)
  - Tokens de GitHub (ghp_*, github_pat_*)
  - Tokens de Slack (xox*)
  - Claves de Stripe (sk_live_*, pk_live_*)
  - URLs de base de datos, claves privadas, tokens Bearer
  - Validación consciente del contexto (reduce falsos positivos)
- **Comprobaciones de seguridad de API**:
  - Enumeración de métodos HTTP
  - Detección de endpoints de depuración
  - Exposición de listado de directorios
  - Presencia de security.txt
  - Análisis de encabezados de respuesta (HSTS, X-Frame-Options, etc.)
  - Divulgación de mensajes de error

### Pruebas de seguridad activas (--active-checks)
- **Comprobaciones IDOR/BOLA de seguridad de API** (enfoque de 3 niveles):
  - Prueba de acceso no autenticado
  - Comparación de respuestas mediante huellas dactilares del cuerpo más capturas de encabezados estables
  - Recorrido de enumeración de ID (±2 rango)
  - Bypass de autorización entre usuarios (doble identidad)
  - Sondeo de callback SSRF ciego mediante parámetros de consulta estilo callback (`APIHUNTER_OAST_BASE`, soporta `--dry-run`)
  - Huella dactilar de puerta de enlace y sondeo de bypass (`api_security/gateway-*`)
- **Vulnerabilidades de asignación masiva**:
  - Inyección de campos sensibles reflejados
  - Detección de cambio de estado persistido
  - Verificación Línea base→Mutación→Confirmación
  - Escalada de privilegios mediante inyección de campos
- **Seguridad OAuth/OIDC**:
  - Bypass de validación de URI de redirección
  - Manejo del parámetro state
  - Detección de soporte PKCE
  - Fortalecimiento de configuración de metadatos
  - Detección de flujo implícito y concesión de contraseña
- **Limitación de velocidad**:
  - Sondeo de solicitudes en ráfaga
  - Detección de falta de límite de velocidad
  - Validación del encabezado Retry-After
  - Pruebas de bypass de suplantación de encabezado IP
- **Seguridad WebSocket**:
  - Aceptación de actualización en rutas comunes
  - Pruebas de validación de origen
  - Comprobaciones de falta de autenticación
- **Motor de plantillas CVE**:
  - Catálogo de plantillas basado en TOML
  - Soporte de importación de YAML de Nuclei
  - Coincidencia diferencial de línea base vs bypass
  - Deduplicación de host+plantilla
  - Compuertas de calidad del cargador que saltan plantillas de solicitud no válidas/inseguras (por ejemplo, placeholders de solicitud no resueltos)
  - Coincidencia de contexto consciente de segmentos reduce la activación excesiva de subcadenas de ruta amplias
  - Catálogo local actual: 168 plantillas (incluye comprobaciones reforzadas curadas como CVE-2022-22947, CVE-2021-29442, CVE-2021-29441, CVE-2020-13945, CVE-2021-45232, CVE-2022-24288)

### Descubrimiento y enumeración
- **Descubrimiento de endpoints**:
  - Análisis de robots.txt
  - Análisis de sitemap.xml
  - Importación de especificación OpenAPI/Swagger
  - Importación de archivo HAR (integración con Excalibur)
  - Importación de colecciones de Postman/Insomnia (`--collection`)
  - Extracción de endpoints de JavaScript
  - Filtrado de mismo host
- **Prefiltrado de accesibilidad de URL**:
  - Comprobación rápida previa para saltar endpoints inactivos
  - Tiempo de espera configurable
  - Bypass opcional con --no-filter

### Rendimiento y fiabilidad
- **Concurrencia adaptativa (AIMD)**:
  - Ajuste automático de velocidad basado en errores
  - Aumento aditivo (cada 5s)
  - Disminución multiplicativa en 429/503/timeouts
- **Sigilo y evasión de WAF**:
  - Rotación de User-Agent desde grupo en tiempo de ejecución (assets/user_agents.txt con más de 100 UAs reales)
  - Fallback de UAs incrustados si el archivo no está disponible
  - Jitter de retraso aleatorio para evitar patrones de detección
  - Cumplimiento de temporización por host (no global)
  - Lógica de reintento con retroceso exponencial
  - Inyección de encabezados personalizados (X-Forwarded-For, Referer, etc.)
  - Temporización adaptativa basada en respuestas 429/503
  - Modo de cortesía para pruebas cooperativas
  - Sin huellas dactilares de escáner en User-Agent o encabezados por defecto
- **Gestión de recursos**:
  - Paralelismo limitado por semáforo
  - Grupos de clientes HTTP por host
  - Reutilización y agrupación de conexiones
  - Tiempos de espera y reintentos configurables
- **Manejo de errores**:
  - Recuperación de pánico mediante JoinSet
  - Errores capturados reportados por separado
  - Degradación gradual en fallos del escáner

### Salida e informes
- **Múltiples formatos de salida**:
  - JSON bonito (legible por humanos)
  - NDJSON (streaming, analizable)
  - SARIF 2.1.0 (Escaneo de código de GitHub/GitLab)
- **Diferenciación con línea base**:
  - Generar instantáneas de línea base
  - Comparar escaneos para reportar solo nuevos hallazgos
  - Perfecto para pruebas de regresión
- **Informes de guardado automático** (habilitado por defecto, deshabilitar con `--no-auto-report`):
  - Guardado en ~/Documents/ApiHunterReports/<timestamp>/
  - findings.json (hallazgos estructurados)
  - summary.md (informe en Markdown)
  - scan.log (registro de ejecución)
- **Streaming en tiempo real**:
  - Transmitir hallazgos a medida que se descubren
  - Formato NDJSON para análisis en vivo
  - Seguimiento de progreso
- **Filtrado por severidad**:
  - Filtrar por severidad mínima (info/baja/media/alta/crítica)
  - Umbral de fallo para CI/CD
  - Máscara de bits de código de salida (0x01 hallazgos, 0x02 errores)

### Integración y extensibilidad
- **Arquitectura de escáner conectable**:
  - Implementar el trait Scanner para agregar módulos
  - Diseño asíncrono primero
  - Ejecución independiente del escáner
  - Aislamiento de pánico por escáner
- **Extensibilidad basada en TOML**:
  - Catálogo de plantillas CVE en assets/cve_templates/*.toml
  - No se necesitan cambios de código para agregar nuevas comprobaciones
  - Detección de vulnerabilidades basada en plantillas
  - Formato de plantilla compartible por la comunidad
- **Importación de plantillas de Nuclei**:
  - Herramienta template-tool para conversión de YAML a TOML
  - Traducción automática de matchers (status, word, regex, dsl)
  - Extracción segura de cadena de solicitudes previas
  - Preserva la lógica de detección de las plantillas originales
- **Modelo de extensión dual**:
  - **Basado en código**: Escribir escáneres en Rust implementando el trait Scanner para lógica compleja
  - **Basado en plantillas**: Escribir plantillas TOML para comprobaciones basadas en firmas (CVEs, configuraciones incorrectas)
  - Lo mejor de ambos mundos: rendimiento + flexibilidad
- **Herramientas complementarias**:
  - Extensión de navegador Excalibur (captura HAR)
  - BurpAPIsecuritysuite (pruebas manuales)
  - Flujo de trabajo: Capturar → Automatizar → Prueba profunda

### Configuración y control
- **Entrada flexible**:
  - Listas de URLs basadas en archivos
  - stdin (pipe desde otras herramientas)
  - Importación de archivo HAR
  - Importación de colecciones de Postman/Insomnia
  - Importación de especificación OpenAPI
- **Control granular del escáner**:
  - Habilitar/deshabilitar escáneres individuales
  - Modo activo vs pasivo
  - Modo de prueba para comprobaciones activas
  - Configuración por escáner
- **Configuración de red**:
  - Soporte de proxy HTTP/HTTPS
  - Control de validación de certificado TLS
  - Encabezados y cookies personalizados
  - Tiempos de espera y reintentos configurables
- **Perfiles de escaneo**:
  - quickscan.sh (rápido, bajo impacto)
  - deepscan.sh (completo, comprobaciones activas)
  - inaccessiblescan.sh (revisar objetivos previamente inaccesibles con configuraciones más lentas)
  - baselinescan.sh (generar línea base)
  - diffscan.sh (comparar con línea base)
  - authscan.sh (escaneo autenticado)
  - sarifscan.sh (integración CI/CD)
  - scan-and-report.sh (ejecutar escaneo + imprimir ruta del informe más reciente)
  - split-by-host.sh (dividir objetivos por host y opcionalmente distribuir escaneos)

## Comparación con otras herramientas| Característica | ApiHunter | Nuclei | ZAP | Burp Suite | ffuf |
|---------|-----------|--------|-----|------------|------|
| **Lenguaje** | Rust | Go | Java | Java | Go |
| **Rendimiento** | ⚡⚡⚡ Asíncrono, concurrencia adaptativa | ⚡⚡ Rápido en paralelo | ⚡ Moderado | ⚡ Moderado | ⚡⚡⚡ Muy rápido |
| **Diseño Primero-API** | ✅ Construido para APIs | ❌ Web general | ⚠️ Híbrido | ⚠️ Híbrido | ❌ Enfoque en fuzzing |
| **Filtrado de Falsos Positivos** | ✅ Detección SPA, validación de cuerpo, comprobaciones de referer | ⚠️ Dependiente de plantillas | ⚠️ Muchos FP | ✅ Bueno | N/A |
| **Análisis CORS/CSP** | ✅ Análisis profundo de políticas | ⚠️ Plantillas básicas | ✅ Bueno | ✅ Bueno | ❌ |
| **Introspección GraphQL** | ✅ Exposición de esquema + comprobaciones de campos sensibles | ⚠️ Detección básica | ⚠️ Limitado | ✅ Mediante extensiones | ❌ |
| **OpenAPI/Swagger** | ✅ Análisis de esquemas de seguridad | ❌ | ✅ Solo importación | ✅ Importación + escaneo | ❌ |
| **Análisis JWT** | ✅ alg=none, secretos débiles, caducidad | ⚠️ Mediante plantillas | ⚠️ Limitado | ✅ Mediante extensiones | ❌ |
| **Detección IDOR/BOLA** | ✅ 3 niveles (sin autenticar/rango/entre usuarios) | ⚠️ Plantillas manuales | ⚠️ Limitado | ✅ Pruebas manuales | ❌ |
| **Detección de Secretos** | ✅ Consciente del contexto (frontend vs backend) | ⚠️ Basado en regex | ⚠️ Básico | ⚠️ Básico | ❌ |
| **Comprobaciones Activas** | ✅ Opt-in (IDOR, mass-assignment, OAuth/OIDC, websocket, límite de tasa, plantillas CVE) | ✅ Basado en plantillas | ✅ Escaneo activo | ✅ Escaneo activo | ✅ Fuzzing |
| **Evasión de WAF** | ✅ Rotación de UA, retardos, reintentos, temporización adaptativa | ⚠️ Básico | ⚠️ Limitado | ✅ Bueno | ⚠️ Básico |
| **Integración CI/CD** | ✅ NDJSON, SARIF, códigos de salida | ✅ JSON, SARIF | ⚠️ Informes XML | ⚠️ XML/JSON | ✅ JSON |
| **Diffing de Línea Base** | ✅ Integrado | ❌ Herramientas externas | ❌ | ❌ | ❌ |
| **Flujos de Autenticación** | ✅ Inicio de sesión pre-escaneo basado en JSON | ⚠️ Inyección de cabecera | ✅ Gestión de sesiones | ✅ Gestión de sesiones | ⚠️ Inyección de cabecera |
| **Salida en Streaming** | ✅ NDJSON en tiempo real | ❌ Solo por lotes | ❌ | ❌ | ✅ |
| **Uso de Recursos** | 🟢 Bajo (Rust) | 🟢 Bajo (Go) | 🟡 Alto (Java) | 🟡 Alto (Java) | 🟢 Bajo (Go) |
| **Curva de Aprendizaje** | 🟢 CLI sencillo | 🟢 Sintaxis de plantillas | 🟡 Complejidad de GUI | 🔴 Empinada | 🟢 Sencillo |
| **Extensibilidad** | ✅ Sistema de traits Rust | ✅ Plantillas YAML | ✅ Complementos | ✅ Extensiones | ⚠️ Limitada |
| **Licencia** | MIT (Gratuita) | MIT (Gratuita) | Apache 2.0 (Gratuita) | Comercial | MIT (Gratuita) |
| **Mejor para** | Seguridad de APIs en CI/CD, pruebas de regresión, análisis CORS/GraphQL/JWT | Escaneo de vulnerabilidades general, detección de CVEs | Pentesting completo de aplicaciones web | Pentesting manual, flujos de trabajo complejos | Fuzzing de directorios/parámetros |

### Diferenciadores Clave

**ApiHunter:** Diseño primero-API, detección SPA, diffing de línea base, IDOR/BOLA de 3 niveles, secretos conscientes del contexto, concurrencia AIMD, **evasión sigilosa/WAF (rotación de UA, jitter, temporización adaptativa)**, **extensibilidad dual (plantillas TOML + módulos Rust)**  
**Nuclei:** Cobertura CVE más amplia, solo plantillas YAML, evasión básica  
**ZAP/Burp:** Pruebas manuales, flujos de proxy, extensiones basadas en GUI, sigilo limitado  
**ffuf:** Fuzzing puro, descubrimiento de contenido, extensibilidad limitada, evasión básica

## Inicio Rápido```bash
cargo build --release

# Scan URLs from a file (newline-delimited)
./target/release/apihunter --urls ./targets/cve-regression-real-public.txt --format ndjson --output ./results.ndjson

# Or scan URLs from stdin
cat ./targets/cve-regression-real-public.txt | ./target/release/apihunter --stdin --min-severity medium

Inicio rápido de escritorio (Tauri + React)

ApiHunter también incluye una aplicación de escritorio en apps/desktop.```bash cd apps/desktop npm install npm run tauri dev

root@kitploit:~
La entrada de escaneo de escritorio admite:
- Entrada manual de múltiples objetivos (una URL por línea o separada por comas)
- Importación CSV mediante `Load CSV` (máx. 307,200 bytes / 300 KiB)
- Presets de escaneo guiado: `Quick Passive` y `Deep Active`
- Límite estricto: hasta 3,000 objetivos por ejecución (deduplicados + validados como URLs absolutas `http/https`)
- Controles de alcance: descubrimiento activado/desactivado, filtro de accesibilidad + tiempo de espera, máximo de endpoints por sitio
- Controles de versionado de API: opción de sondeo profundo de diferencias en respuestas
- Controles avanzados: proxy, cabeceras, cookies, autenticación bearer/básica, opción de certificado TLS inválido
- Entrada de correlación de callback SSRF ciego (`OAST callback base`) para comprobaciones activas
- Controles de rendimiento: clientes por host, concurrencia adaptativa, evasión de WAF con pool de user-agent personalizado
- Cobertura completa de alternancia del escáner incluyendo `API Versioning` y `gRPC/Protobuf`
- Secciones de escaneo plegables con caret alineado a la derecha; `Safety and Scan Behavior`, `Runtime Limits` y `Scanner toggles` están plegadas por defecto
- Tarjetas de progreso de ejecución paralela con instantáneas de finalización y hallazgos por objetivo
- Panel de análisis de resultados: mapa de calor de gravedad, tarjeta del peor objetivo, eficiencia del escaneo, cobertura del escáner, rutas más vulnerables, desglose de gravedad de comprobaciones
- Persistencia de sesión: los últimos resultados de escaneo se restauran automáticamente en el próximo inicio
- Panel de modo de enriquecimiento: cargar hallazgos NDJSON, ejecutar enriquecimiento de inteligencia de amenazas, promover hosts con alta puntuación directamente a Escaneo Completo con el preset Deep Active
- UX de exportación: etiquetas de tamaño + `Save All Reports` + nombres de archivo con marca de tiempo por ejecución; las exportaciones incluyen paquetes JSON por objetivo, NDJSON, SARIF, colección de Insomnia y datos de Insomnia Runner

Consulte [HOWTO.md](https://github.com/teycir/apihunter/blob/HEAD/HOWTO.md) para uso detallado, [docs/lab-setup.md](https://github.com/teycir/apihunter/blob/HEAD/docs/lab-setup.md) para laboratorios de validación CVE basados en Vulhub, y [docs/](https://github.com/teycir/apihunter/blob/HEAD/docs/) para detalles internos.

Si desea un binario de escritorio de lanzamiento:```bash
cd apps/desktop
npm run tauri build
./src-tauri/target/release/apihunter-desktop

Instala un icono/lanzador de aplicación Linux cliqueable:```bash cd apps/desktop npm run desktop:install-icon

root@kitploit:~
Nota: el inicio del desarrollo de escritorio ahora usa los activos del frontend compilados directamente y no requiere un servidor `localhost:1420` separado.

Consulte [HOWTO.md](https://github.com/teycir/apihunter/blob/HEAD/HOWTO.md) para uso detallado, [docs/lab-setup.md](https://github.com/teycir/apihunter/blob/HEAD/docs/lab-setup.md) para laboratorios de validación de CVE basados en Vulhub y [docs/](https://github.com/teycir/apihunter/blob/HEAD/docs/) para detalles internos.

### Ejemplo de hallazgo NDJSON```json
{
  "url": "https://api.example.com/graphql",
  "check": "graphql/introspection-enabled",
  "title": "GraphQL introspection is enabled",
  "severity": "MEDIUM",
  "detail": "Introspection query returned schema metadata from a public endpoint.",
  "evidence": "POST /graphql -> HTTP 200 with __schema fields in response body",
  "scanner": "graphql",
  "timestamp": "2026-03-19T14:02:11.824Z"
}

Arquitectura```

main.rs ──► cli.rs (args) ──► config.rs (Config) │ runner.rs (orchestration) ┌──────┴────────────────────────────┐ discovery/ scanner/ ├─ robots.rs ├─ cors.rs ├─ sitemap.rs ├─ csp.rs ├─ swagger.rs ├─ jwt.rs ├─ js.rs ├─ graphql.rs ├─ headers.rs ├─ openapi.rs └─ common_paths.rs ├─ api_security.rs ├─ api_versioning.rs ├─ grpc_protobuf.rs ├─ mass_assignment.rs ├─ oauth_oidc.rs http_client.rs ├─ rate_limit.rs auth.rs ├─ cve_templates.rs waf.rs └─ websocket.rs reports.rs error.rs

root@kitploit:~
**Flujo:** CLI args → Config → Runner orquestra Discovery + Scanners → HTTP Client (con Auth/WAF) → Reports

## Herramientas de Plantillas

ApiHunter soporta **doble extensibilidad**: agregue comprobaciones mediante **plantillas TOML** (sin código) o **módulos Rust** (control total).

### Formato de Plantilla TOML
Cree comprobaciones personalizadas en `assets/cve_templates/*.toml`:```toml
id = "custom-api-check"
name = "Custom API Vulnerability"
severity = "high"

[[requests]]
method = "GET"
path = "/api/vulnerable"

[[requests.matchers]]
type = "status"
values = [200]

[[requests.matchers]]
type = "word"
part = "body"
words = ["sensitive_data", "exposed"]

Importar Plantillas de Nuclei

Convertir plantillas YAML de Nuclei existentes:```bash cargo run --bin template-tool -- import-nuclei
--input tests/fixtures/upstream_nuclei/CVE-2022-24288.yaml
--output assets/cve_templates/cve-2022-24288.toml

root@kitploit:~
### Añadir escáneres Rust personalizados
Implementa el trait `Scanner` para lógica compleja:```rust
#[async_trait]
impl Scanner for MyCustomScanner {
    async fn scan(
        &self,
        url: &str,
        client: &HttpClient,
        config: &Config,
    ) -> (Vec<Finding>, Vec<CapturedError>) {
        // Your custom scanning logic
    }
}

Consulte HOWTO.md y docs/scanners.md para obtener detalles.

Scripts de Escaneo

ScanScripts/ contiene envoltorios de conveniencia para perfiles de escaneo comunes:

  • quickscan.sh - Escaneo rápido de bajo impacto (concurrencia: 10, max-endpoints: 20, tiempo de espera: 5s, reintentos: 0, retardo: 50ms)
  • deepscan.sh - Escaneo exhaustivo con comprobaciones activas (concurrencia adaptativa, clientes por host, endpoints ilimitados, reintentos: 3, tiempo de espera: 20s, retardo: 200ms)
  • defaultscan.sh - Ejecutar con valores predeterminados de la CLI (sin indicadores predefinidos)
  • baselinescan.sh - Generar línea base NDJSON para comparación
  • diffscan.sh - Comparar con la línea base y reportar solo hallazgos nuevos
  • authscan.sh - Escaneo autenticado con flujos de autenticación (requiere --auth-flow, activa comprobaciones activas, evasión de WAF, reintentos: 2, tiempo de espera: 15s, retardo: 150ms)
  • sarifscan.sh - Generar formato SARIF para integración CI/CD
  • inaccessiblescan.sh - Re-escanear URLs previamente inaccesibles con reintentos/tiempos de espera conservadores
  • scan-and-report.sh - Ejecutar escaneo e imprimir la ubicación del informe auto-guardado más reciente
  • split-by-host.sh - Dividir lista de URLs en archivos por host y, opcionalmente, escanearlos en paralelo

Ejemplos de Uso```bash

Quick scan from file

./ScanScripts/quickscan.sh targets/cve-regression-real-public.txt

Deep scan from stdin

cat targets/cve-regression-real-public.txt | ./ScanScripts/deepscan.sh --stdin

Generate baseline

./ScanScripts/baselinescan.sh targets/cve-regression-real-public.txt

Compare against baseline

./ScanScripts/diffscan.sh targets/cve-regression-real-public.txt baseline.ndjson

Authenticated scan

./ScanScripts/authscan.sh targets/cve-regression-real-public.txt --auth-flow auth.json

SARIF output for GitHub Code Scanning

./ScanScripts/sarifscan.sh targets/cve-regression-real-public.txt

Split by host and scan in parallel

./ScanScripts/split-by-host.sh targets/cve-regression-real-public.txt --scan-cmd ./ScanScripts/quickscan.sh --jobs 4

root@kitploit:~
Todos los scripts contenedores excepto `split-by-host.sh` soportan `--stdin` y los flags finales de ApiHunter.

## Estrategia de pruebas

Las pruebas de ApiHunter se dividen por intención:

- **Pruebas unitarias** (`tests/*_scanner.rs`, pruebas de parser/config): lógica del escáner y casos límite.
- **Pruebas de integración** (`tests/integration_runner.rs`, comportamiento de inicio/CLI): orquestación y cableado en tiempo de ejecución.
- **Pruebas de regresión con fixtures** (`tests/cve_templates_real_data.rs`, `tests/cve_templates_upstream_parity.rs`): reproducción de cargas útiles reales y comparación con plantillas fijadas ascendentes.
- **Pruebas con servidor simulado** (múltiples suites de escáner): comprobaciones de comportamiento determinista sin depender de destinos de Internet.
- **Comprobaciones de destino en vivo**: solo opcional/manual (no forman parte de `cargo test` por defecto).

Consulte la [Guía de pruebas](https://github.com/teycir/apihunter/blob/HEAD/docs/testing.md) dedicada para obtener la matriz de pruebas completa y el mapa de cobertura.

Ejecute conjuntos enfocados:```bash
cargo test --test cors_scanner
cargo test --test graphql_scanner
cargo test --test cve_templates_runtime_ext
cargo test --test integration_runner

Ejecutar validación completa:```bash cargo test

root@kitploit:~
Ejecutar la puerta de integración de datos reales (fixtures + suites ignoradas en vivo):```bash
# Fixture-backed real payload regression suites
cargo test --test cve_templates_real_data --test cve_templates_upstream_parity --test cve_templates_runtime_ext

# Manual live internet integration suites (ignored by default)
cargo test --test live_vulnerable_apis --test live_real_world_targets -- --ignored

Los conjuntos en vivo usan inventarios de objetivos predeterminados:

  • targets/vuln-api-regression-real-public.txt
  • targets/real-world-integration-public.txt

Puede sobrescribir con:

  • APIHUNTER_LIVE_VULN_TARGET_FILE o APIHUNTER_LIVE_VULN_TARGETS
  • APIHUNTER_LIVE_REAL_TARGET_FILE o APIHUNTER_LIVE_REAL_TARGETS

Documentación

La documentación completa está disponible en docs/. Comience con:

  • Índice de documentación
  • Guía de la aplicación de escritorio
  • Arquitectura
  • Configuración
  • Flujo de autenticación
  • Guía de pruebas
  • Manual de operaciones
  • Escáneres
  • Hallazgos y remediación
  • Política de seguridad
  • HOWTO
  • Modo de triaje
  • Modo de enriquecimiento

Hoja de ruta

Completado (v0.7.0): Rediseño de la interfaz de usuario Glass, persistencia de escaneos (almacén de último escaneo), panel de análisis de resultados (mapa de calor de gravedad, tarjeta del peor objetivo, eficiencia de escaneo, cobertura de escáner, desglose de gravedad de verificación), flujo de promoción de Enrich a Deep-Scan, modo de triaje/inteligencia de amenazas, configuración de descubrimiento, escáneres de WebSocket/Asignación masiva/OAuth/Límite de tasa/CVE, importador de Nuclei expandido, imagen Docker
Próximo: División del componente App.tsx, búfer circular de historial de escaneos, cajón de detalles de hallazgos, exportación de informes HTML/PDF, acción nativa de GitHub Actions, tiempo por objetivo en progreso en vivo

Instalación

Instalación de CLI

Requiere Rust estable (probado en 1.76+).```bash git clone https://github.com/Teycir/ApiHunter cd ApiHunter cargo build --release

root@kitploit:~
### Artefactos de Versión Precompilados

Las versiones etiquetadas (`v*`) publican binarios precompilados de `apihunter` para:

- Linux (`x86_64-unknown-linux-gnu`, `aarch64-unknown-linux-gnu`)
- macOS (`x86_64-apple-darwin`)
- Windows (`x86_64-pc-windows-msvc`)

Cada versión también publica artefactos de la cadena de suministro:

- Archivos de suma de verificación SHA256 (`*.sha256`)
- Materiales de firma sin clave Sigstore (`*.sig`, `*.pem`, `*.sigstore.json`)
- SPDX JSON SBOM (`apihunter-release-assets-sbom.spdx.json`)
- Atestaciones de artefactos de GitHub (metadatos de atestación de procedencia y SBOM)

Descargar desde [GitHub Releases](https://github.com/Teycir/ApiHunter/releases).

### Instalación de Escritorio (Tauri + React)

El código fuente de la aplicación de escritorio se encuentra en `apps/desktop`.

Compila y ejecuta un binario de escritorio de producción:```bash
cd apps/desktop
npm install
npm run tauri build
./src-tauri/target/release/apihunter-desktop

Para el modo de desarrollo:```bash cd apps/desktop npm run tauri dev

root@kitploit:~
Instalar un icono de lanzador de Linux en el que se pueda hacer clic:```bash
cd apps/desktop
npm run desktop:install-icon

Funciones de escritorio (resumen):

  • Escaneos multi-objetivo (hasta 3000 objetivos) con entrada manual + importación CSV (límite de 300 KiB)
  • Ajustes preestablecidos guiados: Quick Passive y Deep Active
  • Interfaz de progreso en vivo con tarjetas de estado por objetivo
  • Controles completos del perfil de escaneo (detección/filtrado, reintentos/tiempos de espera, alternancias del escáner)
  • Secciones de escaneo plegables con cursores alineados a la derecha; subsecciones pesadas colapsadas por defecto
  • Control de alternancia de diferencia de respuesta profunda en versionado de API y control base de devolución de llamada OAST
  • Controles avanzados de tiempo de ejecución (proxy/encabezados de autenticación/cookies, alternancia TLS, opciones de WAF/adaptativo/por-host)
  • Panel de análisis de resultados: mapa de calor de gravedad, peor objetivo, eficiencia del escaneo, cobertura del escáner, desglose de gravedad de comprobaciones, rutas vulnerables principales, resumen por objetivo
  • Persistencia de sesión: el último escaneo se restaura automáticamente al próximo inicio con una insignia de marca de tiempo
  • Panel de modo de enriquecimiento: enriquecimiento de inteligencia de amenazas con flujo de promoción a escaneo profundo por host
  • Exportación con un clic para paquetes JSON por objetivo, NDJSON, SARIF, colección de Insomnia y datos de Insomnia Runner

Docker```bash

docker build -t apihunter:local . docker run --rm apihunter:local --help

root@kitploit:~
Ejecuta un escaneo desde archivos en tu directorio actual:```bash
docker run --rm -v "$PWD:/work" apihunter:local \
  --urls /work/targets/cve-regression-real-public.txt \
  --format ndjson \
  --output /work/results.ndjson

CLI Reference

*Debe proporcionar exactamente uno de --urls, --stdin, --har, o --collection.

Códigos de Salida

Barreras de Seguridad y Legales

  • --proxy no deshabilita la verificación TLS por sí solo. Las comprobaciones de certificado permanecen activadas a menos que --danger-accept-invalid-certs esté explícitamente configurado.
  • --danger-accept-invalid-certs está pensado únicamente para uso controlado en laboratorio/depuración. ApiHunter emite una advertencia explícita en tiempo de ejecución cuando se activa esta bandera.
  • --waf-evasion y los sondeos activos pueden activar alertas IDS/WAF. Ejecutar solo con autorización explícita por escrito y dentro de ventanas de prueba acordadas.
  • Para CI o comprobaciones cercanas a producción, prefiera el modo pasivo primero, luego delimite las comprobaciones activas a los objetivos aprobados.

Proyectos Relacionados

ApiHunter forma parte de un conjunto de herramientas complementarias para pruebas de seguridad:

  • Excalibur - Extensión de navegador para capturar tráfico de API y exportar archivos HAR con cookies de sesión. Use con ApiHunter mediante las banderas --har y --session-file.
  • BurpAPIsecuritysuite - Extensión de Burp Suite para pruebas de seguridad de API interactivas. Complementa el escaneo automatizado de ApiHunter con flujos de trabajo de pruebas manuales.

Flujo de trabajo: Capturar tráfico con Excalibur → Línea base automatizada con ApiHunter → Pruebas manuales profundas con BurpAPIsecuritysuite

Acerca de

Autor: Teycir Ben Soltane
Correo electrónico: [email protected]
Sitio web: teycirbensoltane.tn

FAQ

P: ¿Por qué ApiHunter frente a Nuclei/ZAP/Burp?
R: Diseño centrado en API, detección de SPA, comparación de líneas base, IDOR de 3 niveles, secretos sensibles al contexto. Complementario a Nuclei (cobertura de CVE) y ZAP/Burp (pruebas manuales).

P: ¿Seguro para producción?
R: Sí. Use --delay-ms y reduzca --concurrency. Pruebe quickscan.sh.

P: ¿Escaneos autenticados?
R: --auth-bearer, --auth-basic, o --auth-flow. Para IDOR: --auth-flow-b.

P: Comparación de velocidad (1000 puntos finales)?
Depende de la latencia del punto final, reintentos, comportamiento del destino y comprobaciones activadas. Use --concurrency, --delay-ms y --active-checks para ajustar el rendimiento frente al impacto.

P: ¿Escaneo lento?
Aumente --concurrency (por defecto: 20), reduzca --delay-ms (por defecto: 150ms), active --adaptive-concurrency.

P: ¿Formatos de salida?
pretty (por defecto), ndjson (transmisión), sarif (integración CI).

P: ¿Integración CI/CD?```bash ./target/release/apihunter --urls targets/cve-regression-real-public.txt --fail-on medium --format sarif --output results.sarif

root@kitploit:~
**P: ¿Diferenciación de línea base?**```bash
./target/release/apihunter --urls targets/cve-regression-real-public.txt --format ndjson --output baseline.ndjson
./target/release/apihunter --urls targets/cve-regression-real-public.txt --baseline baseline.ndjson --format ndjson

P: ¿Verificaciones pasivas vs activas?
Pasivo (por defecto): analiza respuestas. Activo (--active-checks): envía solicitudes elaboradas (IDOR, asignación masiva, OAuth, límite de tasa, sondeos CVE).

P: ¿Pruebas de CORS?
Generación dinámica de origen: null, https://evil.com, https://<target>.evil.com, https://evil<target>. Prueba evasiones de regex cuando se refleja.

P: ¿Detección de IDOR?
3 niveles: (1) obtención no autenticada, (2) enumeración de ID (±2), (3) entre usuarios (--auth-flow-b).

P: ¿Detección de secretos?
Claves de AWS/Google/GitHub/Slack/Stripe, tokens Bearer, URLs de BD, claves privadas. Validación sensible al contexto.

P: ¿Cookies?
--cookies "session=abc", --session-file excalibur.json, o --auth-flow login.json.

P: ¿Proxy?
--proxy http://proxy.corp.com:8080

P: ¿Registro de depuración?
RUST_LOG=debug ./target/release/apihunter --urls targets/cve-regression-real-public.txt

P: ¿Concurrencia adaptativa?
AIMD: aumenta en 1 cada 5 s, se reduce a la mitad en errores (429/503/timeouts). Activar con --adaptive-concurrency.

P: ¿Deshabilitar escáneres?
--no-cors, --no-csp, --no-graphql, --no-api-security, --no-jwt, --no-openapi, --no-api-versioning, --no-mass-assignment, --no-oauth-oidc, --no-rate-limit, --no-cve-templates, --no-websocket.

P: ¿Es ApiHunter sigiloso?
R: Sí. Características: rotación de UA desde más de 100 navegadores reales (assets/user_agents.txt), retardos aleatorios con jitter, limitación de tasa por host, retroceso adaptativo en 429/503, sin huellas de escáner en cabeceras, lógica de reintento exponencial, inyección de cabeceras personalizadas. Activar con --waf-evasion.

P: ¿Cómo funciona la evasión de WAF?
R: Rota automáticamente los User-Agents de un grupo seleccionado, añade jitter aleatorio a los retardos, aplica temporización por host (no ráfagas globales), retrocede exponencialmente en límites de tasa, y permite inyección de cabeceras personalizadas para mezclarse con tráfico legítimo. Sin cadenas "scanner" en las cabeceras predeterminadas.

Consulte CONTRIBUTING.md para las pautas de desarrollo.

License

MIT

Descargar herramienta
FlagDefaultDescripción
--urlsrequerido*Ruta a un archivo de URLs separadas por nueva línea
--stdinoffLeer URLs separadas por nueva línea desde stdin
--haroffImportar URLs de peticiones de API probables desde HAR (log.entries[].request.url)
--collectionoffImportar URLs de peticiones de API probables desde un JSON de exportación de colección de Postman/Insomnia
--outputstdoutEscribir resultados en un archivo en lugar de stdout
--formatprettyFormato de salida: pretty, ndjson o sarif
--streamoffTransmitir hallazgos NDJSON a medida que llegan
--baselinenoneLínea base NDJSON para hallazgos solo por diferencias
--quietoffSuprimir salida stdout no relacionada con errores
--summaryoffImprimir resumen incluso en modo silencioso
--no-auto-reportoffOmitir escritura de informes automáticos locales en ~/Documents/ApiHunterReports
--min-severityinfoFiltrar hallazgos por debajo de este nivel
--fail-onmediumSalir con código distinto de cero en o por encima de esta severidad
--concurrency20Máximo de peticiones en curso
--max-endpoints50Limitar puntos finales escaneados por sitio (0 = ilimitado)
--delay-ms150Retardo mínimo entre peticiones por host
--retries1Intentos de reintento en fallos transitorios
--timeout-secs8Tiempo de espera por petición en segundos
--no-filteroffOmitir prefiltrado de URLs inaccesibles
--filter-timeout3Tiempo de espera para la verificación previa de accesibilidad (segundos)
--no-discoveryoffOmitir descubrimiento de puntos finales y escanear solo las URLs semilla proporcionadas
--waf-evasionoffActivar heurísticas de evasión de WAF
--user-agentsnoneLista de UA separada por comas (implica evasión de WAF)
--headersnoneCabeceras de petición adicionales (ej. Authorization: Bearer ...)
--cookiesnoneCookies separadas por comas (ej. session=abc,theme=dark)
--auth-bearernoneAñadir Authorization: Bearer <token>
--auth-basicnoneAñadir autenticación básica HTTP (user:pass)
--auth-flownoneArchivo de flujo de autenticación JSON (inicio de sesión previo al escaneo)
--auth-flow-bnoneSegundo flujo de autenticación para comprobaciones IDOR entre usuarios
--unauth-strip-headersnoneNombres de cabecera adicionales a eliminar para sondeos no autenticados
--session-filenoneCargar/guardar cookies desde un JSON de sesión de Excalibur ({"hosts": {...}})
--proxynoneURL de proxy HTTP/HTTPS
--danger-accept-invalid-certsoffOmitir validación de certificados TLS
--active-checksoffActivar sondeos activos (potencialmente invasivos)
--dry-runoffSimulación de comprobaciones activas (informar de los sondeos previstos sin enviar peticiones de mutación)
--response-diff-deepoffActivar sondeos de variantes de diferencias de respuesta más profundos en comprobaciones de versionado de API
--per-host-clientsoffUsar grupos de clientes HTTP por host
--adaptive-concurrencyoffConcurrencia adaptativa (AIMD)
--no-corsoffDeshabilitar el escáner CORS
--no-cspoffDeshabilitar el escáner CSP
--no-graphqloffDeshabilitar el escáner GraphQL
--no-api-securityoffDeshabilitar el escáner de seguridad de API
--no-jwtoffDeshabilitar el escáner JWT
--no-openapioffDeshabilitar el escáner OpenAPI
--no-api-versioningoffDeshabilitar el escáner de versionado de API
--no-grpc-protobufoffDeshabilitar el escáner gRPC/Protobuf
--no-mass-assignmentoffDeshabilitar el escáner de Asignación Masiva (comprobaciones activas)
--no-oauth-oidcoffDeshabilitar el escáner OAuth/OIDC (comprobaciones activas)
--no-rate-limitoffDeshabilitar el escáner de Límite de Tasa (comprobaciones activas)
--no-cve-templatesoffDeshabilitar el escáner de plantillas CVE (comprobaciones activas)
--no-websocketoffDeshabilitar el escáner WebSocket (comprobaciones activas)
CódigoSignificado
0Sin hallazgos en o por encima del umbral --fail-on y sin errores
1Uno o más hallazgos en o por encima del umbral --fail-on
2Uno o más escáneres capturaron errores
3Tanto hallazgos como errores