
HTExploit es una herramienta que sirve para explotar una vulnerabilidad en la forma en la que se configuran los archivos .htaccess en un servidor web Apache (y algunos de sus derivados).
En Septiembre de 1997, un interesante artículo apareció en Apacheweek. Este artículo comentaba sobre un error de diseño en la forma en la que los tags < Limit > funcionaban, que permitía circunvalar ciertas restricciones.
Al tener la siguiente configuración:
< Limit >
... restricciones de acceso como 'require' o 'allow'...
< /Limit >
Todo el tráfico que utilizara los métodos GET y POST deberían pasar por los controles de acceso. Y si se utilizaran otros métodos que no sean ni GET ni POST, la comunicación sería automáticamente interrumpida, por tratarse de un método no autorizado.
Pero: Qué pasa si utilizamos un método no standard?
En ese caso, nuestro servidor Apache automáticamente decidirá pasarle el request al software que se encuentre en la capa inmediatamente superior a él, para que éste lidie con el pedido.
Aquí es donde se pone interesante:
Si el agente que se encuentra por arriba de Apache es PHP (en cualquier versión, hasta donde llegó mi investigación), y éste recibe un método no standard, PHP lo tratará como un GET y lo procesará.
Qué quiere decir todo esto?
Podemos obtener un GET en el servidor remoto SIN USAR GET, salteando de esta forma las restricciones aplicadas en el archivo .htaccess
En resumen, esto es lo que explota la herramienta:
El alcance de este ataque es grande. Básicamente, con cualquier combinación de Apache+PHP que tenga el servidor, y con un archivo .htaccess configurado de la forma mostrada anteriormente, podremos explotar el servidor.
Existen al menos 3 formas simples de corregir este problema:
- Utilizando los tags < LimitExcept >: Aplicando este tag dentro del archivo .htaccess, podemos indicarle al Apache como reaccionar al encontrarse con los métodos que no se indiquen en el tag < Limit >
- Aplicando medidas de control del lado del código: Verificando que la variable $PHP_AUTH_USER esté seteada podemos asegurarnos de que el usuario haya sido autenticado por el Webserver. También, podemos verificar que la variable $_SERVER["REQUEST_METHOD"] sea GET o POST, y descartar cualquier otro método
- Restringir los métodos desde Apache: Utilizando el famoso módulo modsecurity podemos aplicar la política allowed_methods, y de esta forma filtrar los métodos que serán aceptados por el Web server
La herramienta fue presentada en Black Hat USA 2012 y esta públicamente accesible desde el 25 de Julio de 2012.
Su última versión es la 0.77. Se puede encontrar en el sitio web del proyecto, o en Backtrack 5 R3
Es de código abierto, y está desarrollada en Python, por lo que podrán utilizarla bajo cualquier sistema operativo. No requiere ningún módulo de Python especial.
En el sitio web del proyecto también podrán obtener más información sobre la raíz de la vulnerabilidad, y podrán ver en detalle como utilizar la herramienta.
Si quieren leer más sobre el proyecto y la herramienta, pueden leer el Paper oficial para Black Hat.
Aquí tienen referencias que les servirán para seguir investigando este tema:
- Apache Tutorial: .htaccess files:
http://httpd.apache.org/docs/2.0/howto/htaccess.html - Common Configuration Problems: Issue #81
http://www.apacheweek.com/issues/97-09-05#configerrors - HTTP Authentication: Basic and Digest Access Authentication
http://tools.ietf.org/html/rfc2617 - Authentication, Authorization and Access Control
http://httpd.apache.org/docs/2.4/howto/auth.html - Sitio Web del proyecto HTExploit:
http://www.htexploit.org
