BlackHat 2012: nueva vulnerabilidad en .htaccess

Tal y como venimos informando desde hace unos días, varios miembros de ESET de todo el mundo nos desplazamos la semana pasada a Las Vegas para asistir a BlackHat y Defcon para conocer de cerca las novedades en materia de seguridad informática que se presentan en estos eventos. La delegación hispanohablante estaba formada por nuestros compañeros Joaquín y Sebastián de ESET Latinoamérica y Josep Albors de ESET España.

Una vez hemos completado los resúmenes de estas conferencias, durante las próximas semanas iremos publicando posts centrados en algunas de las charlas más importantes y en lo que ellas se presentó. Para empezar os traemos un artículo elaborado por nuestros compañeros de ESET Latinoamérica donde repasan una de las presentaciones realizadas por los argentinos, Matías Katz y Maximiliano Soler, en su charla “Bypassing .htaccess restrictions” (en español, sorteando las restricciones de .htaccess). En ella, mostraron y liberaron una herramienta que permitiría aprovechar una vulnerabilidad en la forma en que se configura este servicio, para así sortear la barrera de seguridad que este ofrece.

Para aquellos que no lo conozcan, el .htaccess es un archivo de configuración que permite, sobre servicios web, especificar configuraciones para las carpetas. Este mismo archivo ya generó problemas hace algún tiempo. Uno de los usos más frecuentes es el de limitar el acceso a un sitio con validación de usuario (generalmente contenida en el archivo .htpasswd). De esta forma, cuando el usuario se quiere conectar al sitio web, se solicita una autenticación como protección del o los directorios en el servidor.

No obstante, en la charla se presentó una vulnerabilidad que permitiría poder extraer y descargar localmente en el ordenador del atacante todos los archivos detrás de la protección de .htaccess. ¿Cómo es esto posible? Los autores descubrieron una vulnerabilidad en la forma en que .htaccess toma los métodos. Por lo general, un archivo de configuración tradicional contiene estos datos (en la charla se indicó cómo cientos de sitios web recomiendan utilizar esta configuración):

require valid-user

No obstante, una vulnerabilidad hace que cuando PHP recibe un método no conocido, este sea tratado como GET, y de esta forma se logra realizar el request sin necesidad de autenticación alguna. Es decir, aunque no es una vulnerabilidad propia del software, sí es un mal manejo que se ve especialmente afectado en forma de vulnerabilidad de configuración.

La charla resultó interesante ya que, más allá de la investigación, se trata de un ataque que hoy es totalmente factible de realizar contra millones de sitios web en todo el mundo. Es decir: muchas veces las vulnerabilidades presentadas son muy avanzadas desde el punto de vista técnico, muy complejas, pero su aplicación es limitada. No es este el caso, la explotación de esta vulnerabilidad es altamente probable en la mayoría de los sitios web que hoy utilizan .htaccess.

Durante la charla, se presentó el exploit (y HTExploit, la herramienta para automatizar el envío) y se mostró en vivo cómo a pesar de que desde el acceso web no era posible acceder a un directorio, a través de la explotación de la vulnerabilidad se podía acceder a los archivos detrás de esta protección. Entonces, ¿cómo pueden protegerse? Para empezar, hay que destacar que si se utilizan estos servicios es altamente probable que sean vulnerables ya que, como mencionaban los autores durante la charla, en la mayoría de los sitios web se recomienda una configuración que sostiene la vulnerabilidad, es decir, que no se declaren las excepciones a los métodos en el archivo de configuración. A continuación les mostramos las soluciones para dejar de ser vulnerables:

  • La forma más sencilla es modificar cómo se utiliza el archivo de configuración, restringiendo todos los métodos HTTP menos los indicados, con el uso de LimitExcept, como se especifica aquí:

Order Allow,Deny Deny from all

  • También es posible limitar un ataque de este tipo a través de PHP, revisando que la variable $PHP_AUTH_USER está configurada o mostrando un mensaje de error cuando $_SERVER[«REQUEST_METHOD»] utiliza un método que no sea GET o POST.

Asimismo, cabe recalcar que más allá de la funcionalidad de .htaccess, es importante destacar que en sitios web donde se deseen mecanismos de autenticación, este no debería ser (al menos el único) utilizado, sino otros mecanismos de validación de usuario más avanzados.

Felicitaciones a Matías y Maximiliano por la investigación, en los próximos días seguiremos informando sobre charlas, vulnerabilidades y consejos de seguridad a partir de las charlas de la Black Hat y la Defcon 2012.

Sebastián Bortnik
@sebabortnik

Josep Albors
@JosepAlbors

Comentar

Acerca de las cookies en este sitio

Este sitio web utiliza cookies propias y de terceros para mejorar tu experiencia de usuario y obtener información estadística. Para poder seguir navegando pulsa en "Sí, estoy de acuerdo". Podrás retirar este consentimiento en cualquier momento a través de las funciones de tu navegador. Ver nuestra política de cookies..