Dwadzieścia lat luk w Nginx: rift każe łatać już dziś!
Dwadzieścia lat luk w Nginx: NGINX Rift zmusza do łatania już dziś
Stare kody to zawsze ryzyko. Ale co jeśli taka dziura czai się w najpopularniejszym serwerze WWW przez prawie dwie dekady?
F5 wypuściło poprawki dla czterech luk w Nginx. Najgroźniejsza z nich, CVE-2026-42945 zwana NGINX Rift, odkryta przez depthfirst, każe każdemu adminowi ruszyć z aktualizacjami.
Idealna burza: stary kod, świeże problemy
Co czyni tę lukę tak groźną? Rozbijmy to na części.
Sama luka: Przepełnienie bufora heap w module rewrite. Siedzi tam od wersji 0.6.27 z 2008 roku. To czasy bez Dockera, bez smartfonów w kieszeniach i gdy Apache jeszcze rządził.
Jak zaatakować: Wystarczy jeden spreparowany request HTTP. Bez haseł, bez phishingu. Prosty strzał i po sprawie.
Skutki: Bez ASLR to pełna egzekucja kodu zdalnego. Z ASLR – pewny DoS przez ciągłe restarty workerów.
Ocena CVSS: 9.2, czyli krytyczna. Blisko maksimum.
Dlaczego to takie ważne?
Jak to przetrwało tyle lat? Nginx w module rewrite używa PCRE do dopasowywania URL-i. Gdy reguły z unnamed captures ($1, $2) idą za kolejnym rewrite, if czy set, kod wyjdzie poza pamięć heap. Klasyczne przepełnienie, które powinno paść na reviewie.
To pokazuje: nawet topowe projekty open source mają swoje trupy w szafie. Nginx stoi na milionach serwerów. Stary błąd = wielki zasięg.
Kto musi działać natychmiast?
Użytkownicy NGINX Plus: Wersje R32–R36? Łataj do R32 P6 lub R36 P4.
Nginx Open Source: Od 1.0.0 do 1.30.0 – podatne. Przejdź na 1.30.1 lub 1.31.0.
Stare relikty: Wersje 0.6.27–0.9.7? Bez patchy. Czas na pełną migrację.
Nie możesz załatać od razu? Tymczasowy fix
W trakcie freeze'a lub z legacy? Zmień unnamed captures na named w rewrite.
Zamiast $1 używaj (?<nazwa>...) i $nazwa. To blokuje ścieżkę ataku, ale nie leczy rdzenia.
Przykład:
# Ryzykowne
rewrite ^/user/([0-9]+)$ /profile?id=$1 last;
# Tymczasowo bezpieczne
rewrite ^/user/(?<id>[0-9]+)$ /profile?id=$id last;
Plaster, nie lek. Łataj ASAP.
Pozostałe trzy CVE z paczki
Oprócz Rift F5 załatwiło:
- CVE-2026-42946 (CVSS 8.3 Wysoka): Nadmierne alokacje pamięci w SCGI/uWSGI – DoS w proxy.
- CVE-2026-40701 (CVSS 6.3 Średnia): Use-after-free w SSL przy ssl_verify_client i ssl_ocsp.
- CVE-2026-42934 (CVSS 4.8 Średnia): Odczyt poza granicami w module charset.
Nie tak pilne, ale ogarnij przy okazji.
Lekcje dla bezpieczeństwa infrastruktury
Ta historia przypomina:
- Popularność nie chroni. Nginx wszędzie, a bug przeżył 18 lat.
- Starość to nie zaleta. Stary kod gromadzi błędy.
- Bezpieczeństwo zależy od najsłabszego ogniwa. Jeden niezałatawany Nginx psuje całość.
- Monitoruj. Nawet z ASLR DoS działa od razu.
Podsumowanie
Masz Nginx? Te patche to priorytet numer jeden. Starość luki, prostota ataku i wysoki CVSS mówią: działaj.
Testuj w stagingu, ale w produkcji nie czekaj. Ryzyko dziury bije ryzyko update'u stabilnego Nginx.
A przy okazji sprawdź konfiguracje rewrite i wersje na serwerach. Czas na porządki.
Bądź bezpieczny.