
13 мая была исправлена уязвимость в популярном для нагруженных систем веб-сервере nginx — CVE-2026-42945, которая потенциально может привести к удаленному выполнению кода (RCE). Ошибка появилась в коде еще 18 лет назад, в далёком 2008 году, начиная с версии 0.6.27.
Для успешной эксплуатации уязвимости в конфигурационном файле сервера должна присутствовать специфическая комбинация директив. Хотя она встречается не у каждого администратора, определенные риски существуют.
Существенные детали:
- Сначала идет директива
rewrite, где первый аргумент представляет собой регулярное выражение с выделяемым параметром в круглых скобках, который заменяется на путь, содержащий знак вопроса. - Затем используется директива
set(вместо нее также подойдет второйrewriteили условиеif), которая задействует выделенный параметр из исходного перезаписанного пути (в данном случае —$1).
Механизм возникновения уязвимости выглядит следующим образом:
- Первая директива
rewriteпри встрече со знаком вопроса устанавливает внутренний флагis_args. Он означает, что система начинает сбор GET-параметров для измененного URL и требует обязательного экранирования. Суть бага заключается в том, что сервер забывает сбросить этот флаг по завершении своей работы. - Последующая директива
setпри формировании значения переменной ошибочно применяет ранее установленный флагis_argsи записывает в переменную экранированную версию выделенного параметра$1. Проблема усугубляется тем, что буфер для переменной выделяется заранее, еще до выполнения подстановок, а его размер рассчитывается исходя из состоянияis_args = 0. В результате экранированное значение оказывается длиннее выделенного буфера, что приводит к переполнению памяти и записи данных в соседние структуры сервера. Чтобы спровоцировать баг, достаточно отправить запрос со специальными символами (например, знаками «плюс»), подлежащими экранированию в месте захвата параметра регулярного выражения.
Если на хосте отсутствует рандомизация адресного пространства (ALSR), данную брешь можно использовать для удаленного выполнения кода с привилегиями рабочего процесса nginx. На данный момент существует демонстрационный PoC (выполненный в условиях изолированной песочницы).
Уязвимость была оперативно устранена в стабильной ветке nginx 1.30.1, а также в новой девелоперской версии 1.31.0.
Примечательно, что 14 лет назад, в 2012 году, разработчики уже сталкивались с похожей ошибкой и исправляли аналогичный сбой в соседнем участке кода.
Компания F5 опубликовала официальные рекомендации по временной нейтрализации угрозы на случай, если быстрое обновление nginx невозможно. В качестве обходного пути предлагается заменить неименованные захваченные параметры на именованные — по заверениям специалистов, в таком случае уязвимость не проявляется.
Первоначальная информация об опасной ошибке была предоставлена исследователем Zhenpeng (Leo) Lin из компании DepthFirst. Кроме того, он сообщил о ряде других уязвимостей, которые также были успешно исправлены разработчиками:
- CVE-2026-40701 — уязвимость типа use-after-free при совместном использовании директив
ssl_verify_clientиssl_ocsp(по предварительным данным, вектор атаки не ведет к RCE). - CVE-2026-42934 — ошибка чтения за пределами буфера в парсере UTF-8 при определенных условиях, способная вызвать небольшую утечку данных или аварийное завершение рабочего процесса.
- CVE-2026-42946 — избыточное выделение памяти и чтение за границами буфера при использовании модулей SCGI и uwsgi. Проблема проявляется при наличии скомпрометированного бэкенда (upstream) через указанные протоколы либо в случае проведения атаки типа MitM на канал связи с бэкендом, что может привести к утечке данных из памяти nginx или падению процесса.






