CVE-2026-42533: переполнение буфера при обработке "map" и регулярных выражений
В NGINX Open Source и NGINX Plus устранена уязвимость типа heap-based buffer overflow — CWE-122. Ошибка находится в механизме вычисления complex values, используемом директивой map при сопоставлении по регулярному выражению. CVSS v4.0 — 9.2 Critical, CVSS v3.1 — 8.1 High.
Уязвимая конфигурация возникает, когда:
• map выполняет regex-сопоставление;
• строковое выражение обращается к capture-переменным регулярного выражения до обращения к выходной переменной map;
• либо в выражении используется non-cacheable переменная, длина которой может измениться во время обработки запроса.
NGINX script engine обрабатывает такие выражения в несколько проходов: сначала вычисляет размер результирующего буфера, затем копирует значения переменных. Regex-сопоставление или повторное вычисление переменной может изменить состояние capture-групп между этими операциями. В результате размер, рассчитанный на первом проходе, оказывается меньше объёма данных, записываемого на втором, что приводит к записи за границы heap-буфера. Исправление добавляет указатель конца буфера e->end и проверку ngx_http_script_check_length() перед операциями копирования.
Эксплуатация выполняется удалённо без аутентификации с помощью специально сформированного HTTP-запроса, однако требует наличия подходящей конфигурации NGINX. Переполнение происходит в worker-процессе и может вызвать его аварийное завершение и перезапуск, создавая отказ в обслуживании. Выполнение произвольного кода возможно на системах с отключённым ASLR либо при наличии способа обхода ASLR. Уязвимость относится к data plane и не предоставляет прямого доступа к control plane.
Затронутые версии:
• NGINX Open Source: 0.9.6–1.31.2;
• NGINX Plus: R33–R36, а также 37.0.0.1–37.0.2.1.
Исправленные версии:
• NGINX stable: 1.30.4;
• NGINX mainline: 1.31.3;
• NGINX Plus R36: R36 P7;
• NGINX Plus R37: 37.0.3.1.
Основная мера устранения — обновление до исправленной версии. Для временного снижения риска F5 рекомендует исключить безымянные capture-группы, использовать уникальные именованные capture-переменные только внутри блока с соответствующим regex-сопоставлением и не переиспользовать одинаковые именованные capture-переменные в разных директивах. Конфигурацию следует проверять по полному выводу "nginx -T", включая подключаемые файлы и автоматически сгенерированные конфигурации.
В NGINX Open Source и NGINX Plus устранена уязвимость типа heap-based buffer overflow — CWE-122. Ошибка находится в механизме вычисления complex values, используемом директивой map при сопоставлении по регулярному выражению. CVSS v4.0 — 9.2 Critical, CVSS v3.1 — 8.1 High.
Уязвимая конфигурация возникает, когда:
• map выполняет regex-сопоставление;
• строковое выражение обращается к capture-переменным регулярного выражения до обращения к выходной переменной map;
• либо в выражении используется non-cacheable переменная, длина которой может измениться во время обработки запроса.
NGINX script engine обрабатывает такие выражения в несколько проходов: сначала вычисляет размер результирующего буфера, затем копирует значения переменных. Regex-сопоставление или повторное вычисление переменной может изменить состояние capture-групп между этими операциями. В результате размер, рассчитанный на первом проходе, оказывается меньше объёма данных, записываемого на втором, что приводит к записи за границы heap-буфера. Исправление добавляет указатель конца буфера e->end и проверку ngx_http_script_check_length() перед операциями копирования.
Эксплуатация выполняется удалённо без аутентификации с помощью специально сформированного HTTP-запроса, однако требует наличия подходящей конфигурации NGINX. Переполнение происходит в worker-процессе и может вызвать его аварийное завершение и перезапуск, создавая отказ в обслуживании. Выполнение произвольного кода возможно на системах с отключённым ASLR либо при наличии способа обхода ASLR. Уязвимость относится к data plane и не предоставляет прямого доступа к control plane.
Затронутые версии:
• NGINX Open Source: 0.9.6–1.31.2;
• NGINX Plus: R33–R36, а также 37.0.0.1–37.0.2.1.
Исправленные версии:
• NGINX stable: 1.30.4;
• NGINX mainline: 1.31.3;
• NGINX Plus R36: R36 P7;
• NGINX Plus R37: 37.0.3.1.
Основная мера устранения — обновление до исправленной версии. Для временного снижения риска F5 рекомендует исключить безымянные capture-группы, использовать уникальные именованные capture-переменные только внутри блока с соответствующим regex-сопоставлением и не переиспользовать одинаковые именованные capture-переменные в разных директивах. Конфигурацию следует проверять по полному выводу "nginx -T", включая подключаемые файлы и автоматически сгенерированные конфигурации.