10:21
25/8/2011

Błąd w przetwarzaniu nagłówka Range obecny w serwerach Apache 2.2.* pozwala na zdalne unieruchomienie pracy webserwera (atak DoS). Atakujący nie musi posiadać wielkiego botnetu, wystarczy jeden komputer i poniższy skrypt.

Exploit na Apache 2.2.* – Apache Killer

ApacheKiller

ApacheKiller. Exploit na Apache nazywa się tak jak aplikacja na iPhone :)

Skrypt z exploitem został opublikowany na liście Full Disclosure przez Kingcope’a. Atak polega na wysyłaniu do serwera zapytań z nagłówkiem Range przyjmującym więcej niż jeden zakres bajtów. Nagłówek Range pozwala pobrać konkretne wycinki pliku i służy m.in. do wznowienia przerwanych transferów danych. Jeśli jednak jednocześnie zdefiniuje się kilka nieposortowanych zakresów, żądanie przetwarzane jest w nieoptymalny sposób przez a_byternage_filter() — dla każdego zakresu tworzony jest odrębny bucket, co powoduje wyczerpanie dostępnej pamięci.

Jak na razie brak oficjalnego patcha, ale istnieje obejście problemu (poza oczywiście wykrywaniem i ubijaniem żądań tego typu na IPS/IDS/WAF). Pomóc może odpowiednia konfiguracja mod_rewrite, zabraniające więcej niż jednego zakresu dla nagłówka Range.

RewriteEngine On
RewriteCond %{REQUEST_METHOD} ^(HEAD|GET) [NC]
RewriteCond %{HTTP:Range} ([0-9]*-[0-9]*)(\s*,\s*[0-9]*-[0-9]*)+
RewriteRule .* - [F]

Co ciekawe, zastrzeżenia do implementacji nagłówka Range już w 2007 roku miał …Michał Zalewski. Przy czym Michał zwracał wtedy uwagę na możliwość generowania olbrzymiej ilości danych (bandwidth amplification), a Kingcope wymierzył swój atak w pamięć serwera (memory corruption).

Aktualizacja 22:54
Apache opublikowało oficjalne oświadczenie zawierające opisy kilku obejść problemu.

Przeczytaj także:


30 komentarzy

Dodaj komentarz
  1. przecież to news sprzed kilku dni…

  2. memory corruption? fajnie by było

  3. Dziwię się, że dopiero teraz stało się to publiczne – o tym exploicie było wiadomo już od 2.2.9.

    Ciekawostką jest to, że niektórzy administratorzy chcąc “zwiększyć wydajność” apacza zwiększają ilość workerów. W wielu przypadkach potrafią zwiększyć go nawet do 100, mając pamięci na raptem 25.

    P.S.
    To ile “wakacyjnych hostinków” stoi na apache? ;-)

  4. Pozostaje czekać na patcha bo puki co…

    Reading state information… Done
    0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

    …nic nie widać ;]

  5. Niebezpiecznik działa. Skrypt najwyraźniej nie ;-)

  6. kolo mozesz zastosowac workaroud ktore podał autor, ale pamietac trzeba ze te ustawiania mod_rewirte sa oddzielna dla kazdej wirtualki z osobna.

    • Żaden problem, panel administracyjny na hostingu mam swojego autorstwa, dodać parę linijek do każdej nowej i już istniejącej “vhostki” nie będzie żadnym problemem ;]

  7. a o slowloris rsnake’a nie wspominacie?

  8. […] Kamil Rojewski dnia sie.25, 2011, w kategorii sieć Niebezpeicznik poinformował o wykryciu dziury w serwerze Apache 2.2 polegającym na spreparowaniu nagłówka Range zapytania, […]

  9. Lepsze rozwiązanie z mod_headers:

    SetEnvIf Range (,[^,]*){5,} bad-range=1
    RequestHeader unset Range env=bad-range

    Wystarczy wrzucić do httpd.conf’a -wyłączy NIEPRAWIDŁOWE Range globalnie dla wszystkich virtual hostów (dużo łatwiejsze do wdrożenia niż regułka rewrite).

  10. @tim

    Przetestowane na virtualce i sposob autora smiga, niestety Twój nie. Testowałeś to ? Wystarczyło u ciebie:

    SetEnvIf Range (,[^,]*){5,} bad-range=1
    RequestHeader unset Range env=bad-range

    ?

    • Ok kwestia rozwiązana. Działa doskonale, fakt, lepsze to niż wklepywanie rewritea do 150 vhostów :)

    • To wymaga włączonego mod_headers i śmiga dobrze – po aktywowaniu nie udało mi się zamieszczonym na stronie skryptem zabić apachego.

  11. portaudit -Fda nic nie pokazuje. Albo nie jest to takie groźne, ale zespół od security jeszcze śpi…

  12. Kilka oficjalnych tymczasowych rozwiązań:

    http://article.gmane.org/gmane.comp.apache.announce/58

  13. No dobrze, a czy można to wyśledzić zerkając w logi?

    • Z difolta nie, chyba ze logujesz naglowki. W linku Borysa masz:

      Option 1: (Apache 2.0 and 2.2)

      # Drop the Range header when more than 5 ranges.
      # CVE-2011-3192
      SetEnvIf Range (,.*?){5,} bad-range=1
      RequestHeader unset Range env=bad-range

      # optional logging.
      CustomLog logs/range-CVE-2011-3192.log common env=bad-range

  14. Czyli zbieramy listę hostingów i teoretycznie nawet nie trzeba się chować za proxy, czy jakimś VPNem ;)

  15. snortowy team tez nie spi :)
    http://vrt-blog.snort.org/2011/08/this-is-why-we-have-nice-things.html

  16. Chyba nie wszystkie wersje są podatne….

    Host does not seem vulnerable

    próbowałem na 2.2.3, 2.2.19, 2.0.63, 2.3.13,
    tylko na ostatnim udało się przeprowadzić atak…

  17. Niestety jednak chyba wszystkie, skrypt ma problem z vhostami. ;/

  18. No dobra ale kto dzisiaj jest na tyle pro że używa apache?=] Ciekawi mnie jakie bugi są np nginx albo litle speed

  19. Karol! LOL! Jesteś PRO!

  20. a kto używa cherokee i dlaczego nie? ;)

  21. jest już łatka

  22. […] ma problemy, przyczyną mogą być ataki DoS (nie DDoS) na web serwer — niedawno pisaliśmy o Apache Killerze, a kilka miesięcy wcześniej o ataku […]

  23. Podawanie danych osobowych osób które nie jako pomagają na
    tej stronie mija się z celem. – nie ważne czy jest sławny, czy nie,
    ale internet to nie gąbka. Niech sam decyduje czy woli być sławny i
    narażać się na nadmierne zainteresowanie, czy zostać w ukryciu jak
    większość szaraków.

Twój komentarz

Zamieszczając komentarz akceptujesz regulamin dodawania komentarzy. Przez moderację nie przejdą: wycieczki osobiste, komentarze nie na temat, wulgaryzmy.

RSS dla komentarzy: