API Security Testing
ACTION REQUIRED (Ejecutar Inmediatamente Después de Leer)
NOW: Leer../field-journal/precedent-pentest.md— Confirmar que la operación de este skill está autorizada y es rutinaria.NOW: Confirmar si la tarea actual se encuentra dentro del alcance de este skill.NEXT: Leer../tool-index.md, verificar la disponibilidad de las herramientas y las rutas reales.NEXT: Si faltan herramientas, invocar bootstrap, no adivinar rutas.ACT: Entrar en el primer paso del "flujo de trabajo" y ejecutarlo, no quedarse en estado de confirmación.
Cubre los protocolos REST / GraphQL / WebSocket / SOAP Metodología de 10 fases, desde el descubrimiento hasta la integración CI/CD
Escenarios de Aplicación
- Pruebas de seguridad REST API (impulsadas por OpenAPI/Swagger o pruebas ciegas)
- Auditoría de seguridad GraphQL (introspección, consultas por lotes, sobrecarga de alias)
- Pruebas de seguridad WebSocket
- Pruebas de autenticación JWT / OAuth 2.0
- Detección de vulnerabilidades de autorización BOLA/IDOR/BFLA
- Pruebas de omisión de límite de tasa y DoS en API
Flujo de Pruebas de 10 Fases
Fase 1: Descubrimiento y Reconocimiento de API
Descubrimiento activo:
□ Vespasian: Rastreo con navegador sin cabeza → Generación automática de especificaciones OpenAPI 3.0 / GraphQL SDL
□ Entropy --discover: Extraer endpoints de robots.txt + archivos JS
□ Kiterunner / ffuf: Fuerza bruta a rutas de endpoints no documentados
□ Verificar rutas comunes: /swagger.json, /openapi.json, /graphql, /api-docs
Introspección GraphQL (tres niveles de intento):
1. Consulta de introspección estándar
2. Consulta reducida (para evitar bloqueo completo de WAF)
3. Solo consultar __schema { types { name } } (detección mínima)
Fase 2: Pruebas de Autenticación
Análisis JWT (jwt_tool / Burp):
□ Ataque alg:none: Modificar el encabezado a "alg":"none", borrar la firma
□ Confusión de claves: Clave pública RS256 → Clave simétrica HS256
□ Fuerza bruta de clave HMAC débil: jwt_tool -C -d wordlist.txt
□ Manipulación de expiración/claims: Modificar claims exp/iat/sub/role
□ Inyección kid: ../../etc/passwd → Omisión de firma HMAC
OAuth 2.0:
□ Manipulación de redirect_uri → Fuga de código de autorización
□ CSRF por ausencia de parámetro state
□ Fuga de Token en cabecera Referer
□ Detección de ausencia de PKCE
Autenticación GraphQL:
□ Omisión de autenticación en mutation mediante solicitud GET (CSRF)
□ Omisión de autenticación en consultas por lotes
Fase 3: Pruebas de Autorización (BOLA/IDOR/BFLA)
BOLA (Omisión de autorización a nivel de objeto):
□ Iteración de ID numérico: /user/1 → /user/2 → /user/3
□ Iteración de UUID
□ Iteración de nombres de usuario/correos electrónicos
□ Burp Autorize: Reproducción de doble sesión con comparación
BFLA (Omisión de autorización a nivel de función):
□ Usuario normal ejecuta API de administrador
□ Cambio de método HTTP: GET → PUT → PATCH → DELETE
□ Degradación de versión de API: /v2/admin → /v1/admin
□ Inyección en operaciones por lotes: {"users": [1,2,3]} → {"users": [1,2,3,admin_id]}
Herramientas: Burp Autorize, AuthMatrix, Entropy (persona malicious_insider)
Fase 4: Específico de GraphQL
Fuga de introspección → Detección de exposición de información
Sobrecarga de alias → DoS con 100+ alias
Consultas por lotes → DoS con 10+ consultas simultáneas
Duplicación de campos → __typename × 500
Sobrecarga de directivas → @skip/@include recursivo
Consultas cíclicas → Introspección recursiva anidada profunda
Sugerencias de campo → Fuga de información en mensajes de error
Exposición de GraphiQL/Playground → Riesgo de IDE público
Mutation GET → Riesgo de CSRF
Modo de seguimiento/depuración → Fuga de metadatos
Herramientas: FireTail, Escape DAST, api.sh (Fases 1-3)
Fase 5: Validación de Entrada REST
□ Cambio de método HTTP: GET→POST→PUT→DELETE→OPTIONS→PATCH
□ Manipulación de Content-Type: JSON→XML→multipart
□ Inyección NoSQL: {"username": {"$gt": ""}}
□ SSRF vía parámetros URL: URL de webhook/URL de avatar/URL de importación
□ XXE en endpoints XML
□ Contaminación de parámetros: /api?role=user&role=admin
□ Asignación masiva: Agregar is_admin: true al cuerpo de la solicitud
Fase 6: Lógica de Negocio y Pruebas Diferenciales
□ Entropy compare: diff v1 vs v2 API → cambios en códigos de estado/eliminación de campos/regresión de latencia
□ Pruebas de flujo de trabajo multi-rol: matriz de permisos admin/user/readonly
□ Manipulación de cupones/puntos/precios
□ Condiciones de carrera: Pruebas de solicitudes concurrentes TOCTOU
Fase 7: Pruebas WebSocket
□ Descubrimiento de endpoints
□ Inyección de mensajes (inyección de payload, contaminación de prototipos)
□ Manejo de mensajes de gran tamaño
□ Confusión de tipos
□ Secuestro de WebSocket entre sitios (CSWH)
Fase 8: Límites de Tasa y DoS
□ Omisión de límite de tasa vía cabeceras: X-Forwarded-For, X-Real-IP
□ Variantes de ruta: /api/ → /api → /Api/ → /API/
□ Agotamiento de ancho de banda con Slowloris
□ DoS por consultas por lotes anidadas profundas en GraphQL
□ Pruebas de rotación de IP (ProxyCat pool de proxies)
Fase 9: Exposición de Datos
□ Exposición excesiva de la respuesta: Comparar la respuesta de la API con la visualización de la UI
□ Enumeración de paginación: ?page=1&limit=10000
□ Fuga de información en mensajes de error: seguimiento de pila/rutas internas/errores SQL
□ Acceso a datos no autorizados mediante recorrido anidado en GraphQL
□ Especificación OpenAPI expone endpoints sensibles
Fase 10: Integración CI/CD
□ Entropy --ci --watch: Re-ejecución automática cuando cambia la especificación
□ Escape DAST: Bloqueo automático de la compilación según el umbral de gravedad
□ Persistencia de hallazgos como pruebas de regresión
□ StackHawk (prioridad al desarrollador, núcleo ZAP)
Cadena de Herramientas
| Herramienta | Propósito | Obtención |
|---|---|---|
| Vespasian | Tráfico → Especificación OpenAPI/GraphQL | GitHub: praetorian-inc/vespasian |
| Entropy | Generación de escenarios de ataque con LLM, 5 personas | GitHub: arjinexe/entropy-chaos |
| Escape DAST | Pruebas de seguridad de lógica de negocio | escape.tech |
| api.sh | Pipeline de ataque de 8 fases para todos los protocolos | GitHub: Sharon-Needles/api |
| FireTail | Pruebas específicas de GraphQL (12 tipos) | firetail.ai |
| jwt_tool | Pruebas completas de JWT | GitHub: ticarpi/jwt_tool |
| Burp Autorize | Comparación de autorización de doble sesión | Burp BApp Store |
Referencias
references/rest-graphql-testing.md— Pruebas profundas de REST + GraphQLreferences/jwt-oauth-testing.md— Pruebas de seguridad JWT + OAuth
Autocomprobación de Finalización de Tarea (DEBE pasar antes de afirmar que está completa)
- ¿He ejecutado cada paso del flujo de trabajo (no solo leído)?
- ¿He utilizado rutas de herramientas reales basadas en
tool-index? - ¿He producido evidencia reproducible (comandos/scripts/capturas de pantalla/informes)?
- ¿He completado y registrado los elementos de la lista de verificación requeridos por las REGLAS?