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.
// 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) });
}// 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
Data Hogo detecta esta vulnerabilidad automáticamente.
Escanea Tu Repo GratisVulnerabilidades Relacionadas
Sin Política de Contraseñas
mediumAceptar cualquier contraseña — incluyendo '123' o 'a' — hace las cuentas de usuarios trivialmente vulnerables a credential stuffing y ataques de fuerza bruta.
Sin MFA/2FA
lowSin autenticación multifactor, una contraseña robada o adivinada es todo lo que se necesita para comprometer completamente una cuenta.
Sin Verificación de Email
mediumPermitir cuentas con email no verificado deja que atacantes se registren con la dirección de email de otra persona, potencialmente bloqueándolos o suplantándolos.
Reset de Contraseña Sin Expiración
mediumLos links de reset de contraseña que nunca expiran permanecen válidos indefinidamente — un email antiguo en una brecha le da a los atacantes una ruta permanente para tomar control de la cuenta.