Уязвимость (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
