Актуализация на nginx 1.31.0, премахваща RCE-уязвимост, експлоатирана чрез HTTP-заявка

Разработен основен релиз на nginx 1.31.0, в рамките на който продължава развитието на нови възможности, а също така е публикувано паралелно поддържано стабилно издание на nginx 1.30.1, в което се извършват само промени, свързани с отстраняване на сериозни грешки и уязвимости. В обновленията са отстранени 6 уязвимости, като най-опасната сред тях позволява отдалечено изпълнение на код чрез изпращане на специално оформен HTTP-заявка. За angie и freenginx към момента на писане на новината поправки не са публикувани.

Уязвимост (CVE-2026-42945), на която е присвоен критичен риск, е предизвикана от препълване на буфера в модула ngx_http_rewrite_module, което може да бъде експлоатирано за изпълнение на код с правата на работния процес на nginx чрез изпращане на HTTP-заявка със специално оформен URI. Проблемът се проявява в конфигурации с директивата „rewrite“, където в регулярните изрази се използват подстановки с неименувани променливи (например, $1 и $2), при условие че в заместителния низ има символ „?“. Пример за уязвима конструкция: rewrite ^\/users\/(\d+)\/profile\/(.*)$ \/profile.php?id=$1&tab=$2 last;

Изразите с именовани подстановки не са податливи на уязвимостта. Например, уязвимостта не засяга конструкции: rewrite ^\/users\/(?\d+)\/profile\/(?

.*)$ \/profile.php?id=$user_id&tab=$section last;

Уязвимостта присъства от версия 0.6.27, пусната през март 2008 година. Причината за появата на уязвимостта е, че буферът е отделен с изчисление, че в него ще се запишат неекранирани данни, а всъщност се копират данни след изпълнението на екранирането на специални символи, размерите на които са по-големи, тъй като всеки символ „+“, „%“ и „&“ се кодира с не един, а с три байта. Такова разминаване възниква, защото когато в правилото rewrite присъства символ „?“, се задава флаг „e->is_args“, при който се включва екранирането, но буферът се разпределя при нулиран флаг, при който екранирането не се прилага.

Други уязвимости:

  • CVE-2026-42926 — възможност за подмяна на данни от атакуващия в проксирната заявка при използване на директивата „proxy_set_body“ и обръщение към бекенда през HTTP/2 (proxy_http_version=2).
  • CVE-2026-40701 — достъп до паметта след освобождаването й (use-after-free) в модула ngx_http_ssl_module, което възниква при обработка на отговори от DNS-сервер в конфигурации с директива „ssl_ocsp.“
  • CVE-2026-42946 — четене извън границите на буфера в модулите ngx_http_uwsgi_module и ngx_http_scgi_module, което възниква при обработка на специално оформен отговор. Проблемът може да доведе до изтичане на съдържанието на паметта на работния процес или до неговото аварийно завършване.
  • CVE-2026-42934 — четене извън границите на буфера в работния процес, което възниква при обработка на отговори с декодиране от UTF-8 при използване на директива „charset_map.“ Проблемът може да доведе до изтичане на съдържанието на паметта на работния процес или до неговото аварийно завършване.
  • CVE-2026-40460 — уязвимост в реализацията на протокола HTTP/3, допускаща спуфинг IP адреси за заобикаляне на авторизацията или ограниченията.

Подобрения, добавени в версия nginx 1.31.0:

  • Включен е модулът ngx_http_tunnel_module, реализиращ възможност за работа като прокси („forward proxy“), пренасочващ заявки към друг сървър при искане от клиента с метода HTTP/1.1 CONNECT. Възможна е настройка на удостоверяване за достъп до проксито с директивите „auth_basic“, „satisfy“ и „auth_delay.“
  • В блока „upstream“ добавена е директива „least_time“, включваща метод за балансиране на натоварването с предоставяне на заявка сървъра с най-малкото средно време за отговор и най-малко активни свързвания.
  • В модула „stream_proxy“ добавена е директива „proxy_ssl_alpn“ за задаване на списък с протоколи, допустими в разширението ALPN при свързване към проксируемия сървър. Например: „proxy_ssl_alpn h2 http/1.1.“
  • Осигурено е отхвърляне на заявки по протоколите HTTP/2 и HTTP/3, включващи заглавията „Connection“, „Proxy-Connection“, „Keep-Alive“, „Transfer-Encoding“, „Upgrade“.
  • В модула ngx_http_dav_module е осигурено отхвърляне на заявки COPY и MOVE с повтарящи се изходен и целеви ресурс или вложени колекции.
  • Нивото на логиране на грешки SSL „invalid alert“, „record layer failure“ и „SSL alert number N“ е понижено от „crit“ до „info.“
  • В скрипта configure добавен е параметър „—without-http_upstream_sticky_module“ за деактивиране на събиране на модула http_upstream_sticky_module (параметърът „—without-http_upstream_sticky“ е обявен за остарял).

Допълнение: Достъпен е експлоит за RCE-уязвимост в ngx_http_rewrite_module.

Източник: opennet.ru

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster