mediumCWE-640A07:2021

Reset de Contraseña Sin Expiración

Los 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.

Cómo Funciona

Si un token de reset de contraseña no tiene expiración, permanece válido para siempre en tu base de datos. Emails viejos en una bandeja de entrada comprometida, emails de reset reenviados o tokens exfiltrados de logs se vuelven vectores permanentes de takeover de cuentas. El token debe ser de un solo uso y expirar en 1-2 horas.

Código Vulnerable
// MAL: token de reset guardado sin expiración
async function createResetToken(userId: string) {
  const token = crypto.randomBytes(32).toString('hex');
  await db.passwordResets.create({ userId, token }); // ¡sin expiresAt!
  return token;
}
Código Seguro
// BIEN: el token expira en 1 hora y se borra después de usarse
async function createResetToken(userId: string) {
  const token = crypto.randomBytes(32).toString('hex');
  const expiresAt = new Date(Date.now() + 60 * 60 * 1000); // 1 hora
  await db.passwordResets.create({ userId, token, expiresAt });
  return token;
}
// En el handler de reset: verifica expiresAt > ahora Y borra el token después de usarlo

Ejemplo Real

Los tokens de reset de contraseña sin expiración fueron marcados en numerosos reportes de bug bounty de HackerOne como vulnerabilidades de takeover de cuenta. Si la bandeja de entrada de un usuario es comprometida meses después de solicitar un reset, el link antiguo sigue funcionando.

Cómo Prevenirlo

  • Establece una expiración de 1 hora en todos los tokens de reset de contraseña
  • Borra el token inmediatamente después de ser usado (de un solo uso)
  • Invalida todos los tokens de reset existentes cuando se solicita uno nuevo
  • También invalida todas las sesiones activas cuando se resetea exitosamente una contraseña

Tecnologías Afectadas

Node.js

Data Hogo detecta esta vulnerabilidad automáticamente.

Escanea Tu Repo Gratis

Vulnerabilidades Relacionadas