Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ public async Task<IActionResult> VerifyMfa([FromBody] VerifyMfaRequest request,


[HttpPost("logout")]
[AllowAnonymous]
[Authorize]
public async Task<IActionResult> Logout(CancellationToken cancellationToken)
{
var refreshToken = Request.Cookies["refresh_token"];
Expand Down
19 changes: 19 additions & 0 deletions Documentacion/DOCUMENTACION_CAMBIOS.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.
11 changes: 11 additions & 0 deletions Documentacion/LOG_ERRORES_INCIDENCIAS.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Loading