Fijación de Sesión
El 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.
Cómo Funciona
Un atacante visita tu sitio, obtiene un ID de sesión y engaña a una víctima para que use ese mismo ID (via un parámetro URL o cookie inyectada). Después de que la víctima hace login, la sesión ahora está autenticada — y el atacante, que ya conoce el ID de sesión, ahora tiene una sesión autenticada válida sin credenciales.
// MAL: mismo ID de sesión usado antes y después del login
async function login(req, res) {
const user = await authenticate(req.body);
// El ID de sesión permanece igual — el atacante ya lo conoce
req.session.userId = user.id;
res.redirect('/dashboard');
}// BIEN: regenera el ID de sesión en el login
async function login(req, res) {
const user = await authenticate(req.body);
// Regenera la sesión para obtener un nuevo ID que el atacante no conoce
req.session.regenerate((err) => {
req.session.userId = user.id;
res.redirect('/dashboard');
});
}Ejemplo Real
Los ataques de fijación de sesión son comunes en sitios de banca y e-commerce que aceptan IDs de sesión via parámetros URL (un patrón legacy). Un atacante envía un link de phishing con su ID de sesión conocido, y la víctima sin saberlo lo autentica.
Cómo Prevenirlo
- Siempre regenera el ID de sesión inmediatamente después de un login exitoso
- Nunca aceptes IDs de sesión de parámetros URL — usa solo cookies
- Configura timeouts de sesión cortos y regenera en escaladas de privilegios
- Usa una librería de sesiones bien mantenida (express-session con configuración correcta)
Tecnologías Afectadas
Data Hogo detecta esta vulnerabilidad automáticamente.
Escanea Tu Repo GratisVulnerabilidades Relacionadas
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.
Política de Contraseña Débil
mediumSin 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.
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.