Sin Política de Contraseñas
Aceptar cualquier contraseña — incluyendo '123' o 'a' — hace las cuentas de usuarios trivialmente vulnerables a credential stuffing y ataques de fuerza bruta.
Cómo Funciona
Sin un requisito mínimo de longitud y complejidad, los usuarios eligen contraseñas débiles y los atacantes pueden forzarlas con wordlists pequeñas. Las guías NIST (SP 800-63B) recomiendan mínimo 8 caracteres y verificar contra listas de contraseñas filtradas conocidas.
// MAL: sin validación de contraseña — acepta '1' como contraseña válida
async function registrar(email: string, contrasena: string) {
const hash = await bcrypt.hash(contrasena, 10);
await db.users.create({ email, password: hash });
}// BIEN: aplica requisitos mínimos de contraseña
async function registrar(email: string, contrasena: string) {
if (contrasena.length < 8) throw new Error('La contraseña debe tener al menos 8 caracteres');
if (await isBreachedPassword(contrasena)) throw new Error('Contraseña encontrada en base de datos de brechas');
const hash = await bcrypt.hash(contrasena, 10);
await db.users.create({ email, password: hash });
}Ejemplo Real
La brecha de LinkedIn de 2012 expuso 117 millones de hashes de contraseñas. El análisis mostró que 'linkedin' era la contraseña más común, y más de 1 millón de cuentas usaban '123456'. Una política básica de longitud hubiera forzado a la mayoría a contraseñas más fuertes.
Cómo Prevenirlo
- Aplica una longitud mínima de contraseña de 8 caracteres (12+ recomendado)
- Verifica las contraseñas contra la API de HaveIBeenPwned o el paquete npm haveibeenpwned
- Permite contraseñas largas — no establezcas una longitud máxima menor a 64 caracteres
- No requieras caracteres especiales — no mejoran mucho la seguridad y dañan la usabilidad
Tecnologías Afectadas
Data Hogo detecta esta vulnerabilidad automáticamente.
Escanea Tu Repo GratisVulnerabilidades Relacionadas
Sin Rate Limit en Login
mediumUn endpoint de login sin rate limiting puede ser forzado por fuerza bruta miles de veces por segundo hasta encontrar una contraseña válida.
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.