Área: Seguridad / Auth
Severidad: Media
Puntaje actual: 7/10 | Potencial: 10/10
---
Síntoma
Después de hacer logout,
IS_LOGGED_IN se limpia correctamente, pero flutter.user_data permanece en localStorage con el token de acceso, pdf_password y email del usuario.Evidencia
eval-login.mjs / eval-console.mjs:
Post-logout IS_LOGGED_IN: ✅ cleared
Post-logout user_data persists: ⚠ H9: data remains
localStorage content after logout:
flutter.user_data = "{\"token\":\"120|hash123...\",\"pdf_password\":\"secret123\",\"email\":\"composer3@faristol.com\",\"user_id\":120}"
IS_LOGGED_IN = "" (limpiado)
Impacto
Factor | Detalle --------|--------- Exposición de token | Token Bearer accesible desde localStorage después de cerrar sesión pdf_password | Contraseña de PDF visible. Cualquier script en la página puede leerla Mismo navegador | Otro usuario del mismo navegador/cliente puede leer datos del usuario anterior XSS | Si hay vulnerabilidad XSS, el atacante obtiene token + pdf_password incluso post-logout Persistencia | Los datos persisten hasta que se cierre la pestaña o se limpie manualmente localStorage Causa raíz
Flutter app limpia
IS_LOGGED_IN en logout (lo setea a "" o "false") pero NO elimina flutter.user_data. Es un cleanup incompleto. El código de logout probablemente hace:localStorage.setItem('IS_LOGGED_IN', 'false');
// Falta: localStorage.removeItem('flutter.user_data');
Reproducción
export DISPLAY=:99
cd /home/admin/fluttwebfaris
node eval-login.mjs
# Leer log.txt en resultados
O manual:
1. Login en visorweb2
2. Logout desde drawer
3. Abrir DevTools > Application > Local Storage
4. Observar
flutter.user_data con token y pdf_passwordFix sugerido
En el handler de logout de la app Flutter:
localStorage.removeItem('flutter.user_data');
localStorage.setItem('IS_LOGGED_IN', 'false');
O mejor:
localStorage.clear();
Tiempo estimado de fix
1h (agregar removeItem en logout handler)
Referencias
•
eval-login.mjs — Auth flow + localStorage analysis•
eval-console.mjs — Post-logout state verification•
NOTAS-ERRORES.md línea 132-145