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

Badacze z firm Netflix i Google ujawnili w różnych implementacjach protokołu HTTP/2 zidentyfikowano osiem podatności, które mogą prowadzić do odmowy usługi poprzez wysyłanie odpowiednio sformatowanych strumieni zapytań sieciowych. Problemy te w różnym stopniu dotyczą większości serwerów HTTP obsługujących HTTP/2 i prowadzą do wyczerpania dostępnej pamięci roboczej lub generowania zbyt dużego obciążenia procesora. Aktualizacje naprawiające te luki są już dostępne w nginx 1.16.1/1.17.3 i H2O 2.2.6, ale na razie niedostępne dla Apache httpd i innych produktów.

Problemy są wynikiem wprowadzonych w protokole HTTP/2 komplikacji związanych z użyciem struktur binarnych, systemem ograniczania strumieni danych w ramach połączeń, mechanizmem priorytetyzacji strumieni oraz obecnością komunikatów kontrolnych podobnych do ICMP, działających na poziomie połączenia HTTP/2 (na przykład operacji ping, resetu i konfiguracji strumienia). Wiele implementacji nie ograniczało odpowiednio strumienia komunikatów kontrolnych, nieefektywnie organizowało działanie kolejki priorytetów podczas przetwarzania zapytań lub stosowało nieoptymalne realizacje algorytmów sterowania przepływem.

Większość zidentyfikowanych metod ataku sprowadza się do wysyłania do serwera określonych zapytań, które generują dużą liczbę odpowiedzi. Jeśli klient nie odczytuje danych z gniazda i nie zrywa połączenia, kolejka buforowania odpowiedzi po stronie serwera nieustannie się zapełnia. Takie zachowanie generuje obciążenie systemu zarządzania kolejkami procesów sieciowych i w zależności od specyfiki implementacji prowadzi do wyczerpania dostępnej pamięci lub zasobów CPU.

Zidentyfikowane luki:

  • CVE-2019-9511 (Data Dribble) – atakujący żąda dużej ilości danych w kilku strumieniach, manipulując rozmiarem okna przesuwnego i priorytetem strumienia, zmuszając serwer do umieszczania danych w kolejce w blokach po 1 bajcie;
  • CVE-2019-9512 (Ping Flood) – atakujący ciągle wysyła wiadomości ping przez połączenie HTTP/2, inicjując wypełnianie wewnętrznej kolejki wysłanych odpowiedzi po drugiej stronie;
  • CVE-2019-9513 (Resource Loop) – atakujący tworzy kilka strumieni żądań i ciągle zmienia priorytety strumieni, powodując mieszanie się drzewa priorytetów;
  • CVE-2019-9514 (Reset Flood) – atakujący tworzy kilka strumieni
    i wysyła przez każdy strumień niepoprawne żądanie, powodując wysyłanie przez serwer ramek RST_STREAM, ale ich nie przyjmuje do wypełnienia kolejki odpowiedzi;
  • CVE-2019-9515 (Settings Flood) – atakujący wysyła strumień pustych ramek „SETTINGS”, na które serwer musi potwierdzić odebranie każdego żądania;
  • CVE-2019-9516 (0-Length Headers Leak) – atakujący wysyła strumień nagłówków o zerowej nazwie i zerowej wartości, a serwer przydziela bufor w pamięci dla każdego nagłówka i nie zwalnia go aż do zakończenia sesji;
  • CVE-2019-9517 (Internal Data Buffering) – atakujący otwiera
    przesuwne okno HTTP/2 do wysyłania danych przez serwer bez ograniczeń, jednocześnie utrzymując okno TCP zamknięte, co uniemożliwia faktyczne zapisanie danych w gnieździe. Następnie atakujący wysyła żądania wymagające dużej odpowiedzi;
  • CVE-2019-9518 (Empty Frames Flood) – atakujący wysyła strumień ramek typu DATA, HEADERS, CONTINUATION lub PUSH_PROMISE, ale z pustą treścią i bez flagi zakończenia strumienia. Serwer traci czas na przetwarzanie każdej ramki, nieproporcjonalnie do pasma, które atakujący wykorzystuje.

Źródło: opennet.ru

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster