top of page

CVE-2024-27983 Node.js

Writer: Mateusz  KaczyńskiMateusz Kaczyński

Updated: Apr 30, 2024



 destroyed server room



Article




Na samym początku zastosuję pewną metaforę która pomoże w wizualizacji luki

CVE-2024-27983.


Otóż wyobraź sobie serwer Node.js jako restaurację w której kelnerzy ( procesy HTTP/2 ) obsługują stoliki ( połączenia ) i przyjmują zamówienia ( żądania HTTP ). Kuchnia w tej restauracji ( silnik HTTP/2 ) przygotowuje jedzenie ( odpowiedzi HTTP ).


W tej restauracji ktoś podszywa się pod kelnera i wpuszcza do kuchni fałszywe zamówienia. Zamiast dań, które zamawiają klienci, kuchnia przygotowuje potrawy, których nikt nie chce. To przynosi straty.


Kontynuując tę metaforę, wyobraź sobie że kelnerzy w tej restauracji porozumiewają się za pomocą karteczek ( nagłówki HTTP ). Atakujący może spreparować karteczkę z fałszywym numerem stolika np.


  • Karteczka poprawna: Stolik nr.1, zupa pomidorowa

  • Karteczka spreparowana: Stolik nr.100, spaghetti

W efekcie kelner z karteczką szuka stolika nr. 100, który nie istnieje a przygotowana potrawa nie zostaje dostarczona do żadnego stolika.


Innym przykładem zamieszania w restauracji może być dostarczanie jedzenia do losowych klientów. Atak spowoduje okoliczność w której niektórzy zamawiający nie dostaną nic, bo ich potrawa trafiła do innego stolika.




process hacking description



Czym w rzeczywistości może być taka "spreparowana karteczka"?




Może to obejmować takie działania jak:


  • utworzenie nagłówka HTTP z nietypowymi polami lub wartościami, np. z nadmierną długością wartości co spowoduje przepełnienie bufora,

  • przygotowanie danych zawierających ciągi binarne lub tekstowe z wykorzystaniem sekwencji znaków trudnych do przetworzenia

  • nadużywanie funkcji protokołu czego przykładem jest manipulacja ustawieniami strumieni HTTP/2 w taki sposób aby zmusić serwer do rezerwacji zasobów na obsługę złośliwie skonstruowanych żądań, co z kolei może prowadzić do wyczerpania się zasobów.



Celem atakującego jest przeciążenie serwera i uniemożliwienie mu obsługi żądań użytkowników DoS ( "odmowa usługi" ), no i oczywiście kradzież danych użytkowników oraz dalsza eskalacja. Istnieje kilka rodzajów ataków DoS wykorzystujących sekwencje w HTTP/2:



  • atak typu "flood": wysłanie dużej liczby spreparowanych pakietów danych do serwera, aby go przeciążać,

  • atak typu "slowloris": wysłanie powoli spreparowanych pakietów danych do serwera, aby zużywać jego zasoby,

  • atak typu "amplification": wykorzystanie serwera jako pośrednika do wysyłania dużej ilości danych do innego serwera, aby go przeciążać.



Jeśli chodzi o CVE-2024-27983, problem wynika z możliwości pozostawienia pewnych danych w pamięci nghttp2 po resecie, kiedy do serwera wysłane zostaną nagłówki z ramką kontynuacji HTTP/2 ( CONTINUATION frame ), a następnie połączenie TCP zostanie gwałtownie zamknięte przez klienta. Spowodować to może wyścig, w którym destruktor Http2Session jest wywoływany podczas przetwarzania (i przechowywania w pamięci) ramek nagłówków, prowadząc do potencjalnej odmowy usługi.





REKOMENDACJE DLA CVE-2024-27983



  • Zaktualizuj Node.js. Sprawdź czy dany update obemuje to CVE

  • Zaktualizuj llhttp do wersji 9.2.1 dla Node.js wersji 18.x, 20.x oraz 21.x.

  • Zaktualizuj undici do wersji 6.11.1 dla Node.js w wersji 21.x i do wersji 5.28.4 dla wersji 18.x i 20.x.






LINKI:


Node blog:


Ubuntu Security:


CVE:


HTTP/2:


Bulletin nodejs-sec:





logo ubuntu

Comments


bottom of page