Checklist Bug Bounty
Metodología de recopilación de información, enumeración, análisis y descubrimiento de vulnerabilidades en BBP, VDP o Pentesting Web. Basado en experiencia + metodología WSTG.
Importante:
Recordar que siempre antes de recopilar información, ejecutar comandos arrancar herramientas o analizar los flujos de un objetivo, es recomendable revisarlo manualmente como un usuario normal (sin mentalidad de hunting). Esto con el fin de conocer la funcionalidad principal del entorno web y comenzar a plantear posibles ideas desde antes de comenzar la auditoría. Por otra parte, considerar que este checklist no es infalible, ni tampoco un proceso paso a paso estrictamente invariable para un proceso de auditoría web, si no que es una recopilación de ciertos procedimientos mínimos que se deben tener en consideración al momento de abordar un tópico específico mientras se realiza la revisión de un sitio.
1.2 Recon / OSINT
1.3 Fingerprinting a sitio web
1.4 Metafiles y archivos sensibles
1.5 Mapeo de contenidos y rutas
1.6 Identificar inputs y roles del sitio
1.7 Information Disclosure y Data Leaks
2. Configuration & Deployment Management Testing
2.1 Configuración del servidor
2.2 Configuración de aplicación/plataforma
2.3 Enumerar interfaces de administración
2.4 HTTP Verb Tampering
2.5 Políticas de seguridad y encabezados
2.6 Permisos de archivos y directorios
2.7 Subdomain Takeover
2.8 Cloud Storage
2.9 Web Cache Poisoning
2.10 CRLF
2.11 HTTP Host Header Injection
2.12 HTTP Request Smuggling
3. Authentication Testing
3.1 Credenciales y canales cifrados
3.2 Credenciales por defecto
3.3 Mecanismo de lockout / fuerza bruta
3.4 Bypass de autenticación
3.5 Política remember-me y almacenamiento de credenciales
3.6 Debilidades caché del navegador
3.7 Política de contraseñas
3.8 Preguntas de seguridad (Security Question)
3.9 Cambio / restablecimiento de contraseña
3.10 Pruebas de MFA/2FA/OPT
3.11 Autocompletado en formularios/entradas de contraseñas
3.12 Probar notificaciones fuera de canal
3.13 Probar historial de autenticación accesible por el usuario
4. Identity & Authorization Testing
4.1 Roles y gestión de usuarios
4.2 Bypass y escalada de privilegios
4.3 IDOR
4.4 HTTP Parameter Pollution
4.5 Directory Path Traversal & File Inclusion
4.6 OAuth Weaknesses
5. Session Management Testing
5.1 Gestión de sesión
5.2 Cookies attributes
5.3 Session fixation
5.4 Exposición de variables de sesión
5.5 CSRF
5.6 Logout functionality
5.7 Session timeout
5.8 Session Puzzling
5.9 Session Hijacking
5.10 JWT Attack
6. Data validation testing (Injections)
6.1 XSS Reflected
6.2 XSS Stored
6.3 XSS DOM-Based
6.4 SQL Injection
6.5 LDAP Injection
6.6 XML Injection y XXE
6.7 SSI Injection
6.8 XPath / XQuery Injection
6.9 IMAP/SMTP Injection
6.10 Code Injection / Template Injection
6.11 Command Injection
6.12 Format String Injection
6.13 SSRF
6.14 Mass Assignment
6.15 Cross-Site WebSocket Hijacking
6.16 Overflows
6.17 Comparar validación client-side vs server-side
7. Client-Side Testing
7.1 DOM-Based XSS
Probar técnicas de PS
Identificar sinks peligrosos en el sitio (
document.write
,innerHTML
,eval
,setTimeout("string", ...)
,Function()
) y buscar valores que provengan dedocument.URL
,window.name
,localStorage
, etcProbar payloads que no involucran la respuesta del servidor (XSS puramente en el front-end)
Inyectar o sobrescribir variables globales que la app use en el DOM (por ejemplo,
window.config
), si no hay validaciónRevisar frameworks antiguos (AngularJS < 1.6, Knockout, Vue < 2) con funciones
{{ ... }}
que permitan inyecciónIntentar “payloads polígotos” que funcionen como HTML y como JavaScript simultáneamente
Evaluar si existe Shadow DOM o Web Components que reinyecten contenido inseguros
7.2 JavaScript Execution / HTML Injection
Revisar si se pueden inyectar scripts/HTML en la interfaz de usuario más allá de los formularios clásicos (por ejemplo, personalización de temas, perfil de usuario, mensajes de chat)
Probar CSS Injection (usando
<style>
,@import
,expression:
en IE antiguos) o manipulación de estilos (forzar clickjacking, UI redressing)Chequear si la aplicación usa sanitizadores de HTML (DOMPurify, etc.) y buscar bypass en configuraciones mal definidas
Explorar inyecciones en atributos de HTML5 (
data-*
), iconos en<link rel="icon" ...>
o<base href>
que puedan cambiar rutas internas
7.3 Open Redirect
Probar técnicas de PS
Buscar parámetros que controlen la URL de destino (
?next=
o?redirect=
) y verificar si hay validación de dominioIntentar redirigir a dominios externos maliciosos, incluyendo subdominios que parezcan confiables (
http://app-evil.example.com
)Probar encoding de la URL (
%0d%0a
,\x00
) para inyectar cabeceras adicionales o romper la verificación del dominioRevisar si la app concatena sin sanitizar varios segmentos de ruta (por ejemplo,
redirect=/admin
+ un segundoredirect
que genera/admin/http://evil.com
)
7.4 Cross Origin Resource Sharing (CORS)
Probar técnicas de PS
Revisar la cabecera
Access-Control-Allow-Origin
para ver si permite*
o orígenes arbitrariosComprobar si se permite
Access-Control-Allow-Credentials: true
junto con*
, exponiendo datos sensibles al dominio que seaIntentar usar orígenes similares (
https://sub.evil.com
vs.https://victim.com
) con homógrafos en caracteres Unicode (IDN) para bypassProbar cabeceras
Origin: null
(algunas apps aceptan orígenes nulos) ofile://
en navegadores que permitan requests locales
7.5 WebSockets
Probar técnicas de PS
Comprobar si se validan orígenes y tokens al iniciar la conexión
Probar “Cross-Site WebSocket Hijacking” enviando un
Origin
falso y viendo si el socket se establece, pudiendo leer datosIntentar manipulación del handshake enviando cabeceras poco comunes (
Sec-WebSocket-Protocol
) o fragmentadasRevisar si el servidor reusa cookies sin
HttpOnly
que puedan ser capturadas desde un script malicioso
7.6 Web Messaging
Probar manipulación de mensajes
postMessage
, revisando si la app verifica elevent.origin
antes de procesar datosEnviar objetos complejos (JSON con anidaciones) para ver si hay inyección en la respuesta o si se guardan en
localStorage
sin sanitizarVerificar si la app hace un
postMessage
a*
(cualquier origen) exponiendo datos internosRevisar si existen listeners de
message
que ejecuten funciones con eval o concatenación de strings sin validación
7.7 Service Workers / Offline App
Revisar la política de caché e interceptación de requests (archivo
service-worker.js
) para ver si se cachean recursos críticos sin cifrarVerificar que no se almacenen datos sensibles (tokens, credenciales) en la cache del service worker.
Probar manipular la ruta de registro del service worker (
navigator.serviceWorker.register('/sw.js')
) si la app no la fija correctamente, inyectando un SW maliciosoEvaluar si se implementa
https:
para el service worker, pues SW en HTTP no está permitido pero si hay configuraciones “dev” que lo dejan en local host sin TLS
7.8 Browser Storage
Revisar
localStorage
,sessionStorage
,IndexedDB
para datos sensibles sin cifrar o sin expiración (podrían mantenerse tras logout)Confirmar que al hacer logout se limpien datos locales (tokens, historial) o, al menos, se invaliden en el servidor
Probar manipular
sessionStorage
en otra pestaña o dominio si la app no comprueba el origenRevisar si las claves en
IndexedDB
se usan para offline access y si exponen info confidencial (contraseñas, token JWT, etc.)
7.9 Reverse Tabnabbing
Verificar si los enlaces con
target="_blank"
usanrel="noopener noreferrer"
para evitar que la pestaña hija controlewindow.opener
Intentar inyectar un enlace sin
noopener
y abrirlo para ver si la nueva pestaña puede redirigir la pestaña original (window.opener.location
)Si la app genera links dinámicamente (por ejemplo, un blog con enlaces externos), comprobar si añade por defecto
noopener
o “safe” en HTML5Revisar si se pueden robar datos de la pestaña previa o suplantar la interfaz de la página original tras redirigir
opener.location
8. Business Logic Testing
8.1 Validar datos de lógica de negocio
Probar ingresar valores extremos (negativos, muy grandes) en campos como precio, cantidad o descuentos para forzar desbordamientos o desajustes de lógica
Revisar manipulación de valores de impuestos, envíos gratis o recálculos de montos finales sin validación en el servidor
Intentar romper validaciones condicionales (ej. un campo “descuento” que debería requerir un código especial) haciendo peticiones directas al endpoint
8.2 Falsificación de solicitudes
Comprobar si la app permite omitir pasos obligatorios del flujo como saltar checkout y llegar directo a confirmación de compra
Revisar posibilidad de repetición de acciones críticas (doble confirmación de pagos, uso del mismo cupón varias veces) para obtener beneficios indebidos
Probar reenvíos (replays) de la misma petición con tokens antiguos o sin token, y ver si la app valida el estado
Intentar enviar un token de sesión de un usuario distinto en un paso avanzado para ver si se mezclan los flujos (session puzzling)
8.3 Integridad de procesos
Ver si es posible alterar datos a mitad de un flujo (cambiar precio en un carrito antes de pagar, modificar dirección de envío tras haber confirmado un paso)
Alterar un campo de stock o inventario en plena transacción para ver si se finaliza con stock negativo
Iniciar dos sesiones simultáneas y alternar pasos entre ambas para ver si la lógica del servidor se rompe
8.4 Límites de uso de funciones
Probar repetidamente una misma acción (p. ej., canjear un cupón, puntos de fidelidad) para ver si se aplica varias veces en un mismo pedido
Intentar sobrepasar un límite teórico (por ejemplo, añadir 999999 artículos al carrito) para detectar limitaciones de inventario o sumas excesivas
Revisar si hay control de transacciones atómicas (un cupón que solo debería ser válido una vez por usuario)
8.5 Circunvención de workflows
Intentar saltar pasos obligatorios (como verificación de correo, aceptación de términos) enviando directamente la petición al endpoint final
Revisar si la app guarda un “estado del wizard” en la sesión o en campos ocultos y si se pueden modificar para avanzar sin cumplir las condiciones
Falsificar la ruta del proceso (por ejemplo, enviar paso 3 antes de completar paso 2) y ver si el servidor lo acepta
8.6 Defensas contra uso indebido
Revisar si hay validaciones server-side que impidan abusos (compra de productos a 0 €)
Intentar peticiones muy rápidas o automatizadas (sin captcha ni limitación) para ver si se genera spam o se saturan inventarios
Comprobar si la aplicación registra los eventos en logs y si existe algún mecanismo de detección de fraudes (varios pagos sospechosos, IPs repetidas, etc.)
8.7 File Upload (funcionalidad riesgosa)
Probar técnicas de PS
Verificar tipos de archivo permitidos (extensiones, MIME) y usar caracteres Unicode o secuencias RLO (Right-to-Left Override) para ocultar la extensión real (
.php
disfrazado de.jpg
)Asegurar que el servidor no devuelva o ejecute archivos con extensiones sensibles (
.php.old
,.aspx.bak
, etc.)Revisar si realmente se valida el contenido vs la extensión (subir un PNG con cabecera de un ZIP, etc.)
Comprobar dónde se almacena el archivo subido y si el directorio es accesible públicamente
Probar subir ficheros con payloads XSS, RCE, SSRF (p. ej. PDF o imágenes con metadatos maliciosos)
Revisar límites de tamaño, frecuencia y número de archivos para evitar DoS por saturación de disco
Subir nombres que contengan
%00
para truncar la extensión en sistemas basados en C
8.8 Pago con tarjetas (Card Payment)
Revisar vulnerabilidades comunes en entornos de pago (PCI-DSS compliance, cifrado en reposo de PAN y CVV)
Probar contraseñas por defecto en terminales POS o software de pago
Verificar si datos de tarjeta se guardan cifrados y se transmiten solo por HTTPS (nunca en texto plano)
Probar inyecciones y fallos de configuración en el formulario de pago (incluso SSRF si se consultan APIs de tarjetas)
Revisar almacenamiento criptográfico inseguro: logs, backups con PAN no enmascarado
Forzar errores en pagos y reembolsos para ver si exponen datos internos o devuelven estados inconsistentes (saldo duplicado, reembolso doble)
Intentar “card testing” (varios números y CVVs) sin que la app bloquee tras varios intentos
8.9 Denial of Service (DoS) (*, **)
Probar si existen límites o throttling en peticiones para evitar saturar recursos (CPU, memoria, disco)
Revisar mecanismos anti-automatización (CAPTCHA, rate limiting) para frenar bots masivos
Intentar wildcards en queries (SQL wildcard DoS,
.*
en búsquedas de Regex) que consuman mucho CPUMandar payloads enormes o chunked mal formados para saturar la app (Slowloris, R.U.D.Y)
Forzar condiciones de carrera con múltiples hilos que ejecuten operaciones costosas simultáneamente
Revisar si un usuario sin límite puede generar facturas, informes masivos o procesos batch largos
8.10 HTML5
Explorar uso de APIs Web Storage (localStorage, sessionStorage) para ver si guardan tokens sensibles sin cifrar y sin expiración
Revisar Service Workers y caché offline, asegurando que no se almacene contenido confidencial accesible sin autenticación
Analizar si la app usa WebSockets o Web Messaging (
postMessage
) para lógica sensible sin verificarevent.origin
Comprobar políticas de CORS y CSP apropiadas para recursos en modo offline o con almacenamiento local.
Usar la API de Drag & Drop o File API para inyectar datos en la app sin pasar por validaciones normale
9. Error Handling
9.1 Improper Error Handling
Analizar posibles mensajes de error con información sensible (stack trace, rutas, consultas SQL, variables de entorno)
Inducir errores con parámetros inesperados o tipos de archivo no permitidos para observar si el servidor responde con detalles internos
Enviar datos en formatos incorrectos (XML en lugar de JSON, o viceversa)
Revisar si el servidor devuelve un código de estado HTTP incoherente (
200
con un mensaje de error o un500
que muestre la ruta del archivo)Causar errores de encoding (UTF-8 vs. ASCII) por si la excepción expone codificación interna
Revisar si hay endpoints dev o test que devuelvan “debug info” al recibir parámetros específicos (
debug=true
en la URL, cabeceras particulares, etc)
9.2 Stack Traces y debug
Analizar si la app deja expuestos logs o traces por excepciones no controladas mostrando debug
Provocar excepciones que involucren módulos ORM, almacenamiento en caché, external API calls
Verificar mensajes de error que incluyan querys SQL, rutas del sistema de archivos, variables de entorno (
ENV
,PATH
,SECRET_KEY
)Si la aplicación envía correos de error a administradores comprobar si es posible inyectar payloads en el log/stack trace para un XSS o acceso no autorizado
Forzar cargas excesivas de tráfico para ver si el servidor, ante saturación, arroja stack traces distintas o logs con más detalle (al no manejar adecuadamente la excepción)
10. Cryptography
10.1 Transport Layer Security
Revisar versiones de SSL/TLS soportadas (evitar SSLv2, SSLv3, TLS 1.0) y confirmar si la app no permite fallback inseguro
Probar ataques conocidos (POODLE, BEAST, CRIME, FREAK, LOGJAM, RC4 biases, etc.) usando herramientas especializadas (sslscan, testssl.sh)
Revisar la robustez de los cifrados y la longitud de clave (>= 2048 bits); confirmar uso de Perfect Forward Secrecy (PFS) con suites ECDHE/DHE
Verificar validez del certificado (no expirado, CN correcto, firma confiable); chequear Certificate Transparency si aplica
Comprobar si hay HSTS preload (si la app lo declara y está en la lista de navegadores)
Analizar si hay compresión activa (CRIME/BREACH) que permita filtraciones de datos
Validar si se implementa OCSP Stapling o CRL para revocar certificados comprometidos
10.2 Cifrado débil / Algoritmos inseguros
Verificar si se usan algoritmos inseguros (MD5, SHA1) en almacenamiento, firma o generación de tokens
Comprobar uso de sal y “pepper” en hashes de contraseñas (evitar hashes planos o “salt” estático)
Revisar la implementación de HMAC y si se separan bien las claves y datos (key primero, datos después)
Confirmar si las funciones de hashing son adecuadas: preferir Argon2, bcrypt o scrypt frente a SHA256/SHA512 sin coste configurable
Revisar si se aplican KDF (Key Derivation Functions) apropiadas para llaves maestras, tokens JWT o contraseñas de base de datos
Chequear si hay uso de RC4 o cifrados obsoletos (DES, 3DES), sobre todo en VPNs o túneles SSL internos
10.3 Padding Oracle
Probar vectores de padding oracle cuando se usen cifrados en modo CBC (AES-CBC, DES-CBC).
Intentar manipular un bloque cifrado y observar si el servidor responde de forma distinta (mensaje de error vs. descifrado parcial)
Usar herramientas o scripts (p. ej. PadBuster) para automatizar la exfiltración de texto plano si la app expone un canal
Ver si los datos cifrados en cookies o tokens tienen padding que el servidor valide sin medidas (posibilidad de descifrar contenido sin la clave)
10.4 Información sensible en canales sin cifrar
Revisar si se envía información crítica (tarjetas, credenciales) vía HTTP, correos en texto plano o protocolos inseguros (FTP, Telnet)
Verificar si el proceso de “password reset” o “códigos de activación” se hace por correo sin cifrar
Validar si se utiliza SMTP con TLS (STARTTLS) o si la app filtra contraseñas en logs en texto plano
Revisar si el front-end hace peticiones a recursos estáticos (scripts, CSS) vía HTTP que puedan ser manipulados para injectar contenido malicioso
Comprobar si la aplicación implementa HTTPS Strict-Transport-Security (HSTS) para evitar el downgrade a HTTP
11. Others Common Issues
11.1 No Rate Limiting
Intentar múltiples solicitudes rápidas (fuerza bruta, enumeración masiva) usando distintas velocidades (ráfagas vs. flujo constante) para ver si hay detección
Probar bypasses mediante cabeceras extra (
X-Forwarded-For
), cambio de IP, rotación de user-agent o proxies distribuidosRealizar ataques “low & slow” (pocos intentos pero constantes) para detectar si la app reacciona solo ante picos repentinos
Probar si el sistema de limitación se basa en cookies (más fácil de saltar cambiando sesión) o en el “fingerprint” del dispositivo
Revisar si existe un mecanismo de ban temporal o captcha tras X peticiones, y si este se puede omitir por fallos de implementación
11.2 EXIF Geodata
Comprobar si en la subida de imágenes se mantienen metadatos EXIF (pueden filtrar geolocalización, fecha/hora, modelo de cámara)
Verificar si se “limpian” esos metadatos al procesar la imagen (usando herramientas como
exiftool
para contrastar antes/después)Subir imágenes con datos EXIF inusuales (coordenadas falsas, comentarios ocultos) para ver si se muestran públicamente o se almacenan en la base de datos
Probar imágenes que incluyan XMP data o IPTC metadata para ver si también se eliminan (algunas apps limpian EXIF pero olvidan otros contenedores)
Revisar si se exponen los metadatos en vistas previas (thumbnails) o al procesar la imagen en otras secciones (por ejemplo, generar PDF con info)
11.3 Broken Link Hijack
Buscar links rotos que se puedan “reclamar” (por ejemplo, dominio expirado, perfiles sociales) desde la web oficial
Revisar documentaciones, manuales, footers o secciones de “contacto” con enlaces obsoletos a páginas de la empresa
Intentar registrar un dominio caducado y comprobar si el tráfico o la reputación del mismo da acceso a usuarios o información residual
Verificar si existen repos de GitHub, GitLab o bitbucket que ya no se usen y puedan ser “reclutados” para hosting malicioso con la marca de la empresa
Probar si la app hace “redirect 301” o “link directo” a un sitio que ya no existe, generando la oportunidad de “hijack” para phishing
11.4 SPF / DKIM / DMARC
Revisar configuración DNS para evitar spoofing de correo: verificar si el dominio tiene registros SPF (
v=spf1 ...
), DKIM (selector con clave pública) y una política DMARC (p=none
,p=quarantine
op=reject
)Comprobar si la política DMARC está relajada (por ejemplo,
sp=none
,adkim=s
) que facilita suplantaciones parcialesEnviar correos de prueba desde un servidor externo usando una dirección del dominio víctima y ver si llegan a destino (indicador de fallo en SPF/DMARC)
Validar la alineación de cabeceras en DMARC (el
From:
coincida con el dominio al firmar DKIM y al estar en el registro SPF)Revisar subdominios que no tengan entradas DNS para SPF/DKIM, permitiendo spoofing parcial (por ejemplo,
subdomain.domain.com
no protegido)
12. API Testing
12.1 Autenticación y autorización
Verificar si todos los endpoints requieren autenticación adecuadamente (incluidas rutas “opcionales” o endpoints de test)
Testear mecanismos OAuth, JWT, API Keys, incluyendo escenarios de token “refresh” y expiraciones
Probar fuerza bruta en API keys o tokens, usando diccionarios comunes (prefijos, sufijos) y exploits para tokens débiles
Revisar control de acceso horizontal y vertical (IDOR en APIs), intentando modificar parámetros como
userId
o roles en payloads JSONComprobar si existen endpoints que aceptan “guest” o “anonymous” con privilegios excesivos
Revisar si la API implementa scope-based tokens en OAuth y si esos scopes se validan realmente en cada endpoint.
12.2 Gestión de sesión
Verificar expiración correcta de tokens, intentando usarlos después de que supuestamente caduquen
Probar reuse de tokens expirados o revocados, comprobando si el servidor mantiene una lista negra de tokens
Revisar flags de seguridad en cookies (si usan cookies de sesión) como
HttpOnly
,Secure
,SameSite
Intentar “session fixation” inyectando un token en la URL o en la cabecera antes de autenticarse
Confirmar si se emiten nuevos tokens tras operaciones sensibles (por ejemplo, cambio de contraseña)
12.3 Rate Limiting / Prevención de abusos
Asegurarse de que haya límites de solicitudes por IP/usuario, explorando cabeceras como
X-Forwarded-For
para evadir IP-based blockingProbar enviar muchas peticiones simultáneas (ataques de fuerza bruta, enumeración) con distintas estrategias (ralentización, picos)
Revisar si existe una “tarjeta de crédito” o “login” endpoint sin limitación, permitiendo card testing o fuerza bruta de credenciales
Intentar cambiar valores de cabeceras (User-Agent, Accept) para detectar si se salta la limitación basada en firma de cliente
12.4 Validación de datos
Replicar pruebas de inyección (SQLi, XSS, JSON tampering) en endpoints JSON/REST, intentando campos anidados o arrays (
items[0].price
)Revisar parámetros extra no esperados (Mass Assignment), añadiendo propiedades ocultas como
role=admin
Probar inyecciones en rutas “exóticas” de la API (ej.
PUT /api/v1/users/12345?filter=...
) donde el parser podría comportarse distintoConfirmar si se aplican validaciones de content-type (
application/json
,multipart/form-data
) o si la API parsea todo sin restricciones
12.5 Manejo de errores / Information disclosure
Comprobar si los mensajes de error exponen stack traces, rutas internas, nombres de tablas, variables de entorno
Verificar códigos de estado correctos (401, 403, 404) y si la API regresa un
200
con un mensaje de error en JSON (podría engañar al cliente)Inducir errores lógicos (parámetros ausentes o con tipo incorrecto, etc.) para observar si se devuelven datos internos
Probar “debug mode” o parámetros como
?debug=1
para ver si la API libera información adiciona
12.6 Transmisión segura
Revisar uso de HTTPS para todas las operaciones sensibles, incluyendo endpoints de callback o webhooks que a veces quedan en HTTP
Confirmar versiones seguras de TLS y que no se permita fallback a SSLv3/TLS1.0
Probar si se implementa HSTS y si la cabecera
Strict-Transport-Security
incluye subdominiosRevisar si se aceptan ciphers débiles (
RC4
,3DES
) o se usa un certificado autofirmado en producción.
12.7 Seguridad de endpoints
Detectar endpoints obsoletos o de pruebas (por ejemplo,
/api/v2-dev
,/beta
) que puedan exponer funciones no terminadasComprobar si existen endpoints de administración (
/admin
,/manage
) no protegidos o con credenciales por defectoRevisar si hay “overexposure” de datos en la respuesta, devolviendo campos internos ( contraseñas hashed, tokens ) al cliente
Verificar políticas CORS en APIs: si
Access-Control-Allow-Origin: *
se combina conAccess-Control-Allow-Credentials: true
, exponiendo cookies a sitios maliciososExplorar si la API soporta métodos HTTP no esperados (PUT, DELETE) en endpoints supuestamente de solo lectura
12.8 Business logic
Probar bypass de reglas lógicas: por ejemplo, pagos a costo 0, modificar el
subtotal
en un JSON de carritoEnvío repetido o manipulado de requests a endpoints críticos, intentando aplicar varias veces la misma acción (cupón, puntos de fidelidad)
Revisar si la API maneja transacciones atómicas o si se pueden crear inconsistencias de inventario
Alterar secuencias de pasos en flujos complejos (registro -> confirmación -> upgrade plan) para saltar validaciones
12.9 GraphQL (OWASP)
Enumerar esquemas (introspection) usando queries a
__schema
,__type
, para mapear todos los tipos y resolvers disponiblesProbar inyecciones en consultas GraphQL, incluyendo string-based, numeric-based y alias injection en la sintaxis de GraphQL
Revisar paginación y límites (prevención de DoS) si la API permite consultas con
first: 999999
o anidamientos profundos ({ user { posts { comments { ... } } } }
)Examinar validaciones de fragments y directives, y si el servidor aplica restricciones de profundidad
Intentar mutaciones maliciosas que no aparezcan en la doc (por ejemplo, usando introspección para descubrir mutations ocultas)