lowCWE-613A07:2021

Sin Cerrar Sesión en Todos los Dispositivos

No ofrecer una opción de 'cerrar sesión en todos los dispositivos' deja sesiones activas en dispositivos robados u olvidados indefinidamente.

Cómo Funciona

Los usuarios cambian contraseñas después de una supuesta brecha, pero si el token de sesión del atacante no es revocado, sigue conectado. De igual forma, un dispositivo robado o una computadora compartida con una sesión olvidada permanece accesible hasta que el token expire naturalmente — lo cual podría ser meses.

Código Vulnerable
// MAL: el logout solo limpia la sesión del dispositivo actual
async function logout(sessionToken: string) {
  await db.sessions.delete({ token: sessionToken }); // solo esta sesión
}
Código Seguro
// BIEN: opción para revocar todas las sesiones de un usuario
async function logoutAllDevices(userId: string) {
  await db.sessions.deleteMany({ userId }); // revoca todas las sesiones activas
}
// Activa esto automáticamente cuando el usuario cambia su contraseña

Ejemplo Real

Varias brechas de datos se prolongaron porque las víctimas cambiaron sus contraseñas pero no invalidaron las sesiones activas del atacante. WhatsApp y los principales bancos han recibido críticas por no proporcionar funcionalidad de 'cerrar sesión en todos los dispositivos'.

Cómo Prevenirlo

  • Provee un botón 'cerrar sesión en todos los dispositivos' en la configuración de la cuenta
  • Revoca automáticamente todas las sesiones cuando se cambia una contraseña
  • Muestra a los usuarios una lista de sesiones activas con tipo de dispositivo, ubicación y última actividad
  • Establece una vida útil máxima de sesión (por ejemplo, 30 días) para que las sesiones viejas expiren automáticamente

Tecnologías Afectadas

Node.js

Data Hogo detecta esta vulnerabilidad automáticamente.

Escanea Tu Repo Gratis

Vulnerabilidades Relacionadas