NGINX: Luki w implementacji HTTP/2
02 Aug 2019
cve dos http nginx security vulnerabilities
W maju 2019 r. inżynierowie Netflixa odkryli szereg luk bezpieczeństwa w kilku implementacjach HTTP/2. Zostały one zgłoszone każdemu z zainteresowanych dostawców i opiekunów. NGINX był podatny na trzy wektory ataku, jak opisano szczegółowo w następujących CVE:
- CVE-2019-9511 (Data dribble)
- CVE-2019-9513 (Resource loop)
- CVE-2019-9516 (Zero‑length headers leak)
Każda z tych podatności ma trzy cechy wspólne:
- dotyczy NGINX w wersji ⩽ 1.16.1 (starsze rewizje)
- udane wykorzystanie wymaga włączenia obsługi protokołu HTTP/2 (ngx_http_v2_module +
listen ... http2;
) po stronie NGINX - w konsekwencji może prowadzić do ataku typu DoS (jednak nie ma możliwości wykonania kodu ani podniesienia uprawnień użytkownika)
Od 2 września 2019 r. najnowszą obsługiwaną wersją jest:
-
1.16.1 (gałąź „stabilna”; otrzymuje tylko aktualizacje krytyczne)
Przykład wykorzystania podatności: Nginx version is disclosed in HTTP response.
Rozwiązania #
- aktualizacja NGINX, np. dla FreeBSD do wersji 1.16.1-0.2, w której podatności zostały wyeliminowane (508898 + 1.16.1-0.2)
- dodatkowo wyłączenie emitowania wersji NGINX na stronach błędów i w polu nagłówka odpowiedzi za pomocą
server_tokens off;
CVE-2019-9511 (HTTP/2 Denial of Service Advisory) #
Podatność ta związana jest z implementacją HTTP/2 i polega na takim manipulowaniu rozmiarem okna oraz priorytetami wykorzystywanych strumieni, aby zmusić serwer do kolejkowania danych w bardzo małych porcjach, co może skutkować odmową usługi (DoS).
Krótko mówiąc, atakujący żąda dużej ilości danych z określonego zasobu w wielu strumieniach, co może nadmiernie wysycać zasoby takie jak CPU i pamięć.
Więcej informacji:
- Netflix Security Biueletins (2019-002)
- Nginx: Excessive CPU usage in HTTP/2 with small window updates (CVE-2019-9511)
CVE-2019-9513 + CVE-2019-9516 #
Podatność związana z nieprawidłową weryfikacją danych wejściowych podczas przetwarzania żądań HTTP/2. Atakujący może wysłać specjalnie spreparowane żądanie do serwera i w konsekwencji zużyć wszystkie dostępne zasoby CPU w wyniku przeprowadzając atak typu DoS.
Więcej informacji: