Новая уязвимость в rewrite-модуле nginx

good-penguin.png

Вскоре после обнаружения 18-летнего потенциального RCE было обнаружено ещё одно, CVE-2026–9256, на этот раз просуществовавшее ещё дольше — 21 год, начиная с версии 0.1.17, выпущенной в начале 2005 года. Для эксплуатации уязвимости требуется наличие в конфиге сервера директивы rewrite, у которой:

  • в первом аргументе имеются перекрывающиеся выделяемые параметры регулярного выражения,
  • во втором используется два или больше из них, но не используются переменные,
  • при этом либо указан тип «redirect», либо параметры во втором аргументе находятся после знака вопроса.

Примеры:

rewrite ^/((.*))$ http://127.0.0.1:8080/$1$2 redirect;
rewrite ^/((.*))$ http://127.0.0.1:8080/?$1$2;
Оба они получат переполнение буфера при обработке запроса »/++++++++++++++++++++++++++++++».

Как и в предыдущей уязвимости, в этом случае расчётная длина буфера может не совпадать с реальным количеством записанных в него данных — при расчёте длины не везде учитывалось возможное экранирование.

Вышеописанное может приводить к крашу рабочего процесса nginx, а при отсутствии ALSR — к RCE. В качестве смягчающего обстоятельства можно отметить ещё меньшую вероятность встретить уязвимые конструкции в конфиге, чем в прошлый раз.

Ошибка исправлена в версиях 1.30.2 и 1.31.1 (коммит исправления).

>>> Официальное объявление F5

Linux.org.ru прочитано 1254 раза