Двадцать лет уязвимостей Nginx: почему NGINX Rift требует патча прямо сейчас
Двадцать лет уязвимостей в Nginx: почему NGINX Rift требует патча прямо сейчас
Все мы знаем: старый код — это риск для безопасности. А если такая "находка" затаилась в одном из самых популярных веб-серверов интернета аж 18 лет?
F5 выпустила патчи для четырёх дыр в Nginx. Главная из них — CVE-2026-42945, или NGINX Rift, как окрестили её исследователи из depthfirst. Её критичность заставит любую команду срочно запустить обновления.
Идеальный шторм: старая ошибка, свежие проблемы
Разберём, почему эта уязвимость так опасна.
Суть бага: Переполнение буфера кучи в модуле rewrite. Она сидит в Nginx с версии 0.6.27 от 2008 года. Тогда Docker ещё не придумали, смартфоны были редкостью, а Nginx только набирал обороты против Apache.
Как атаковать: Злоумышленнику без авторизации хватит одного хитрого HTTP-запроса. Никаких цепочек эксплойтов, фишинга или кражи паролей. Просто запрос — и сервер в беде.
Последствия: Без ASLR — полноценное выполнение кода на сервере. Полный провал. С ASLR — надёжный DoS: рабочие процессы падают, перезапускаются и крутятся в цикле.
Оценка CVSS: 9.2 — критическая. Почти максимум.
Почему это не прошло незамеченным за 20 лет
Главный вопрос: как такая дырка пережила два десятилетия? Ответ учит нас важному о безопасности ПО.
Модуль rewrite в Nginx работает с PCRE для сопоставления URL. Если правила используют безымянные захваты ($1, $2 и т.д.), а за ними идёт ещё rewrite, if или set — код пишет за пределы выделенной памяти кучи. Классическое переполнение буфера. Его могли бы поймать на ревью, но оно просочилось.
Это доказывает: даже топовые open-source проекты с миллионами пользователей не застрахованы от древних багов. Долгая жизнь Nginx увеличивает зону поражения.
Кому патчить срочно
Пользователи NGINX Plus: На R32–R36 берите R32 P6 или R36 P4.
Open Source: Версии 1.0.0–1.30.0 под ударом. Переходите на 1.30.1 или 1.31.0.
Исключение для древних: С 0.6.27 по 0.9.7 патчей не будет. Полная миграция — без вариантов.
Нет времени на патч? Временная защита
Заморозка изменений или старые зависимости? Вот обходной путь:
Меняйте безымянные захваты PCRE на именованные в rewrite. Забудьте $1, $2. Используйте (?<имя>...) и $имя. Это закроет путь к переполнению, но не починит корень проблемы.
Пример:
# Уязвимо
rewrite ^/user/([0-9]+)$ /profile?id=$1 last;
# Безопаснее (временно)
rewrite ^/user/(?<id>[0-9]+)$ /profile?id=$id last;
Это пластырь. Патчьте при первой возможности.
Ещё три CVE в свежем релизе
NGINX Rift в центре внимания, но F5 закрыла и другие:
- CVE-2026-42946 (CVSS 8.3 High): Чрезмерное выделение памяти в SCGI и uWSGI — DoS на определённых прокси.
- CVE-2026-40701 (CVSS 6.3 Medium): Use-after-free в SSL-модуле при ssl_verify_client и ssl_ocsp.
- CVE-2026-42934 (CVSS 4.8 Medium): Чтение за границами в charset-модуле.
Не такие срочные, но фиксите в ближайшее окно обслуживания.
Уроки для инфраструктуры
NGINX Rift напоминает о жёстких реалиях:
Популярность не спасает. Nginx везде, но баг просидел 18 лет незамеченным.
Возраст — не плюс. Старый код копит проблемы, а не закаляется.
Безопасность = скорость патча. Одна дырявая инстанция тянет всю систему вниз.
Мониторинг спасает. Даже с ASLR DoS бьёт мгновенно.
Итог
Если у вас Nginx — Open Source или Plus — патчи этой недели как пожарная тревога. Древность бага, простота атаки и критичность ставят NGINX Rift в приоритет.
Обновляйтесь на неделе. Тестируйте в staging, но в прод не тяните. Риск уязвимости круче, чем апдейт стабильного Nginx.
Заодно проверьте конфиги: rewrite-правила, версии по всей инфраструктуре. Укрепите оборону.
Будьте в безопасности.