highCWE-922A07:2021

Tokens de Autenticación en localStorage

Guardar JWT tokens, tokens de sesión o API keys en localStorage los hace accesibles a cualquier JavaScript corriendo en la página, incluyendo payloads XSS.

Cómo Funciona

localStorage es accesible a cualquier JavaScript corriendo en el mismo origen. Si un atacante logra incluso una vulnerabilidad XSS menor, puede extraer todos los tokens con una sola línea: document.cookie está protegido por HttpOnly, pero localStorage no tiene tal protección. Los tokens robados permiten secuestro de sesión, toma de cuentas y abuso de API. A diferencia de cookies, los valores de localStorage nunca se envían automáticamente con requests, así que los devs deben adjuntarlos manualmente — frecuentemente de formas que los exponen a CSRF o XSS. Los tokens en localStorage también persisten después de cerrar el navegador, extendiendo la ventana de ataque.

Código Vulnerable
// After login
const { token } = await response.json();
localStorage.setItem('auth_token', token);

// On every request
fetch('/api/data', {
  headers: { Authorization: `Bearer ${localStorage.getItem('auth_token')}` }
});
Código Seguro
// Server sets HttpOnly cookie after login
// In API route:
res.setHeader('Set-Cookie', serialize('session', token, {
  httpOnly: true,
  secure: true,
  sameSite: 'lax',
  path: '/',
  maxAge: 60 * 60 * 24 * 7
}));

// Client requests automatically include the cookie
fetch('/api/data', { credentials: 'include' });

Ejemplo Real

En 2022, una vulnerabilidad XSS en un dashboard React popular permitió a atacantes robar JWTs del localStorage de usuarios admin. Los tokens tenían tiempos de expiración largos (30 días), dando a los atacantes acceso persistente a paneles admin y datos de clientes.

Cómo Prevenirlo

  • Guarda tokens en cookies HttpOnly y Secure en vez de localStorage
  • Configura SameSite=Lax o Strict en cookies de autenticación
  • Usa tiempos de expiración cortos con rotación de refresh tokens
  • Implementa Content Security Policy para reducir la superficie de ataque XSS

Tecnologías Afectadas

ReactNext.jsNode.js

Data Hogo detecta esta vulnerabilidad automáticamente.

Escanea Tu Repo Gratis

Vulnerabilidades Relacionadas