Una vulnerabilidad descubierta por kingcope permite que los servidores Apache vulnerables sean susceptibles de sufrir una denegación de servicio.
La vulnerabilidad se encuentra en el uso de la cabecera Range. Esta
cabecera se utiliza para obtener sólo una parte de la página. Si se
solicitan varias partes además de pedir que la respuesta se comprima,
mediante la cabecera Accept-Encoding: gzip, se dispara el consumo de
procesador y memoria.
Existe un script que permite comprobar si el servidor es vulnerable y, si es el caso, explotar dicha vulnerabilidad.
Para comprobar si un servidor es vulnerable, podemos ejecutar:
$ telnet 127.0.0.1 80
HEAD / HTTP/1.1
Host: 127.0.0.1
Range: bytes=0-5
Accept-Encoding: gzip
Connection: close
Si la respuesta es un código 206 Partial Content el servidor es
vulnerable:
HTTP/1.1 206 Partial Content
Date: Wed, 31 Aug 2011 11:52:13 GMT
Server: Apache/2.2.17 (Ubuntu)
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Range: bytes 0-5/20
Content-Length: 6
Connection: close
Content-Type: text/html;charset=UTF-8
Protección
Si tenemos un servidor vulnerable, podemos adoptar alguna de las siguientes medidas de protección.
-
Podemos deshabilitar la cabecera
Rangemediante la directivaRequestHeader, usando el módulomod_headers:RequestHeader unset Range -
Limitar el número de intervalos mediante
mod_rewrite:RewriteEngine OnRewriteCond %{HTTP:Range} ([0-9]-[0-9])(\s,\s[0-9]-[0-9])+ RewriteRule .* - [NS,L,F]
-
Deshabilitar el módulo
mod_deflate:$ sudo a2dismod deflate