Secuestro de sesión - Cómo los atacantes roban inicios de sesión
Lectura de 2 min aprox.
El secuestro de sesión (session hijacking) es un ataque en el que el atacante roba el ID de sesión de un usuario y lo suplanta para acceder a un servicio. El ID de sesión es un identificador que el servidor emite tras el inicio de sesión, y si es robado, el servicio puede utilizarse en estado autenticado sin necesidad de conocer la contraseña. Según los estudios de OWASP, la gestión inadecuada de sesiones figura como una de las principales vulnerabilidades de las aplicaciones web.
No arrastrar el mismo identificador cuando cambian los privilegios
En muchas implementaciones se asigna un identificador a cada visitante ya en la fase de navegación previa al inicio de sesión, para conservar entre peticiones los ajustes de visualización o los datos introducidos a medias. Si tras la autenticación se sigue usando el mismo valor, lo único que cambia es el estado al que ese valor apunta; el valor en sí no cambia. Quien haya podido conocer ese valor de antemano tiene, en el momento en que el usuario legítimo termina de iniciar sesión, un valor que ahora remite a un estado dotado de privilegios. Que ese valor pueda conocerse por adelantado no depende de la habilidad de quien ataca, sino de si la aplicación admite todavía que un valor entregado desde fuera sea aceptado tal cual como sesión. Es un problema distinto del de sustituir el identificador cada cierto tiempo. Rotarlo con un temporizador acorta cuánto tiempo permanece expuesto un mismo valor, pero no incide en el hecho de que un valor se arrastre a través del punto en que cambian los privilegios. Lo que actúa sobre ese punto es emitir un valor nuevo inmediatamente después de cualquier operación que altere los privilegios e invalidar el anterior en ese mismo momento. La comprobación es igual de sencilla: comparar el valor antes y después de la autenticación. Es el tipo de carencia que no aflora en las pruebas funcionales habituales, porque el inicio de sesión funciona en ambos casos. Un descuido frecuente consiste en emitir el valor nuevo dejando válido el antiguo, de modo que dos identificadores apuntan al mismo estado y el cambio pierde su efecto.
El flujo del robo de sesión
Técnicas de ataque
Entre ellas se incluyen robar el ID de sesión de las cookies mediante XSS (cross-site scripting), interceptar la comunicación de red para robar el ID de sesión y los ataques de fijación de sesión que obligan a usar un ID de sesión preparado de antemano.
Escenarios de daño concretos
Un malentendido común es que «cerrar sesión te hace seguro». En realidad, un proceso de cierre de sesión que no invalida la sesión en el servidor puede dejar válido un ID de sesión robado. Por ejemplo, si inicias sesión en la banca en línea a través de la Wi-Fi pública de una cafetería y tu ID de sesión es interceptado mediante un ataque de intermediario, el atacante puede usar esa sesión para consultar saldos o realizar transferencias. También va en aumento el «robo de cookies», en el que el malware extrae las cookies almacenadas en el navegador para que el atacante acceda en estado autenticado desde otro dispositivo.
Contramedidas
Las contramedidas básicas son usar HTTPS, configurar los atributos Secure y HttpOnly en las cookies y regenerar periódicamente el ID de sesión. Si estableces una contraseña única y robusta para cada servicio y activas la autenticación de dos factores, se requerirá autenticación adicional para las operaciones importantes incluso si una sesión es secuestrada, lo que reduce el daño.
¿Te resultó útil este artículo?