lowCWE-400A05:2021

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.

Código Vulnerable
// 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
Código Seguro
// 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

Node.js

Data Hogo detecta esta vulnerabilidad automáticamente.

Escanea Tu Repo Gratis

Vulnerabilidades Relacionadas