mediumCWE-613A07:2021

Token No Invalidado al Hacer Logout

Tokens 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.

Cómo Funciona

Los JWTs stateless no tienen revocación integrada. Hacer logout en el cliente (borrar el token de memoria o localStorage) no tiene sentido si el servidor sigue aceptando ese token. Un atacante que capturó el token antes del logout puede seguir usándolo hasta que expire — lo que podría ser horas, días o nunca.

Código Vulnerable
// MAL: logout solo limpia el storage del cliente
export async function POST() {
  // Solo le dice al cliente que borre el token
  // Pero el token sigue siendo válido server-side
  return Response.json({ message: 'Sesión cerrada' });
}
Código Seguro
// BIEN: mantén una denylist de tokens en Redis
import { redis } from '@/lib/redis';
export async function POST(req: Request) {
  const token = req.headers.get('authorization')?.split(' ')[1];
  if (token) {
    const decoded = jwt.decode(token) as { exp: number };
    const ttl = decoded.exp - Math.floor(Date.now() / 1000);
    if (ttl > 0) await redis.setex(`denylist:${token}`, ttl, '1');
  }
  return Response.json({ message: 'Sesión cerrada' });
}

Ejemplo Real

Cualquier app que guarda tokens JWT (apps móviles, extensiones del navegador, integraciones de terceros) es vulnerable. Si un usuario hace logout en su teléfono sospechando compromiso, la copia del token del atacante sigue siendo válida. Supabase maneja esto automáticamente — hacer tu propio auth JWT es donde esto te pica.

Cómo Prevenirlo

  • Mantén una denylist de tokens en Redis con TTL igual al tiempo de vida restante del token
  • Usa tokens de corta vida (15 minutos) para minimizar la ventana entre logout y expiración del token
  • Para auth basado en sesiones, invalida el registro de sesión server-side al hacer logout
  • Considera usar Supabase Auth o Auth.js que manejan la invalidación de sesión correctamente

Tecnologías Afectadas

nodejsNext.jsPython

Data Hogo detecta esta vulnerabilidad automáticamente.

Escanea Tu Repo Gratis

Vulnerabilidades Relacionadas