Contraseñas en Texto Plano
Contraseñas de usuarios guardadas como strings crudos en la base de datos en lugar de hashearse con bcrypt o Argon2.
Cómo Funciona
Si guardas contraseñas tal cual, un solo breach de la base de datos expone la contraseña real de cada usuario. Los atacantes las usan en Gmail, bancos y otros sitios (credential stuffing). El hashing convierte la contraseña en un digest irreversible — aunque el hash se filtre, la contraseña original queda protegida.
// MAL: guardando la contraseña cruda
async function registrar(email: string, password: string) {
await db.users.create({ data: { email, password } });
}// BIEN: hashea antes de guardar
import bcrypt from 'bcrypt';
async function registrar(email: string, password: string) {
const hash = await bcrypt.hash(password, 12);
await db.users.create({ data: { email, password: hash } });
}Ejemplo Real
RockYou (2009), Adobe (2013), LinkedIn (2012) — todos guardaban contraseñas en texto plano o con cifrado reversible. Cada breach comprometió cientos de millones de cuentas en otros servicios mediante credential stuffing.
Cómo Prevenirlo
- Siempre hashea contraseñas con bcrypt (factor 12+) o Argon2id antes de guardarlas
- Nunca loguees, imprimas o regreses contraseñas en ninguna parte de tu código
- Usa un servicio de auth dedicado (Supabase Auth, Auth0, Clerk) que hace esto por ti
- Agrega un check en CI que detecte campos de contraseña guardados sin hashear
Tecnologías Afectadas
Data Hogo detecta esta vulnerabilidad automáticamente.
Escanea Tu Repo GratisVulnerabilidades Relacionadas
API Keys Hardcodeadas
criticalAPI keys, tokens o secretos escritos directo en el código fuente, visibles para cualquiera con acceso al repo — incluyendo repos públicos de GitHub.
Sin Validación de Inputs
mediumDatos enviados por el usuario pasados directo a bases de datos o APIs externas sin ninguna validación de tipo, formato o contenido.
JWT Sin Expiración
highJWTs firmados sin el claim `exp` que nunca expiran, lo que significa que un token robado da acceso permanente sin forma de revocarlo.
Lógica de Auth Solo en Frontend
highMostrar u ocultar elementos de UI basándose en el rol del usuario en React, sin ninguna validación server-side — fácilmente bypasseable abriendo DevTools.