Обновление 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/([0-9]+)/profile/(.*)$ /profile.php?id=$1&tab=$2 last;

Выражения с именованными подстановками уязвимости не подвержены. Например, уязвимость не затрагивает конструкции:

   rewrite ^/users/(?‹user_id›[0-9]+)/profile/(?‹section›.*)$ /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» объявлен устаревшим).



Источник: http://www.opennet.ru/opennews/art.shtml? num=65442

© OpenNet