Aktualizacja nginx 1.31.0 z usunięciem luki RCE, wykorzystywanej przez zapytanie HTTP

Wydano wydanie głównej gałęzi nginx 1.31.0, w ramach którego kontynuowany jest rozwój nowych możliwości, a także wydanie równocześnie wspieranej stabilnej gałęzi nginx 1.30.1, do której wprowadzane są tylko zmiany związane z usuwaniem poważnych błędów i luk w zabezpieczeniach. W aktualizacjach usunięto 6 luk, z których najniebezpieczniejsza pozwala na zdalne wykonanie kodu poprzez wysłanie specjalnie sformułowanego żądania HTTP. Na chwilę obecną poprawki dla angie i freenginx nie zostały opublikowane.

Luka (CVE-2026-42945), której przypisano krytyczny poziom niebezpieczeństwa, spowodowana jest przepełnieniem bufora w module ngx_http_rewrite_module, co może być wykorzystywane do wykonania kodu z uprawnieniami procesu roboczego nginx poprzez wysłanie żądania HTTP ze specjalnie sformułowanym URI. Problem występuje w konfiguracjach z dyrektywą „rewrite”, w której w wyrażeniach regularnych używane są podstawienia maskującego przy użyciu nienazwanych zmiennych (np. $1 i $2), pod warunkiem, że w ciągu zastępującym występuje znak „?”. Przykład podatnej konstrukcji: rewrite ^/users/([0-9]+)/profile/(.*)$ /profile.php?id=$1&tab=$2 last;

Wyrażenia z nazwanymi podstawieniami nie są podatne na lukę. Na przykład luka nie dotyczy konstrukcji: rewrite ^/users/(?<user_id>[0-9]+)/profile/(?<section>.*)$ /profile.php?id=$user_id&tab=$section last;

Luka występuje od wersji 0.6.27, wydanej w marcu 2008 roku. Przyczyną pojawienia się luki było to, że bufor przydzielano z założeniem, że będą w nim zapisane nieescapowane dane, a faktycznie kopiowane były dane po wykonaniu eskapowania znaków specjalnych, których rozmiar był większy, ponieważ każdy znak „+”, „%” i „&” był kodowany nie jednym, a trzema bajtami. Takie rozbieżności powstawały, ponieważ w przypadku obecności w regule rewrite znaku „?” ustawiano flagę „e->is_args”, przy której włączało się eskapowanie, ale przydzielanie bufora następowało przy zresetowanej flagze, w której eskapowanie nie było stosowane.

Inne podatności:

  • CVE-2026-42926 — możliwość podstawienia danych atakującego w żądaniu proxy podczas używania dyrektywy „proxy_set_body” i odwoływania się do backendu przez HTTP/2 (proxy_http_version=2).
  • CVE-2026-40701 — dostęp do pamięci po jej zwolnieniu (use-after-free) w module ngx_http_ssl_module, występujący podczas przetwarzania odpowiedzi z serwera DNS w konfiguracjach z dyrektywą „ssl_ocsp”.
  • CVE-2026-42946 — odczyt z obszaru poza buforem w modułach ngx_http_uwsgi_module i ngx_http_scgi_module, występujący podczas przetwarzania specjalnie sformatowanej odpowiedzi. Problem może prowadzić do wycieku zawartości pamięci procesu roboczego lub jego awaryjnego zakończenia.
  • CVE-2026-42934 — odczyt z obszaru poza buforem w procesie roboczym, występujący podczas przetwarzania odpowiedzi z dekodowaniem z kodowania UTF-8 przy użyciu dyrektywy „charset_map”. Problem może prowadzić do wycieku zawartości pamięci procesu roboczego lub jego awaryjnego zakończenia.
  • CVE-2026-40460 — podatność w realizacji protokołu HTTP/3, umożliwiająca spoofing adresy IP w celu obejścia autoryzacji lub ograniczeń.

Ulepszenia dodane w wydaniu nginx 1.31.0:

  • Do zestawu dodano moduł ngx_http_tunnel_module, realizujący możliwość pracy w trybie proxy („forward proxy”), przekierowujący żądania do innego serwera podczas połączenia klienta metodą HTTP/1.1 CONNECT. Możliwe jest skonfigurowanie autoryzacji dostępu do proxy, używając dyrektyw „auth_basic”, „satisfy” i „auth_delay”.
  • W bloku „upstream” dodano dyrektywę „least_time”, włączającą metodę równoważenia obciążenia z przekazaniem żądania serwera z najmniejszym średnim czasem odpowiedzi i najmniejszą liczbą aktywnych połączeń.
  • W module „stream_proxy” dodano dyrektywę „proxy_ssl_alpn” do określenia listy protokołów dozwolonych w rozszerzeniu ALPN podczas łączenia z serwerem proxy. Na przykład: „proxy_ssl_alpn h2 http/1.1”.
  • Zapewniono odrzucenie żądań w protokołach HTTP/2 i HTTP/3, zawierających nagłówki „Connection”, „Proxy-Connection”, „Keep-Alive”, „Transfer-Encoding”, „Upgrade”.
  • W module ngx_http_dav_module zapewniono odrzucenie żądań COPY i MOVE z powtarzającymi się źródłem i celem zasobu lub zagnieżdżonymi kolekcjami.
  • Poziom logowania błędów SSL „invalid alert”, „record layer failure” i „SSL alert number N” obniżono z „crit” do „info”.
  • Do skryptu configure dodano parametr „—without-http_upstream_sticky_module” w celu wyłączenia kompilacji modułu http_upstream_sticky_module (parametr „—without-http_upstream_sticky” jest już przestarzały).

Uzupełnienie: Dostępny exploit dla luki RCE w ngx_http_rewrite_module.

Ź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