serwery Apache podatne na atak DoS

Data publikacji: 25/08/2011, CERT Polska


Serwery Apache w wersji 1.3/2.x są podatne na łatwy do przeprowadzenia atak typu DoS (CVE-2011-3192).
Problem leży w złej obsłudze nagłówka Range w żądaniach HTTP prowadzącej do zużycia całej pamięci systemu.

W sieci krąży skrypt perlowy umożliwiający łatwe przeprowadzenie ataku. Jednocześnie trzeba zaprzeczyć niektórym plotkom krążącym po Sieci, że problem związany jest z błędami w module mod_deflate. Ów moduł nie ma wpływu na opisywaną słabość, gdyż problem dotyczy nagłówka Range, a nie kompresji odpowiedzi HTTP.
Do czasu pojawienia się oficjalnych poprawek, zalecamy użycie jednej z następujących metod powstrzymujących atak:

  1. użycie modułu mod_rangecnt, który ogranicza liczbę żadanych obszarów w nagłówku Range do 5

    Instalacja modułu jest prosta i sprowadza się do następujących kroków:

    $ wget http://people.apache.org/~dirkx/mod_rangecnt.c
    $ apxs2 -c mod_rangecnt.c
    $ sudo apxs2 -i -a mod_rangecnt.la
    $ sudo /etc/init.d/apache2 restart

    Narzędzie apxs2 dostarczane jest w debianie w pakiecie apache2-prefork-dev lub apache2-threaded-dev, a w redhatach w pakiecie httpd-devel.

  2. użycie modułu mod_rewrite do ograniczenia liczby żądanych jednocześnie obszarów:

    RewriteCond %{HTTP:range} ^bytes=[^,]+(,[^,]+){0,4}$
    RewriteRule .* - [F]
  3. użycie dyrektywy
    RequestHeader unset Range

    modułu mod_headers do całkowitego wyłączenia obsługi nagłówków Range. Jednak to może spowodować problemy w niektórych klientach WWW jak na przykład e-readery plików PDF.

  4. ograniczenie wielkości żądania HTTP do kilkuset bajtów poprzez zastosowanie dyrektywy LimitRequestFieldSize

    LimitRequestFieldSize 200

    Jednak takie ograniczenie może spowodować problemy z innymi nagłówkami w żądaniach HTTP (np Cookie)

Link do oficjalnego advisory umieszczone na liście httpd-announce oraz szczegółowa analiza zagrożenia wraz z regułami do modułu mod_security.