martes, noviembre 22, 2011

El parche del bug de Reverse Proxy en Apache 2.2.22-dev

El proyecto Apache Web Server publicó la versión 2.2.1 a mediados de septiembre, arreglando un problema que podía permitir un ataque de Denegación de Servicio. De hecho, los parches de seguridad de la últimas versiones de Apache que provocaron la actualización de una versión de la rama habían sido referentes a este de vulnerabilidades D.O.S. Puedes consultar la lista de vulnerabilidades de la rama 2.2 en la web del proyecto.

Sin embargo, hay una versión Apache httpd 2.2.2-dev que soluciona un bug bastante curioso con el módulo de Reverse Proxy CVE-2011-3368, que puede permitir algo totalmente distinto: exponer servidores internos de la organización que no están publicados a Internet. El bug en concreto está muy bien explicado en el blog de Context, y viene a ser como sigue.

La idea es que la regla que viene por defecto para la publicación de servidores externos a través de un servicio de mod_proxy es tal que:
RewriteRule ^(.*) http://internalserver:80$1 [P]
Aparentemente es una regla normal en la que se está re-escribiendo una petición HTTP a la IP externa o al hostname externo a una petición al servidor interno publicado, en este caso internalserver. Hasta ahí todo parece que va bien.

Sin embargo, la vulnerabilidad radica en que el estándar de URLs permite escribir una petición HTTP con un usuario, password, hostname, puerto y path, tal y como se ve en la imagen siguiente.


Conocido esto, al atacante le bastaría con enviar al hostname de la web una ruta que empezara por @ y que tuviera la ruta interna del servidor, es decir, algo como @otro_servidor_interno:80/ruta De esta forma, internalserver:80 se convertirían en el usuario y password de una ruta que quedaría como:
http://internalserver:80@otro_servidor_internto:80/ruta
Permitiendo por tanto acceder a los servidores internos que no pidan usuario y password. La solución en el parche ha sido tan sencilla como añadir un slash a la regla de rewrite:
RewriteRule ^(.*) http://internalserver:80/$1 [P]
Por supuesto, esta vulnerabilidad, como en su día fue la de CSPP que permitía conectarse a BBDD internas hacen que la información de la red interna que obtenga un atacante ya sea mediante FOCA, haciendo uso de transferencias de zonas DNS, escaneos PTR o búsqueda de servidores temáticos con Robtex pueda ser peligrosa, tal vez no ahora, pero sí en el futuro. Y, si no, utilizando técnicas de fuzzing usando el exploit publicado en exploit-db.

Descubrir servidores con mod_proxy usando FOCA 3

Una de las formas que hay en FOCA 3 de descubrir servidores que pueden tener activo el módulo de reverse proxy se puede ver gráficamente, cuando el fingerprinting de los hostnames de una IP devuelve diferentes versiones de servidores web, y el fingerprinting de la dirección IP devuelve Apache menor que 2.2.22-dev tal vez sea un buen sitio para probar.

Saludos Malignos!

Entradas populares