highCWE-384A07:2021

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.

Código Vulnerable
// 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');
}
Código Seguro
// 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

nodejsNext.jsPythonPHP

Data Hogo detecta esta vulnerabilidad automáticamente.

Escanea Tu Repo Gratis

Vulnerabilidades Relacionadas