|
Сформирован выпуск основной ветки 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" объявлен устаревшим).
|