Política de Contraseña Débil
Sin requisitos de longitud mínima, complejidad o verificación contra contraseñas comunes en el registro o cambio de contraseña, haciendo las cuentas fácilmente vulnerables a fuerza bruta.
Cómo Funciona
Si aceptas contraseñas como '123456' o 'password', tus usuarios las usarán. Las contraseñas cortas y comunes caen ante ataques de diccionario en segundos. NIST SP 800-63B recomienda un mínimo de 8 caracteres (15 preferido) y verificar contra listas de contraseñas brecheadas en lugar de requerir reglas de complejidad que los usuarios solo burlan con 'Contrasena1!'.
// MAL: sin validación de contraseña
const schema = z.object({
email: z.string().email(),
password: z.string(), // cualquier string aceptado
});// BIEN: enforce longitud mínima y verifica contra lista de brechas
const schema = z.object({
email: z.string().email(),
password: z.string()
.min(8, 'La contraseña debe tener al menos 8 caracteres')
.max(128)
.refine(async (pw) => !(await isPwnedPassword(pw)), 'Esta contraseña apareció en un breach de datos'),
});Ejemplo Real
El lanzamiento de Disney+ en 2019 vio miles de cuentas comprometidas en horas. La mayoría no fueron hackeadas — los usuarios habían reutilizado contraseñas débiles de brechas anteriores. Una política de longitud mínima y verificación de contraseñas brecheadas habría bloqueado la mayoría de estas cuentas.
Cómo Prevenirlo
- Requiere un mínimo de 8 caracteres (15+ recomendado por NIST)
- Verifica contraseñas contra la API de HaveIBeenPwned (pwned-passwords) para bloquear contraseñas brecheadas conocidas
- Permite contraseñas largas (hasta 128+ caracteres) para fomentar frases de contraseña
- No enforces reglas de complejidad (mayúscula + número + símbolo) — producen patrones predecibles
- Muestra un medidor de fortaleza de contraseña para guiar a los usuarios hacia mejores elecciones
Tecnologías Afectadas
Data Hogo detecta esta vulnerabilidad automáticamente.
Escanea Tu Repo GratisVulnerabilidades Relacionadas
Fijación de Sesión
highEl servidor reutiliza el mismo ID de sesión antes y después del login, permitiendo a un atacante que plantó un ID de sesión conocido secuestrar la sesión autenticada.
Sin Bloqueo de Cuenta / Protección contra Fuerza Bruta
mediumEndpoints de login sin rate limiting ni mecanismo de bloqueo, permitiendo a atacantes probar combinaciones ilimitadas de usuario y contraseña hasta encontrar credenciales válidas.
OAuth Sin Parámetro State
highFlujo de autorización OAuth implementado sin un parámetro `state` aleatorio, permitiendo ataques CSRF que vinculan la cuenta de una víctima con la identidad OAuth del atacante.
Token No Invalidado al Hacer Logout
mediumTokens JWT o de sesión que siguen siendo válidos después de que un usuario hace logout porque no hay mecanismo de revocación server-side, permitiendo que tokens robados se usen indefinidamente.