25 abril 2012

Seguridad en Tomcat - JSESSIONID en la URL

En una análisis de seguridad reciente me he encontrado una vulnerabilidad (funcionalidad) del manejo de sesiones dependiente de los Servelts  de Java que no conocía.

Según parece, añaden la sesión de un usuario a la URL como parámetro con el objetivo de controlar aquellos navegadores que no soporten el manejo de esta cabecera (wtf?).

Este comportamiento provoca que esta información sea almacenada en registros de pasarelas HTTP intermedias o historiales de navegación. Una vulnerabilidad de sobra conocida y documentada.

La siguiente captura muestra un ejemplo del comportamiento descrito anteriormente:


Para solucionar el problema en Tomcat 7, que soporta la versión 3.0 de la especificación de Servlets, basta con añadir la siguiente configuración al fichero web.xml:



En el caso de Tomcat 6, que se basa en la versión 2.5, se ha de deshabilitar de la siguiente forma:


3 comments :

PájaroDelTerror dijo...

No lo acabo de entender del todo ¿Qué problema puede acarrear que el JSESSIONID vaya en la url que no acaree ya el hecho de que vaya en la cabecera HTTP?

Alejandro Ramos dijo...

Hola!

Pues el problema es que puede quedar en los logs de un proxy y alguien que tenga acceso a esos logs, podrá robar la sesión. Otro ejemplo es que el enlace se guarde en el histórico de un ordenador público, con lo que ocurriría lo mismo.

Pablo dijo...

Hola,


Esta cookie también queda almacenada en el navegador y puede consultarse a través de por ejemplo las herramientas de desarrollador de los navegadores. ¿Existe alguna manera de controlar la creación de JSESSIONID y establecer por ejemplo parámetros como HttpOnly o Secure durante la creación?


Un saludo