FT-019 · Session Management
Sesiones activas tras el cambio de contraseña
app.acme.test
IMPACTO
Qué puede ocurrir
Una sesión robada sigue siendo válida después de que la víctima cambie su contraseña, de modo que el cambio no corta el acceso del atacante.
REPRODUCCIÓN
Prueba de concepto paso a paso
- 01
Abrir dos sesiones con la misma cuenta
Simulan el navegador de la víctima y el del atacante.
curl -s -c victima.jar -X POST https://app.acme.test/login \ -d 'email=pentest-user@acme.test&password=[REDACTED]' curl -s -c atacante.jar -X POST https://app.acme.test/login \ -d 'email=pentest-user@acme.test&password=[REDACTED]'
- 02
Cambiar la contraseña desde la primera sesión
El cambio se completa correctamente y la aplicación muestra el aviso de éxito.
curl -s -b victima.jar -X POST https://app.acme.test/api/account/password \ -H 'Content-Type: application/json' \ -d '{"current":"[REDACTED]","next":"[REDACTED-NUEVA]"}' - 03
Reutilizar la sesión antigua
La segunda sesión sigue devolviendo 200 y datos de la cuenta media hora después del cambio.
curl -s -b atacante.jar -o /dev/null -w '%{http_code}\n' \ https://app.acme.test/api/account/profile # => 200
Ejecutado dentro de la ventana autorizada, con cuentas creadas para el ejercicio y sin extraer datos reales. Las credenciales aparecen siempre redactadas.
EVIDENCIA SANITIZADA
Cookie previa al cambio, aceptada después
GET /api/account/profile HTTP/1.1
Host: app.acme.test
Cookie: session=[REDACTED · emitida antes del cambio]
HTTP/1.1 200 OK
{"email":"pentest-user@acme.test","organization":"ACME"}REMEDIACIÓN
Revocación del resto de sesiones
Revocar el resto de sesiones al cambiar credenciales, rotar el identificador de sesión y ofrecer al usuario una lista de dispositivos activos con opción de cierre.
await db.query( "DELETE FROM sessions WHERE user_id = $1 AND id <> $2", [user.id, currentSessionId] ); await rotateSessionId(currentSessionId);
CLASIFICACIÓN
Ficha del hallazgo
- Severidad
- Media
- CVSS v3.1
- 6.4
- CWE
- CWE-613
- OWASP
- A07:2021 · Identification and Authentication Failures
- Validación
- Validado · manual
- Activo
- app.acme.test
VECTOR
AV:N/AC:L/PR:L/UI:R/S:U/C:H/I:L/A:N
REFERENCIAS