Sin Paginación en Endpoints de Datos
Endpoints de API que devuelven todos los registros coincidentes sin paginación ni límite, permitiendo a los atacantes volcar tablas completas y causando problemas de memoria/rendimiento bajo carga normal.
Cómo Funciona
Sin LIMIT, `SELECT * FROM users` en una tabla con 10 millones de registros intentará cargar los 10 millones en memoria y devolverlos en una sola respuesta. Incluso con unos pocos miles de registros, esto bloquea el hilo de tu servidor, agota la memoria y filtra todo tu dataset a cualquiera que llame el endpoint.
// MAL: sin LIMIT en la query
export async function GET() {
const users = await db.users.findMany(); // devuelve TODOS los usuarios
return Response.json(users);
}// BIEN: enforce paginación con cursor u offset
export async function GET(req: Request) {
const { searchParams } = new URL(req.url);
const cursor = searchParams.get('cursor');
const limit = Math.min(parseInt(searchParams.get('limit') ?? '20'), 100);
const users = await db.users.findMany({
take: limit,
cursor: cursor ? { id: cursor } : undefined,
orderBy: { id: 'asc' }
});
return Response.json(users);
}Ejemplo Real
El endpoint /api/customers de un producto SaaS no tenía paginación. Un competidor escribió un script para llamarlo repetidamente (devolvía todos los clientes de una vez por una cláusula WHERE faltante), descargó toda la lista de clientes y la usó para poaching competitivo.
Cómo Prevenirlo
- Siempre aplica un LIMIT/take máximo a las queries de base de datos en los endpoints de API
- Implementa paginación basada en cursor o en offset para endpoints de lista
- Deja que los llamadores controlen el tamaño de página pero enforce un máximo (ej. 100 registros)
- Nunca expongas endpoints que puedan devolver conjuntos de resultados sin límite
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.
GraphQL Sin Límite de Profundidad de Query
mediumAPI 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.
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.