mediumCWE-400A05:2021

Sin Rate Limit en Envío de Email/SMS

Los endpoints de email y SMS sin rate limiting pueden ser abusados para enviar spam a usuarios o agotar tu presupuesto de envío mediante requests automatizadas.

Cómo Funciona

Los endpoints de reset de contraseña, email de verificación y SMS que no tienen rate limit pueden ser activados miles de veces por minuto. Los atacantes usan esto para enviar spam a víctimas con emails no deseados, incrementar tu factura de Twilio/Sendgrid o enumerar direcciones de email válidas verificando si se envía un email.

Código Vulnerable
// MAL: reset de contraseña sin rate limiting — abusable para spam
export async function POST(req: Request) {
  const { email } = await req.json();
  const user = await db.users.findByEmail(email);
  if (user) await sendPasswordResetEmail(user); // ¡sin rate limit!
  return Response.json({ message: 'Si ese email existe, revisa tu bandeja.' });
}
Código Seguro
// BIEN: rate limit por IP y por dirección de email
export async function POST(req: Request) {
  await rateLimit(req, { max: 3, window: '1h', key: `reset:${req.body.email}` });
  await rateLimit(req, { max: 10, window: '1h', key: `reset:ip:${getIP(req)}` });
  const { email } = await req.json();
  const user = await db.users.findByEmail(email);
  if (user) await sendPasswordResetEmail(user);
  return Response.json({ message: 'Si ese email existe, revisa tu bandeja.' });
}

Ejemplo Real

Múltiples servicios han sido abusados para enviar miles de mensajes SMS usando su propia cuenta de Twilio explotando endpoints de envío de SMS desprotegidos. Se han reportado facturas de $5,000-$50,000 en un solo día en plataformas sin rate limiting.

Cómo Prevenirlo

  • Rate limit el envío de email/SMS a 3-5 por hora por dirección de email
  • También rate limit por dirección IP para prevenir flooding distribuido
  • Configura límites de gasto y alertas en Twilio/Sendgrid para limitar el daño potencial del abuso
  • Usa CAPTCHA en endpoints de email de alto valor como reset de contraseña y formularios de contacto

Tecnologías Afectadas

Node.js

Data Hogo detecta esta vulnerabilidad automáticamente.

Escanea Tu Repo Gratis

Vulnerabilidades Relacionadas