jueves, 25 de agosto de 2011

Denegación de servicio en Apache a través de Range header

Se ha publicado un sencillo exploit que permite provocar una denegación de servicio en todas las versiones de Apache. Esto significa que se puede dejar sin servicio a los servidores web Apache con la configuración por defecto. De nuevo el responsable del descubrimiento ha sido Kingcope, que ha dado todos los detalles técnicos sin avisar previamente. En realidad el fallo se conocía desde 2007.

El día 19 de agosto, viernes, Kingcope hizo público un sencillo exploit en Perl que permitía provocar una denegación de servicio en Apache desde un solo sistema. Cuando menos, el rendimiento del servidor atacado se reducían considerablemente. Hacía mucho tiempo que no se publicaba un exploit que permitiese "echar abajo" un servidor entero desde un solo ordenador. Lo curioso es que Michal Zalewski descubrió algo muy parecido en enero de 2007. Usando un mismo vector de ataque, se conseguía un efecto diferente: Zalewski agotaba el ancho de banda, mientras que Kingcope consigue agotar los recursos físicos del servidor. Al no publicarse exploit entonces, sino simplemente explicar un comportamiento "extraño", no recibió demasiada atención.

No es la primera vez que Kingcope publica sin previo aviso. En septiembre de 2009 hizo público un fallo en IIS 5. En noviembre, una elevación de privilegios en FreeBSD y en julio, un grave problema en OpenSSH de FreeBSD. Siempre lleva hasta sus últimas consecuencias el "full disclosure" y suele enviar sin más a las listas de seguridad todos los detalles del problema. Con Apache no ha hecho una excepción.

La vulnerabilidad se encuentra en el módulo mod_deflate. Consiste en el agotamiento de recursos al crear múltiples peticiones con la cabecera Range manipulada. Según el exploit publicado se envía esta cabecera con la siguiente secuencia 0-,5-0,5-1,5-2...5-1299. Esto provoca que el servidor genere múltiples respuestas que son fragmentos de un mismo recurso, en definitiva, se trata de peticiones manipuladas de rangos de bytes de un mismo archivo o recurso a descargar. Además la petición se realiza con la cabecera "Accept-Enconding: gzip" que hace que el servidor vulnerable intente comprimir cada fragmento solicitado, consumiendo memoria y tiempo de procesador hasta que el proceso deja de responder.

"mod_deflate" es un módulo empleado por Apache para comprimir contenido antes de ser devuelto al cliente. Este módulo es instalado y habilitado por defecto en la instalación base de Apache.

No existe parche oficial por parte de Apache aunque sí que se han hecho públicos diferentes métodos para mitigar el ataque y la promesa de un parche en 48 horas (lo que acumularía una semana tras el aviso). Se recomienda seguir las contramedidas que describe Apache, disponibles en la dirección:

http://mail-archives.apache.org/mod_mbox/httpd-announce/201108.mbox/%3c20110824161640.122D387DD@minotaur.apache.org%3e


Borja Luaces
bluaces@hispasec.com

Sergio de los Santos
ssantos@hispasec.com
Twitter: @ssantosv


Más información:

Apache httpd Remote Denial of Service (memory exhaustion)
http://www.exploit-db.com/exploits/17696/

Revival of an Unpatched Apache HTTPD DoS
http://isc.sans.edu/diary.html?storyid=11449

No hay comentarios:

Publicar un comentario en la entrada