Sin Timeout de Request
Las requests HTTP sin timeouts del lado del servidor permiten que clientes lentos o ataques slow-body mantengan conexiones del servidor abiertas indefinidamente.
Cómo Funciona
Un 'ataque HTTP lento' (Slowloris, RUDY) envía headers o cuerpo de request extremadamente lento — un byte cada 30 segundos. Sin timeout de request, cada conexión se mantiene abierta indefinidamente. Un servidor con un límite de 10,000 conexiones puede ser víctima de DoS con unos pocos cientos de conexiones lentas si no hay timeout para liberarlas.
// MAL: sin timeout de request en el servidor HTTP
const server = http.createServer(app);
server.listen(3000);
// El timeout por default del servidor HTTP de Node.js es 0 (sin timeout) en algunas versiones
// Los clientes lentos pueden mantener conexiones abiertas para siempre// BIEN: configura timeouts de request y headers a nivel del servidor
const server = http.createServer(app);
server.requestTimeout = 30_000; // 30s para completar la request completa
server.headersTimeout = 10_000; // 10s para terminar de enviar headers
server.listen(3000);Ejemplo Real
Los ataques Slowloris han derribado servidores Apache que no tenían timeout de conexión configurado. El mismo vector de ataque aplica a servidores HTTP de Node.js. Varios paquetes npm existen específicamente para explotar esto contra aplicaciones Node.js desprotegidas.
Cómo Prevenirlo
- Establece server.requestTimeout y server.headersTimeout en tu servidor HTTP de Node.js
- Establece timeouts de conexión a nivel del reverse proxy (keepalive_timeout de Nginx, timeouts de Cloudflare)
- Para deployments serverless, establece timeouts a nivel de función (actúan como timeouts de request)
- Monitorea el conteo de conexiones activas de tu servidor — un incremento gradual sin incremento de tráfico correspondiente indica un ataque lento
Tecnologías Afectadas
Data Hogo detecta esta vulnerabilidad automáticamente.
Escanea Tu Repo GratisVulnerabilidades Relacionadas
Sin Límite de Tamaño de Archivo
mediumLos endpoints de carga de archivos sin límites de tamaño permiten a los atacantes agotar el espacio en disco, la memoria y la CPU con cargas de múltiples gigabytes.
Sin Límite de Tamaño del Cuerpo de Request
mediumLos endpoints de API JSON sin límite de tamaño del body pueden ser víctimas de DoS enviando payloads JSON enormes que agotan la memoria del servidor durante el parseo.
Sin Rate Limiting Global
mediumSin rate limiting global a nivel de edge o middleware, cualquier endpoint puede ser inundado con requests hasta que el servidor se desborde.
WebSocket Sin Autenticación
highLos endpoints WebSocket que aceptan conexiones sin verificar autenticación permiten que usuarios no autenticados reciban flujos de datos en tiempo real destinados a usuarios autenticados.