Hoy en día casi todas las aplicaciones web tiene un parte pública, accesible por todo el mundo sin necesidad de facilitar ningún tipo de credenciales, y una parte privada, a la cual tendremos acceso mediante la identificación con algún tipo de credenciales. Para la gestión de accesos a esta parte privada, mantenimientos de sesión y demás acciones relacionadas con la autenticación y autentificación, hacen falta diversas herramientas o mecanismos como son: contraseñas, tokens, llaveros, cifrados, …
La tercera vulnerabilidad se relaciona con todo esto. En ella se contemplan la incorrecta implementación de métodos de autenticación o gestión de sesiones que pueden comprometer los elementos utilizados para llevar a cabo las acciones anteriormente mencionadas.
La búsquedas de vulnerabilidades en estos métodos de autenticación o mantenimiento de sesión pueden ser llevadas a cabos por todo tipos de usuarios ya sean externos o internos y con mayores o menores conocimientos, o en disposición de herramientas adecuadas.
Generalmente estos fallos provienen de deficiencias o errores en la implementación de los sistemas, ya que conseguir que estos sean correctos es bastante complicado. La mayoría de desarrolladores y organizaciones intentan realizar sus propias implementaciones, pero en la mayoría de ocasiones, estas no son perfectas.
El fallo puede ir desde leve, hasta muy grave. Pongamos por ejemplo que alguien externo consigue identificarse como un usuario de una red con permisos muy restringidos, en este caso, el perjuicio no sería demasiado a parte de la consulta de algunos datos y poco más. Pero pongamos que el mismo usuarios, con además amplios conocimientos consigue acceder como superusuario a la red y las máquinas de dicha empresa, este podría hacer cualquier cosa que se le ocurriera, trasformando el fallo en muy grave.
Los fallos más normales que podemos encontrar en este ámbito, son:
– No haber almacenado de forma correcta los credenciales de los usuarios en la base de datos. Un ejemplo de esto, sería contraseñas en texto plano o con un cifrado muy débil.
– Otro fallo común es el no poseer una política de contraseñas fuerte, es decir, permitir contraseñas cortas, solo numéricas o solo alfabéticas sin exigir la aparición de mayúsculas, minúsculas o símbolos menos comunes.
– Mal control o gestión de los mecanismo de modificación o recuperación de las contraseñas.
– Visualización de los identificadores de sesión en URL’s o en la página web de forma que otros usuarios puedan visualizarlos fácilmente, por ejemplo, si les enviamos un enlace, y ellos puedan usar este identificador para realizar una suplantación.
– Mala gestión de la finalización de sesiones. Dificultades del usuario para cerrarla correctamente, tiempos prolongados de vida de la sesión tras el cierre de la aplicación. En un sitio público podríamos estar navegando con nuestra sesión, dejar el sitio al haber terminado y que alguien venga posteriormente y nuestra sesión aún existiese.
– Manejo de las contraseñas a través de la red sin cifrar, es decir, en texto plano, haciendo posible su interceptación mediante un sniffer u otro tipo de métodos.
En definitiva, hay que andarse con 100 ojos a la hora de implementar mecanismos de autenticación y de gestión de sesiones. Y tener en cuenta todas las consideraciones anteriormente mencionadas. En el proyecto OWASP, de que estamos hablando estos días, podemos encontrar el proyecto “Application Security Verification Standard“, el cual nos ofrece un conjunto de requisitos de gestión de sesiones y autenticación. En su sección V2, podemos encontrar la “Autenticación” y en la sección V3 “Gestión de sesiones“. Nos vemos.