Формирована версия основного релиза 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/([0-9]+)/profile/(.*)$ /profile.php?id=$1&tab=$2 last;
Выражения с именованными подстановками не подвержены данной уязвимости. Например, конструкция: rewrite ^/users/(?[0-9]+)/profile/(?
Уязвимость присутствует, начиная с версии 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
