diff --git a/Atlas Balance/backend/src/AtlasBalance.API/Controllers/AuthController.cs b/Atlas Balance/backend/src/AtlasBalance.API/Controllers/AuthController.cs index fc14c6a..44bcfc2 100644 --- a/Atlas Balance/backend/src/AtlasBalance.API/Controllers/AuthController.cs +++ b/Atlas Balance/backend/src/AtlasBalance.API/Controllers/AuthController.cs @@ -93,7 +93,7 @@ public async Task VerifyMfa([FromBody] VerifyMfaRequest request, [HttpPost("logout")] - [AllowAnonymous] + [Authorize] public async Task Logout(CancellationToken cancellationToken) { var refreshToken = Request.Cookies["refresh_token"]; diff --git a/Documentacion/DOCUMENTACION_CAMBIOS.md b/Documentacion/DOCUMENTACION_CAMBIOS.md index 1746b55..e921087 100644 --- a/Documentacion/DOCUMENTACION_CAMBIOS.md +++ b/Documentacion/DOCUMENTACION_CAMBIOS.md @@ -14536,3 +14536,22 @@ La primera ronda corrigió timing y animaciones no funcionales, pero el icono se - Endurecer `backup_path`/`export_path` con allowlist de raices si se acepta una migracion de configuracion. - Limitar tamano y contenido de paquetes de actualizacion antes de extraerlos. - Revisar en otra pasada fingerprint de importacion, disposal de transacciones de importacion, calculo de saldo actual por fecha/fila, `ConfiguracionController` con JSON nulo y cooldown de alertas SMTP fallidas. + +## 2026-05-20 - V-01.07 - Analisis de seguridad y hardening de logout + +- **Version:** V-01.07 +- **Trabajo realizado:** + - Auditoria estatica de seguridad sobre autenticacion, middleware CSRF, pipeline de `Program.cs` y servicios de actualizacion. + - Endurecimiento de `POST /api/auth/logout` para requerir usuario autenticado (`[Authorize]`) y eliminar superficie anonima innecesaria. +- **Archivos tocados:** + - `Atlas Balance/backend/src/AtlasBalance.API/Controllers/AuthController.cs` + - `Documentacion/LOG_ERRORES_INCIDENCIAS.md` + - `Documentacion/DOCUMENTACION_CAMBIOS.md` +- **Comandos ejecutados:** + - `rg --files -g 'AGENTS.md' -g 'CLAUDE.md'` + - `rg -n "\[AllowAnonymous\]" backend/src/AtlasBalance.API/Controllers` + - `timeout 180s dotnet test backend/tests/AtlasBalance.API.Tests/AtlasBalance.API.Tests.csproj --filter FullyQualifiedName~AuthControllerTests` +- **Resultado de verificacion:** + - Tests de `AuthController` OK. +- **Pendientes:** + - Mantener validacion de seguridad dinamica/E2E autenticada para confirmar flujos de sesion en entorno integrado. diff --git a/Documentacion/LOG_ERRORES_INCIDENCIAS.md b/Documentacion/LOG_ERRORES_INCIDENCIAS.md index 099473f..5f8bedd 100644 --- a/Documentacion/LOG_ERRORES_INCIDENCIAS.md +++ b/Documentacion/LOG_ERRORES_INCIDENCIAS.md @@ -1400,3 +1400,14 @@ - Causa: `permisosStore.canViewCuenta` trataba cualquier fila global (`cuenta_id/titular_id null`) como acceso de cuenta, sin distinguir si era solo `PuedeVerDashboard`. - Solucion aplicada: `canViewCuenta`, `canAddInCuenta`, `canEditCuenta`, `canDeleteInCuenta`, `canImportInCuenta`, `getColumnasVisibles` y `getColumnasEditables` pasan a ignorar filas globales `dashboard-only`; solo cuentan filas scopeadas de cuenta/titular o filas globales con acceso global de datos. `CuentasPage` muestra `Sin acceso` en vez de CTA operativos y `CuentaDetailPage` redirige al dashboard si recibe `403`. - Verificacion: `npm.cmd run lint` OK, `npm.cmd run build` OK y `robocopy dist ..\\backend\\src\\AtlasBalance.API\\wwwroot /MIR` OK. + +## 2026-05-20 - V-01.07 - Endurecimiento de cierre de sesion + +- Contexto: revision de seguridad backend enfocada en superficie de autenticacion y control de sesiones. +- Hallazgo confirmado: + - `POST /api/auth/logout` estaba marcado como `AllowAnonymous`; aunque ya tenia barreras por cookies `SameSite=Strict` + CSRF, mantenia una superficie innecesaria para intentos anonimos y ruido de auditoria. +- Solucion aplicada: + - `AuthController` ahora exige `Authorize` en `logout` para que el cierre de sesion sea una accion autenticada. +- Verificacion: + - Compilacion y tests focalizados de `AuthController` en verde. +- Regla: endpoints que alteran estado de sesion deben requerir identidad autenticada salvo justificacion tecnica explicita y documentada.