Уязвимость в nginx (CVE-2026-42945): переполнение буфера в модуле rewrite
Что случилось
В веб-сервере nginx выявлена опасная уязвимость CVE-2026-42945 в модуле ngx_http_rewrite_module. Она проявляется при строго определённой комбинации директив в конфигурационном файле: когда директива rewrite используется вместе с if, set или ещё одним rewrite, а в строке замены присутствуют безымянные группы захвата регулярных выражений PCRE — например, $1 или $2 — в сочетании со знаком вопроса ?.
Удалённый неаутентифицированный атакующий может отправить специально сформированный HTTP-запрос и спровоцировать переполнение буфера в куче рабочего процесса nginx. В типичном сценарии это приводит к аварийному завершению процесса и его автоматическому перезапуску. При этом на системах с отключённой рандомизацией адресного пространства (ASLR) или при условии её успешного обхода существует теоретическая возможность удалённого выполнения произвольного кода.
Кого касается
Проблема затрагивает всех владельцев серверов, где работает NGINX Open Source или NGINX Plus с активным модулем rewrite и описанной выше конструкцией в конфигурации. Наибольший риск у сайтов со сложными правилами маршрутизации и перезаписи URL, где в строке подстановки совмещаются переменные вида $1, $2 и символ ?. Следует учитывать, что версии nginx, достигшие статуса End of Technical Support (EoTS), больше не получают обновлений безопасности и остаются уязвимыми.
Что делать
- Обновите пакет. Основное решение — установить актуальную версию nginx через стандартный пакетный менеджер. Для Debian и Ubuntu выполните
apt update && apt upgrade nginx; для дистрибутивов на базе RHEL —dnf update nginxилиyum update nginx. - Проверьте версию. После обновления убедитесь, что используется пропатченный релиз, с помощью команды
nginx -v. Сверьтесь с официальным бюллетенем безопасности, чтобы версия входила в число исправленных. - Временный обходной путь. Если обновление невозможно прямо сейчас, внимательно проверьте конфигурационные файлы в каталоге
/etc/nginx/. Найдите цепочки директив, гдеrewriteсочетается сifилиset, применяются группы захвата$1/$2и в строке замены есть?. По возможности измените логику: уберите вопросительный знак из подстановки, разделите правило на несколько простых директив или замените безымянные группы на именованные, которые данной уязвимости не подвержены. - Включите ASLR. Проверьте статус рандомизации адресного пространства командой
cat /proc/sys/kernel/randomize_va_space. Значение должно быть1или2. Это не закрывает саму уязвимость, но значительно усложняет эксплуатацию вплоть до выполнения кода. - Перезапустите службу. После установки обновления или правки конфигурации проверьте корректность конфигурации командой
nginx -t, затем примените изменения командойsystemctl restart nginx. Проверьте статус:systemctl status nginx.