W różnych implementacjach protokołu HTTP/2 zidentyfikowano 8 luk DoS

Naukowcy z Netfliksa i Google'a ujawnił W różnych implementacjach protokołu HTTP/2 występuje osiem luk, które mogą spowodować odmowę usługi poprzez wysłanie strumienia żądań sieciowych w określony sposób. Problem dotyczy w pewnym stopniu większości serwerów HTTP obsługujących protokół HTTP/2 i powoduje, że procesowi roboczemu kończy się pamięć lub powoduje zbyt duże obciążenie procesora. Aktualizacje eliminujące luki są już prezentowane w nginx 1.16.1/1.17.3 и H2O 2.2.6, ale teraz niedostępne dla Apache httpd i inne produkty.

Problemy wynikały z komplikacji wprowadzonych do protokołu HTTP/2 związanych z wykorzystaniem struktur binarnych, systemem ograniczania przepływów danych w ramach połączeń, mechanizmem priorytetyzacji przepływów oraz obecnością komunikatów kontrolnych typu ICMP działających na połączeniu HTTP/2 poziom (na przykład ustawienia pingu, resetowania i przepływu). Wiele implementacji nie ograniczało odpowiednio przepływu komunikatów sterujących, nie zarządzało efektywnie kolejką priorytetową podczas przetwarzania żądań, czy stosowało nieoptymalne implementacje algorytmów kontroli przepływu.

Większość zidentyfikowanych metod ataku sprowadza się do wysyłania określonych żądań do serwera, co prowadzi do wygenerowania dużej liczby odpowiedzi. Jeśli klient nie odczyta danych z gniazda i nie zamknie połączenia, kolejka buforowania odpowiedzi po stronie serwera stale się zapełnia. Takie zachowanie powoduje obciążenie systemu zarządzania kolejkami w celu przetwarzania połączeń sieciowych i, w zależności od funkcji implementacji, prowadzi do wyczerpania dostępnej pamięci lub zasobów procesora.

Zidentyfikowane podatności:

  • CVE-2019-9511 (Data Drybble) – osoba atakująca żąda dużej ilości danych do wielu wątków, manipulując rozmiarem okna przesuwnego i priorytetem wątku, zmuszając serwer do kolejkowania danych w 1-bajtowych blokach;
  • CVE-2019-9512 (Ping Flood) — osoba atakująca stale zatruwa wiadomości ping za pośrednictwem połączenia HTTP/2, powodując zalewanie wewnętrznej kolejki wysłanych odpowiedzi po drugiej stronie;
  • CVE-2019-9513 (pętla zasobów) — osoba atakująca tworzy wiele wątków żądań i stale zmienia priorytety wątków, powodując przetasowanie drzewa priorytetów;
  • CVE-2019-9514 (Reset Flood) – osoba atakująca tworzy wiele wątków
    i wysyła nieprawidłowe żądanie przez każdy wątek, powodując, że serwer wysyła ramki RST_STREAM, ale nie akceptuje ich w celu wypełnienia kolejki odpowiedzi;

  • CVE-2019-9515 (Settings Flood) – atakujący wysyła strumień pustych ramek „SETTINGS”, w odpowiedzi na co serwer musi potwierdzić otrzymanie każdego żądania;
  • CVE-2019-9516 (0-Length Headers Leak) – osoba atakująca wysyła strumień nagłówków o nazwie null i wartości null, a serwer przydziela bufor w pamięci do przechowywania każdego nagłówka i nie zwalnia go do zakończenia sesji ;
  • CVE-2019-9517 (wewnętrzne buforowanie danych) – otwiera się atakujący
    Przesuwane okno HTTP/2 umożliwiające serwerowi wysyłanie danych bez ograniczeń, ale zamykające okno TCP, uniemożliwiające faktyczne zapisanie danych w gnieździe. Następnie atakujący wysyła żądania wymagające dużej liczby odpowiedzi;

  • CVE-2019-9518 (Zalew pustych ramek) — osoba atakująca wysyła strumień ramek typu DATA, HEADERS, CONTINUATION lub PUSH_PROMISE, ale z pustym ładunkiem i bez flagi zakończenia przepływu. Serwer poświęca czas na przetwarzanie każdej ramki, nieproporcjonalny do przepustowości wykorzystywanej przez osobę atakującą.

Źródło: opennet.ru

Dodaj komentarz