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

Вскоре после обнаружения 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
