Критическая уязвимость в nginx позволяет отключить рабочие процессы
🔥 Критическая уязвимость в nginx позволяет отключить рабочие процессы
Уязвимость CVE-2026-42533 в скриптовом движке nginx позволяет удалённому атакующему без аутентификации вызвать переполнение кучи в worker-процессе и либо обрушить сервер, либо выполнить код. Официально F5 оценивает сложность атаки как высокую и считает, что RCE возможен только при отключённом или обойдённом ASLR. Однако один из обнаруживших проблему исследователей, Stan Shaw, в разговоре с The Hacker News утверждает: уязвимость сама поставляет обход ASLR через утечку неинициализированных данных кучи, и на стандартной сборке Ubuntu 24.04 одиночный GET-запрос раскрывает адреса, нужные для эксплуатации. В своих тестах Шоу добился 10 из 10 успешных попыток — и пока не публикует proof-of-concept, чтобы дать фору на патчинг.
Механика опасна своей неочевидностью: двухпроходный движок собирает строки из директив конфига. Первый проход вычисляет длину результата и выделяет буфер, второй — пишет туда данные. Проблема возникает, когда regex-based map своим срабатыванием меняет состояние захватов между проходами: первый замеряет буфер под исходный $1, а в момент записи туда попадает уже другой, атакующим контролируемый захват — буфера не хватает. Обратный случай (атакующий захват короче исходного) возвращает лишние байты кучи со служебными адресами. Эксплуатация срабатывает только в узкой конфигурации: regex-based map, чья переменная используется в строковом выражении после захвата из более раннего регулярного выражения.
Патчи выпущены 15 июля: nginx 1.30.4 (stable) и 1.31.3 (mainline), NGINX Plus 37.0.3.1. Уязвимы все версии с 0.9.6 (2011 год) до 1.31.2. Временным смягчением F5 называет переход на именованные capture-группы, но Шоу заявляет, что узкий путь всё равно остаётся — если map и location используют одинаковые имена групп, переполнение воспроизводится по второму кодовому маршруту, что и показано с AddressSanitizer. Сама F5 в бюллетене этого варианта не упоминает. Для NGINX Ingress Controller, App Protect WAF и других зависимых продуктов исправленных сборок на момент публикации ещё не было.
Это третья однотипная уязвимость в двухпроходном оценщике nginx за два месяца — Rift, перекрытие захватов в rewrite и теперь эта. Каждый раз механика разная, а корень один: движок верит собственному замеру и не проверяет состояние между проходами. Патч закрывает конкретный вектор, но не архитектурную проблему. И хотя эксплуатация требует специфичного конфига, для nginx, нередко закрывающего собой ключевые сервисы, тезис «меня это не касается» стоит проверять не глазами по конфигу, а автоматическим сканером Шоу или grep-ом, прежде чем за окном закончатся 21 день до публикации PoC.
#CVE-2026-42533 #nginx #RCE #heapoverflow #F5