Testing for Session Fixation (OTG-SESS-003)

El objetivo de la prueba de seguridad OTG-SESS-003 consiste en comprobar si son renovadas las cookies luego de una autenticación exitosa del usuario. Si esto no ocurre, el usuario puede ser forzado, sin su consentimiento, a usar una cookie conocida por el atacante, el cual, esperaría luego pacientemente a que el usuario se autentique con dicha cookie para secuestrar su sesión. Esta vulnerabilidad se denomina session fixation y ocurre cuando:

  1. La aplicacion web auténtica al usuario sin invalidar primero el ID de sesión existente, por tanto se continua asociado el ID inicial a la sesión del usuario.
  2. Un atacante fuerza a un usuario a utilizar un ID de sesión determinado. Por tanto, la próxima vez que el usuario se auténtica en la aplicacion, esta asociara el ID de sesión del atacante a la sesión del usuario, permitiendo, de este modo, el secuestro de la sesión.

Como puede apreciarse, este ataque es muy simple de realizar. Por tanto, es muy importante comprobar que esta vulnerabilidad no esta presente en nuestra aplicacion web, para ello utilizaremos la siguiente técnica:

  1. Disponer de una herramienta que sirva para la intercepción por proxy entre nuestro navegador y la aplicacion web, en mi caso me gusta utilizar OWASP ZAP. Pueden encontrar un método sencillo de configuración en el siguiente enlace.
  2. Revisar las cabeceras de peticiones y respuestas HTTP, comprobando si cambia el ID de la cookie de sesión del siguiente modo (Ejemplo de encabezados tomado de la OTG 2014):

Acceder a la aplicacion web:

GET http://www.example.com


Revisar la respuesta obtenida de la aplicacion web:

HTTP/1.1 200 OK
Date: Wed, 14 Aug 2008 08:45:11 GMT
Server: IBM_HTTP_Server
Set-Cookie: JSESSIONID=0000d8eyYq3L0z2fgq10m4v-rt4:-1; Path=/; secure
Cache-Control: no-cache=”set-cookie,set-cookie2″
Expires: Thu, 01 Dec 1994 16:00:00 GMT
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html;charset=Cp1254
Content-Language: en-US

Puede apreciarse como se establece un nuevo identificador de sesión: JSESSIONID=0000d8eyYq3L0z2fgq10m4v-rt4:-1. Esta sesión ha sido creada por defecto, el próximo paso es comprobar si se genera un ID de cookie distinta cuando el usuario se auténtica en la aplicacion web. Para ello enviaremos una petición HTTPS POST similar a esta:


POST https://www.example.com/authentication.php HTTP/1.1
Host: http://www.example.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1.16) Gecko/20080702 Firefox/2.0.0.16
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: it-it,it;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://www.example.com
Cookie: JSESSIONID=0000d8eyYq3L0z2fgq10m4v-rt4:-1
Content-Type: application/x-www-form-urlencoded
Content-length: 57

Name=Meucci&wpPassword=secret!&wpLoginattempt=Log+in


Revisando posteriormente la respuesta HTTP de la aplicacion luego de una autenticación exitosa:

HTTP/1.1 200 OK
Date: Thu, 14 Aug 2008 14:52:58 GMT
Server: Apache/2.2.2 (Fedora)
X-Powered-By: PHP/5.1.6
Content-language: en
Cache-Control: private, must-revalidate, max-age=0
X-Content-Encoding: gzip
Content-length: 4090
Connection: close
Content-Type: text/html; charset=UTF-8

HTML data

Podemos comprobar que no se envía al usuario otra cookie de sesión, esto quiere decir que la cookie inicial no se invalidar y se mantiene el mismo ID de sesión y por tanto la aplicacion web es vulnerable a un ataque de session fixation.


Espero que te haya sido útil este post y déjame saber, con tus comentarios, si consideras útil esta prueba de seguridad.

Anuncios

2 comentarios en “Testing for Session Fixation (OTG-SESS-003)

  1. Pingback: Ataques de Session Fixation | Behique Digital

  2. Pingback: Guía de Pruebas de OWASP 4.0 | Behique Digital

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s