Sin Timeout de Sesión
Las sesiones que nunca expiran permanecen válidas indefinidamente, dándole a los atacantes tiempo ilimitado para usar tokens robados.
Cómo Funciona
Si un JWT o token de sesión no tiene expiración, un token robado de una brecha, un log filtrado o un dispositivo comprometido permanece válido para siempre. El atacante puede volver meses después y el token sigue funcionando. Los timeouts de sesión limitan la ventana de oportunidad incluso cuando un token es comprometido.
// MAL: JWT sin expiración — válido para siempre
const token = jwt.sign({ userId: user.id }, process.env.JWT_SECRET!);
// Sin expiresIn — este token nunca expira// BIEN: patrón de access token de corta duración + refresh token
const accessToken = jwt.sign(
{ userId: user.id },
process.env.JWT_SECRET!,
{ expiresIn: '15m' } // access token de corta duración
);
const refreshToken = generateSecureToken(); // guardado en DB con expiración de 30 días
// El cliente usa el refresh token para obtener nuevos access tokens silenciosamenteEjemplo Real
La auditoría de seguridad de Zoom en 2020 encontró que algunos tokens no tenían expiración configurada. Los investigadores de seguridad demostraron que un token de una entrada de log de un año atrás seguía siendo válido, permitiéndoles autenticarse como usuarios que habían cambiado sus contraseñas hace mucho.
Cómo Prevenirlo
- Establece una expiración corta en los JWTs (15-60 minutos) e implementa un flujo de refresh token
- Implementa timeout de sesión absoluto (por ejemplo, 30 días máximo) independientemente de la actividad
- Implementa timeout de sesión por inactividad (por ejemplo, 2 horas de inactividad) para aplicaciones sensibles
- Guarda los refresh tokens en la base de datos para que puedan ser revocados del lado del servidor
Tecnologías Afectadas
Data Hogo detecta esta vulnerabilidad automáticamente.
Escanea Tu Repo GratisVulnerabilidades Relacionadas
NODE_ENV No Configurado como Production
mediumCorrer Node.js sin NODE_ENV=production habilita mensajes de error detallados, deshabilita optimizaciones de caché y puede activar middleware solo para desarrollo.
Modo Debug Activo en Producción
mediumEl modo debug habilitado en producción expone estado interno, habilita logging detallado y a veces activa endpoints de debugging interactivos que los atacantes pueden explotar.
Sin Endpoint de Health Check
lowSin un endpoint /health, los load balancers y orquestadores no pueden verificar que tu aplicación realmente funciona antes de enrutar tráfico hacia ella.
Sin Monitoreo de Errores
lowSin monitoreo de errores, los errores de producción son invisibles hasta que un usuario los reporta — lo cual la mayoría nunca hace.