GraphQL Sin Límite de Profundidad de Query
API GraphQL sin límite de profundidad en queries anidadas, permitiendo a los atacantes crear queries profundamente anidadas que agotan los recursos del servidor y causan denegación de servicio.
Cómo Funciona
El querying flexible de GraphQL permite a los clientes solicitar relaciones anidadas. Sin un límite de profundidad, un atacante puede escribir una query 100 niveles de profundidad (usuario -> amigos -> amigos -> amigos...) que cause queries de base de datos exponenciales o agotamiento de memoria. Es un ataque de denegación de servicio específico de la naturaleza de queries recursivas de GraphQL.
// MAL: sin límite de profundidad — esta query tumbaría el servidor
// query { usuario { amigos { amigos { amigos { amigos { nombre } } } } } }// BIEN: usa el plugin graphql-depth-limit
import depthLimit from 'graphql-depth-limit';
const server = new ApolloServer({
typeDefs,
resolvers,
validationRules: [depthLimit(5)], // máximo 5 niveles de profundidad
});Ejemplo Real
La API GraphQL de GitHub enforced límites de profundidad después de descubrir que las queries anidadas complejas podían causar tiempos de respuesta de más de 30 segundos. GitHub también introdujo un sistema de puntuación de complejidad para prevenir queries costosas, no solo profundas.
Cómo Prevenirlo
- Instala graphql-depth-limit y configura un límite razonable (5-7 niveles suele ser suficiente)
- También implementa límites de complejidad de queries usando graphql-query-complexity
- Configura un timeout de query en tu servidor GraphQL para matar queries desbocadas
- Limita la tasa por puntuación de complejidad de query, no solo por conteo de requests
Tecnologías Afectadas
Data Hogo detecta esta vulnerabilidad automáticamente.
Escanea Tu Repo GratisVulnerabilidades Relacionadas
Documentación de API Expuesta en Producción
lowSwagger UI, ReDoc u otras interfaces de documentación de API accesibles públicamente en producción, dándole a los atacantes un mapa interactivo gratuito de cada endpoint, parámetro y método de autenticación.
Introspección GraphQL Habilitada en Producción
mediumLa introspección de GraphQL permanece habilitada en producción, permitiendo que cualquiera consulte el schema completo y descubra todos los tipos, campos, mutations y sus estructuras de argumentos.
Ataque de Batching en GraphQL
mediumEndpoints GraphQL que aceptan arrays de operaciones sin límites de tamaño, permitiendo a los atacantes bypassear el rate limiting agrupando miles de requests en una sola llamada HTTP.
Exposición Excesiva de Datos
mediumEndpoints de API que devuelven objetos completos de la base de datos con campos sensibles en lugar de solo los campos que el cliente realmente necesita, exponiendo hashes de contraseñas, IDs internos, flags de admin y otros datos sensibles.