Queries N+1 Explotables
La expansion de relaciones sin limites en queries de ORM permite a los atacantes disparar miles de queries a la base de datos con un solo request de API, causando denegacion de servicio.
Cómo Funciona
Los queries N+1 ocurren cuando una aplicacion carga una lista de registros y luego hace un query separado para los datos relacionados de cada registro. Aunque esto es principalmente un problema de rendimiento, se convierte en una vulnerabilidad de seguridad cuando los atacantes pueden controlar el alcance de la expansion de relaciones. Al solicitar relaciones profundamente anidadas o datasets grandes a traves de parametros de API, un atacante puede forzar al servidor a ejecutar miles de queries simultaneamente. Esto satura el pool de conexiones a la base de datos y puede crashear la aplicacion. Las APIs GraphQL son especialmente susceptibles porque los clientes controlan la profundidad del query.
// API endpoint with unbounded includes
app.get('/api/users', async (req, res) => {
const users = await prisma.user.findMany({
include: { posts: { include: { comments: {
include: { author: { include: { posts: true } } }
} } } }
});
res.json(users);
});// Bounded query with pagination and limited depth
app.get('/api/users', async (req, res) => {
const users = await prisma.user.findMany({
take: 20,
select: { id: true, name: true, email: true,
posts: { take: 5, select: { id: true, title: true } }
}
});
res.json(users);
});Ejemplo Real
En 2023, multiples APIs GraphQL fueron atacadas con ataques de profundidad de query. Los atacantes construyeron queries profundamente anidados que se expandian en millones de operaciones de base de datos, tumbando servicios de produccion. GitHub habia abordado esto previamente implementando limites de complejidad de query en su API GraphQL.
Cómo Prevenirlo
- Limita la profundidad y complejidad de queries con herramientas como graphql-depth-limit
- Siempre pagina resultados con take/limit y paginacion basada en cursor
- Usa select en vez de include para obtener solo los campos necesarios
- Monitorea y configura alertas para volumenes inusuales de queries por request
Tecnologías Afectadas
Data Hogo detecta esta vulnerabilidad automáticamente.
Escanea Tu Repo GratisVulnerabilidades Relacionadas
Cadena de Conexion Expuesta
criticalURLs de conexion a base de datos con usuario y password hardcodeadas en el codigo fuente, dejando las credenciales accesibles a cualquiera con acceso al repositorio.
Backup de Base de Datos Expuesto
highArchivos de dump de base de datos (.sql, .dump, .bak) commiteados al repositorio exponen el esquema completo y datos, incluyendo credenciales de usuarios y registros sensibles.
Queries Crudos en ORMs
highUsar metodos de SQL crudo como $queryRaw de Prisma o query() de Sequelize con interpolacion de strings bypasea la proteccion contra SQL injection del ORM.
Deserializacion Insegura
highDeserializar datos no confiables con librerias como node-serialize o yaml.load de Python permite a los atacantes ejecutar codigo arbitrario en el servidor.