mediumCWE-770A04:2021

Ataque de Batching en GraphQL

Endpoints 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.

Cómo Funciona

GraphQL soporta batching — enviar un array de operaciones en un solo request HTTP. El batching está pensado para rendimiento, pero sin límites de tamaño, los atacantes agrupan miles de intentos de login o requests de recursos en una llamada HTTP. Tu rate limiter ve un request y lo deja pasar, pero el servidor ejecuta miles de operaciones.

Código Vulnerable
// MAL: batching sin límite de tamaño
// El atacante envía: [{query: 'mutation login(email:"a"...)'}, {query: ...}, ...x1000]
app.post('/graphql', graphqlHTTP({ schema }));
// El rate limiter ve 1 request, pero el servidor ejecuta 1000 mutations
Código Seguro
// BIEN: limita el tamaño del batch
app.post('/graphql', (req, res, next) => {
  const body = req.body;
  if (Array.isArray(body) && body.length > 10) {
    return res.status(400).json({ error: 'Límite de tamaño de batch excedido' });
  }
  return graphqlHTTP({ schema })(req, res, next);
});

Ejemplo Real

El batching de GraphQL fue usado para bypassear el rate limiting de SMS OTP en varias plataformas importantes — los atacantes podían probar cientos de códigos OTP en un solo request en lote. HackerOne ha documentado múltiples payouts de bounty por este problema.

Cómo Prevenirlo

  • Limita el tamaño del batch a un número pequeño (5-10 operaciones por request)
  • Considera deshabilitar el batching completamente si tus clientes no lo usan
  • Aplica rate limiting por operación dentro de un batch, no por request HTTP
  • Usa un servidor GraphQL que soporte rate limiting a nivel de operación (Apollo Router, GraphQL Armor)

Tecnologías Afectadas

nodejsNext.js

Data Hogo detecta esta vulnerabilidad automáticamente.

Escanea Tu Repo Gratis

Vulnerabilidades Relacionadas