Limited Entropy Dot Com Not so random thoughts on security featured by Eloi Sanfèlix

31Mar/070

Cookies: domain, path y seguridad

Ahora que ya lo han resuelto creo que es el momento de comentarlo por aquí. Hace más de un mes (concretamente el 17 de febrero) nos dimos cuenta por casualidad de un fallo en los servicios web de la UPV que podía suponer el acceso a la Intranet con otro usuario, con la consecuencia de poder ver su expediente académico, datos personales, webmail, préstamos en biblioteca... incluso número de cuenta si tenía domiciliado el pago de la matrícula.

Todo vino porque Bea me comentó que no podía acceder a la web del IEEE-sbUPV ya que le salía google. Entonces avisé al administrador de dicho servidor y estuvimos mirando qué pasaba. Llegamos a la conclusión de que se trataba de una cookie del PoliformaT, una aplicación de nuestra universidad, que hacía saltar las alarmas del mod_security y ejecutaba la acción por defecto: mandar al usuario a google. Y fue entonces cuando se encendió la bombilla: si esta cookie se manda aquí, es posible que se mande a todo el dominio upv.es, junto con los identificadores de sesión... y ello probablemente implique que se pueda robar dicha sesión.

Así que creé una pequeña página en PHP en mi página personal de la universidad ( por si alguien no lo sabe, se puede poner tu página en la carpeta www de tu unidad compartida W: y tener una web en http://personales.alumno.upv.es/nombre_usuario ) que simplemente mostraba las cookies, algo así:

<?php
print_r($_COOKIE);
?>

Con esto, se obtenía la variable TDp, e introduciéndola en la petición HTTP se podía acceder a la sesión de otro usuario utilizando por ejemplo paros proxy . Nosotros lo probamos con una cuenta de alumno (la de Bea, con su consentimiento) y accedimos sin problemas... desconozco si como profesor se habría podido, pero supongo que funcionaría igual.

Y bien, ¿cual era el problema? Pues básicamente dos: que se mandaba la cookie a TODO el dominio *.upv.es y no a www.upv.es y la ruta específica donde se encuentra la aplicación de la intranet, y que para identificar la sesión se usaba única y exclusivamente dicha cookie.

Soluciones? Pues no mandar la cookie a todos sitios y/o utilizar algún dato más del usuario que deba permanecer invariable durante una sesión para identificarlo, por ejemplo la dirección IP. La solución que ha tomado la UPV ha sido la segunda, y por ello no sé desde cuando está resuelto el problema ya que las cookies se siguen mandando y yo lo que he hecho durante este tiempo era mirar de vez en cuando si las cookies se mandaban o no. Ayer probé de nuevo durante una clase con un compañero (también con su consentimiento) y vimos que daba un error por haber cambiado de dirección IP.

Para la otra solución, supongo que todos los lenguajes de programación web permiten especificar fácilmente a qué dominio y ruta pertenece la cookie. Por ejemplo en PHP, la función setcookie lo permite especificar en sus parámetros y por defecto manda la cookie al dominio actual, con ruta el directorio actual.

Así pues, si programas aplicaciones web, y sobretodo si van a estar en hostings compartidos, deberías tener en cuenta esto que parece una tontería, pero puede permitir el secuestro de una sesión 😉

Posted by Eloi Sanfèlix

Filed under: Seguridad, Web Leave a comment
Comments (0) Trackbacks (0)

No comments yet.


Leave a comment

No trackbacks yet.