Uno de los problemas a la hora de gestionar la seguridad sobre una aplicación web es comprobar la identidad del usuario. La implementación de sesiones permite asegurar que las operaciones son realizadas por la persona autorizada. Sin embargo, existen riesgos que son importantes conocer y analizar sobre estos mecanismos.
Generalmente, cuando un usuario utiliza una aplicación web que requiera registrarse, utiliza algún mecanismo de validación para comprobar su identidad. El método más común es la solicitud de credenciales (usuario y contraseña). Sin embargo para cada página dentro de la aplicación es necesario comprobar nuevamente la identidad del usuario. En esa situación el usuario necesitaría reingresar sus credenciales cada vez que realice una operación sobre la aplicación web en cuestión. Es aquí donde surge la necesidad de utilizar sesiones.
¿Cómo se implementan las sesiones?
Existen diversos mecanismos a la hora de implementar el manejo de sesiones en una aplicación web. Comúnmente se implementan mediante la utilización de tokens. Un token permite identificar a un usuario de manera unívoca dentro de la aplicación web. Para llevar esto a un ámbito práctico, generalmente se utilizan lo que se conoce como cookies. Por lo tanto, cuando un usuario inicia sesión sobre una aplicación web, establece una cookie que posteriormente se utiliza para comprobar su identidad.
Las cookies HTTP son las más utilizadas por las aplicaciones web. La comunicación entre el servidor y el cliente se realiza mediante peticiones HTTP. De esta manera, en cada actividad sobre la aplicación web, el cliente envía su token correspondiente y el servidor comprueba de que se trate de aquél que se estableció durante el inicio de sesión. De acuerdo a como resulte la comprobación, se autoriza o se deniega el acceso. A continuación, puede observarse una captura de como se establece una cookie:
Es importante considerar que también existen vulnerabilidades en este mecanismo de validación.
Vulnerabilidades
Dos de las vulnerabilidades más comunes en el manejo de sesiones se corresponden con las siguientes:
- Vulnerabilidades debido a debilidades en el algoritmo de generación de los tokens.
- Vulnerabilidades debido al manejo no correcto de los tokens.
Vulnerabilidad en la generación de tokens
El algoritmo de generación de tokens es el que utiliza el servidor web para generar cada uno de ellos de acuerdo a un cierto proceso establecido en el diseño de la propia aplicación web. En esta instancia, pueden existir debilidades en el algoritmo de generación resultando en la posible predicción de los tokens.
La generación de un token a partir de información del usuario, como la dirección de correo electrónico, sería un claro ejemplo. Supóngase el siguiente escenario:
En este caso, el token es generado a partir de la dirección de correo electrónico del usuario. Específicamente, se transforma el carácter ASCII a su correspondiente en hexadecimal. De esa manera, un atacante que conociera o averiguara este proceso podría generar el token correspondiente a la potencial víctima.
Vulnerabilidad en el manejo de tokens
En otro extremo, puede darse el caso en que la aplicación cuente con un algoritmo de generación de tokens robusto pero la propia aplicación no realice un manejo adecuado del propio token.
Uno de los casos más comunes es la transmisión de los tokens sin un método de cifrado. Esto podría comprometer la seguridad de la aplicación web si un atacante intercepta la red del usuario y extrae el token de sesión que se transmite en texto plano.
Otro caso que sucede habitualmente es cuando se almacenan los tokens en los logs del servidor. Si un atacante logra acceso a esos logs del sistema, se podría comprometer la seguridad de la aplicación web.
Impacto
En la actualidad, sin darse cuenta, los usuarios manejan muchas sesiones a la vez, como por ejemplo, cuando utilizan las redes sociales o los correos electrónicos.
Si un atacante pudiera tener acceso a los tokens de sesión, podría suplantar la identidad del usuario en la aplicación web y disponer de todas las funcionalidades y características como si fuera el verdadero usuario. Si esto ocurriera podría tener un gran impacto en la reputación del usuario, ya que el atacante podría realizar cualquier actividad como si fuera la víctima.
Desde ESET Latinoamérica, siempre resaltamos la importancia de la seguridad. La educación juega un rol fundamental en complemento con la tecnología, como es la utilización de software de seguridad. Conocer como funcionan este tipo de aplicaciones les permitirá a los usuarios saber cuáles son los riesgos asociados, así como también tener en cuenta la reputación de las aplicaciones web.
En el caso de ser administradores de aplicaciones web, la proactividad juega un papel muy importante. Las auditorías deben formar parte del ciclo de control. Es por esto que recomendamos la lectura de nuestro post titulado Arachni, una alternativa para auditar aplicaciones web y nuestra publicación auditando un servidor web con nikto.
Fernando Catoira
Analista de Seguridad