Nuevos labs cada semana — Accede a todos desde 7,99€/mes
Ver labs →Labs de GraphQL
GraphQL API Attacks
¿Qué es GraphQL?
Los ataques a GraphQL explotan las características propias del lenguaje de consulta: introspección que expone todo el schema, batching con alias para fuerza bruta, queries anidadas que causan DoS, y falta de autorización por campo que deriva en IDOR/BOLA.
¿Por qué practicar GraphQL?
GraphQL crece sin parar en startups y APIs modernas, pero su modelo flexible introduce fallos que los devs de REST no esperan. La introspección abierta revela mutations sensibles ocultas, y el batching permite saltarse rate limits enteros. Bounties típicos: $1,000-$15,000 por una mutation admin expuesta.
¿Qué aprenderás con los labs de GraphQL?
Aprenderás a volcar el schema completo con una query de introspección, descubrir mutations ocultas, hacer brute force de credenciales/OTP con alias batching en una sola petición, provocar DoS con anidamiento profundo y encontrar BOLA accediendo a nodos por su id sin checks de autorización.
Tipos de GraphQL que cubrimos
- Introspection abuse
Si __schema está activo en prod, vuelcas todos los tipos, queries y mutations — incluida la superficie oculta no documentada.
- Alias batching
Repites la misma operación con múltiples alias en una query (login1, login2...) para hacer brute force saltándote el rate limit.
- Deeply nested query (DoS)
Relaciones circulares anidadas (posts→author→posts→...) que explotan el coste de resolución y tumban el servicio.
- BOLA por campo
node(id:...) o queries que reciben un id sin verificar propiedad: accedes a objetos de otros usuarios igual que un IDOR.
¿Cómo encontrar y explotar GraphQL?
Playbook práctico — del recon a la prueba de concepto.
- 1
Localizar el endpoint y probar introspección
El endpoint suele ser /graphql o /api/graphql. Lanza la query de introspección para volcar tipos, queries y mutations completos.
POST /graphql {"query":"{__schema{types{name fields{name}}}}"} - 2
Mapear mutations sensibles
Del schema, busca mutations de cambio de estado: updateUser, deleteAccount, createInvite, setRole. A menudo hay funciones admin no expuestas en la UI.
mutation{updateUser(id:2,role:"admin"){id role}} - 3
Brute force con alias batching
Mete decenas de intentos de login/OTP en una sola petición usando alias; el rate limit por request no te frena.
{a:login(u:"x",p:"1111"){t} b:login(u:"x",p:"1112"){t} c:login(...)...} - 4
Buscar BOLA por id
Pasa ids ajenos a queries que reciben node/objeto. Sin autorización por campo, lees datos de otros usuarios.
{user(id:1002){email phone address}} - 5
Provocar DoS por anidamiento
Si no hay límite de profundidad/coste, encadena relaciones circulares para agotar recursos del servidor.
{posts{author{posts{author{posts{title}}}}}}
Aprende la teoría
Academy: GraphQL APIs
Cargando labs...
Ver en catálogo completo →Preguntas frecuentes
¿Qué es un ataque a GraphQL?
Es la explotación de las características propias de GraphQL: introspección que expone todo el schema, batching con alias para brute force, anidamiento profundo que causa DoS y falta de autorización por campo que deriva en acceso a datos ajenos (BOLA).
¿Cómo se explota una API GraphQL?
Se vuelca el schema con la query de introspección para descubrir mutations sensibles, se hace fuerza bruta metiendo muchos intentos con alias en una sola petición, se accede a objetos ajenos pasando su id y se tumba el servicio con queries circulares profundas.
¿Cómo encontrar fallos GraphQL en bug bounty?
Detecta el endpoint (/graphql), lanza la introspección y, si responde, mapea toda la superficie. Luego prueba mutations administrativas con cuentas normales, BOLA por id y batching de alias para saltarte el rate limit de login u OTP.
¿Cómo prevenir ataques a GraphQL?
Desactiva la introspección en producción, aplica autorización a nivel de campo y de objeto, limita la profundidad y el coste de las queries, restringe el número de alias/operaciones por petición y aplica rate limiting que cuente operaciones, no solo requests.
¿Diferencia entre atacar GraphQL y una API REST?
En REST cada endpoint es una URL fija; en GraphQL hay un único endpoint y el cliente compone la query, lo que amplía la superficie: introspección, batching y anidamiento son vectores que no existen en REST. Aun así, comparten clases como BOLA/IDOR y mass assignment.
Otras categorías relacionadas
Empieza con labs de GraphQL
Practica GraphQL API Attacks con labs basados en reportes reales. En español. Desde 7,99€/mes.
Empieza con el primer lab de GraphQL