mediumCWE-307A07:2021

Sin Rate Limit en Login

Un endpoint de login sin rate limiting puede ser forzado por fuerza bruta miles de veces por segundo hasta encontrar una contraseña válida.

Cómo Funciona

Sin rate limiting, un atacante puede scriptear intentos de login ilimitados. Un PIN de 4 dígitos solo tiene 10,000 combinaciones — rompible en segundos. Incluso contraseñas largas de listas de credenciales filtradas pueden probarse en masa en un ataque de credential stuffing. El rate limiting hace esto económicamente inviable.

Código Vulnerable
// MAL: sin rate limiting en login — intentos ilimitados permitidos
export async function POST(req: Request) {
  const { email, password } = await req.json();
  const user = await validateCredentials(email, password);
  if (!user) return Response.json({ error: 'Credenciales inválidas' }, { status: 401 });
  return Response.json({ token: createToken(user) });
}
Código Seguro
// BIEN: rate limit por IP y por cuenta
import { rateLimit } from '@/lib/rate-limit';

export async function POST(req: Request) {
  await rateLimit(req, { max: 5, window: '15m', key: 'login' }); // 5 intentos por 15 min
  const { email, password } = await req.json();
  const user = await validateCredentials(email, password);
  if (!user) return Response.json({ error: 'Credenciales inválidas' }, { status: 401 });
  return Response.json({ token: createToken(user) });
}

Ejemplo Real

La brecha de Uber de 2022 comenzó con credential stuffing contra la cuenta de un contractor. Un atacante hizo intentos de login repetidos usando credenciales de una brecha de datos anterior hasta encontrar una coincidencia, luego pivotó a MFA fatigue.

Cómo Prevenirlo

  • Rate limit el login a 5-10 intentos por 15 minutos por dirección IP
  • También rate limit por dirección de email para prevenir ataques distribuidos desde múltiples IPs
  • Implementa backoff exponencial después de fallos repetidos (1s, 2s, 4s, 8s...)
  • Bloquea cuentas temporalmente después de 10 fallos consecutivos y notifica al usuario

Tecnologías Afectadas

Node.js

Data Hogo detecta esta vulnerabilidad automáticamente.

Escanea Tu Repo Gratis

Vulnerabilidades Relacionadas