Inicio / Alerta Temprana / Avisos Seguridad / Denegación de servicio en Apache

Denegación de servicio en Apache

Fecha de publicación: 
26/08/2011
Importancia: 
4 - Alta
Recursos afectados: 

Apache en todas sus versiones cuando se utiliza el módulo mod_deflate.

Descripción: 

Se ha descubierto una vulnerabilidad en el servidor web Apache que provoca que se pueda producir una denegación de servicio(caída de la aplicación).

Solución: 

Actualizar a la versión de Apache 2.2.20 que corrige dicha vulnerabilidad.

Si por alguna razón no se puede actualizar la versión del servidor desde Apache se proponen varias soluciones provisionales para que sus servidores no se vean afectados por esta vulnerabilidad:

  • Utilización de SetEnvIf o mod_rewrite para la detección de grandes cantidades de rangos y de ese modo ignorar la cabecera con esos rangos o la petición propiamente dicha.
    • Apache 2.0 y 2.2: Descartar las cabeceras con más de 5 rangos, para ello se ha de incluir en la configuración de Apache las siguientes líneas:
      SetEnvIf Range (,.*?){5,} bad-range=1
      RequestHeader unset Range env=bad-range
      
    • Apache 2.0 , 2.2 y 1.3: Rechazar las peticiones con más de 5 rangos en la cabecera, para ello se ha de incluir en la configuración de Apache las siguientes líneas:
       RewriteEngine on
       RewriteCond %{HTTP:range} !(^bytes=[^,]+(,[^,]+){0,4}$|^$)
       RewriteRule .* - [F]
      
  • Limitar el tamaño del campo petición a unos cientos de bytes. Esto soluciona el problema de las cabeceras range pero puede ser que algunas otras cabecera se vean afectadas por la medida como por ejemplo sizeable cookies o campos de seguridad. Para la realización de esta solución se ha de incluir en el fichero de configuración de Apache la siguiente linea:
     LimitRequestFieldSize [tamaño en bytes]
    
  • Utilizacion del módulo mod_headers para deshabilitar completamente el uso de las cabeceras range. Esto puede afectar a ciertos tipos de clientes como los lectores electrónicos y el contenido de video streaming. Para aplicar esta solución se ha de incluir la siguiente linea en el fichero de configuración de Apache:
     RequestHeader unset Range 
    
  • Implementar un módulo para contar las cabeceras range como una medida provisional temporal.
     Código fuente del módulo para contar las cabeceras range.
     Binarios del módulo para contar las cabeceras range.
    
Detalle: 

La vulnerabilidad CVE-2011-3192 se localiza en el módulo de Apache mod_deflate que se emplea para la compresión del contenido antes de devolverse al cliente, se instala por defecto en Apache.

El exploit para esta vulnerabilidad basa su funcionamiento en la manipulación de la cabecera Range para, mediante la realización de múltiples peticiones, agotar los recursos. La modificación de esta cabecera provoca que el servidor produzca varias respuestas que son fragmentos de un mismo recurso, en resumen, se trata de la realización de peticiones manipuladas de rangos de bytes de un mismo recurso para descargar. La petición se realiza con la cabecera "Accept-Enconding: gzip" de esa forma el servidor vulnerable intenta comprimir cada fragmento y de ese modo se consume memoria y procesador, provocando que el proceso deje de responder.

Impacto:

La vulnerabilidade pueden producir:

  • La caída o cuelgue del servidor.