← Back to list

H9 — flutter.user_data persiste post-logout

🟡 Alta #4 | Score: 7/10 pending
Prioridad: 🟡 Alta #4
Á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_password

Fix 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

Review

Comments (0)