NGINX Rift: Уязвимость 18-летней давности в модуле rewrite открывает RCE без авторизации
В археологии есть старая байка о римских акведуках: свинцовые трубы травили воду токсинами на протяжении веков, и никто этого не замечал, потому что акведуки продолжали исправно работать. У NGINX только что случился свой «свинцовый момент». Переполнение буфера кучи существует в модуле rewrite примерно с эпохи администрации Буша — всё это время NGINX добросовестно проксировал половину интернета, и никто ничего не замечал.
Вода по-прежнему кажется чистой. Труба отравлена.
Что произошло
В среду, 14 мая 2026 года, F5 опубликовала рекомендацию по критической уязвимости в NGINX Plus и NGINX Open Source. Ошибка, получившая кодовое название NGINX Rift и отслеживаемая как CVE-2026-42945, имеет оценку CVSS v4 равную 9.2 и оставалась незамеченной 18 лет. Как сообщило издание The Hacker News, уязвимость обнаружил исследователь под псевдонимом depthfirst и ответственно раскрыл её 21 апреля 2026 года.
Это переполнение буфера кучи в ngx_http_rewrite_module — части NGINX, отвечающей за переписывание URL. Формулировка самой F5: «NGINX Plus и NGINX Open Source содержат уязвимость в модуле ngx_http_rewrite_module». Условия срабатывания специфичны, но не экзотичны: директива rewrite, за которой следует ещё одна rewrite, if или set, использующая безымянный захват PCRE вида $1 или $2, и строка замены, содержащая знак вопроса. Такой шаблон конфигурации встречается повсеместно. Любой, кто когда-либо вручную писал цепочку редиректов для SEO-миграции, создавал именно его.
Радиус поражения широк. Уязвимы NGINX Plus R32 — R36, исправления доступны в R32 P6 и R36 P4. NGINX Open Source версий с 1.0.0 по 1.30.0 затронут, патч выпущен в 1.30.1 и 1.31.0. Особенно тревожное: версии с 0.6.27 по 0.9.7 также уязвимы, и F5 не планирует выпускать для них исправления. В число затронутых входят и смежные продукты F5: NGINX Instance Manager, F5 WAF for NGINX, App Protect WAF и DoS, Gateway Fabric, а также Ingress Controller в нескольких основных версиях. В том же бюллетене было устранено ещё три CVE — о них мы расскажем далее.
Техническая анатомия
Механизм уязвимости неприятно элегантен. Когда NGINX обрабатывает директиву rewrite с безымянным захватом PCRE и строкой замены, содержащей знак вопроса, рабочий процесс неверно вычисляет размер выделяемой памяти для переписанного URI. Байты записываются за пределы буфера. Причём эти байты — не случайное заполнение от ядра, а данные, производные от URI атакующего. Сам depthfirst прямо указывает на это: «байты, записанные за пределы выделенной области, являются производными от URI атакующего, поэтому повреждение формируется атакующим, а не является случайным».
Это принципиальное различие. Случайное повреждение кучи — это примитив для отказа в обслуживании. Управляемое повреждение кучи — это примитив для эксплойта. Разница между «мы обрушили ваш рабочий процесс» и «мы выполняем наш код в вашем рабочем процессе» в том, контролирует ли атакующий, что и куда записывается. Здесь — контролирует.
Предварительные условия достаточно коротки, чтобы уместиться на стикере. Никакой аутентификации. Никакой сессии. Никакого предварительного доступа. Снова цитируем depthfirst: «Атакующий, способный достучаться до уязвимого сервера NGINX по HTTP, может отправить один запрос, вызывающий переполнение кучи в рабочем процессе и обеспечивающий удалённое выполнение кода. Никакого шага аутентификации, никакого предварительного доступа и никакой существующей сессии не требуется».
Один HTTP-запрос. Вот и вся цепочка эксплойта.
Для полноценного RCE необходимо, чтобы ASLR был отключён на целевой машине — это единственный существенный смягчающий фактор. На современных защищённых дистрибутивах Linux это не умолчание, однако любой, кто аудировал парк разновозрастных виртуальных машин в платёжной или iGaming-инфраструктуре, знает: машины с отключённым ASLR встречаются чаще, чем следовало бы, — особенно в старых базовых образах контейнеров и нестандартных сборках ядра. Даже на системах с включённым ASLR рабочий процесс уходит в цикл падений. Повторные запросы постоянно перезапускают рабочие процессы, снижая доступность для всех сайтов, обслуживаемых данным экземпляром. Итог: RCE на уязвимых целях и надёжный DoS на всём остальном.
Три сопутствующих CVE из того же бюллетеня заслуживают отдельного упоминания. CVE-2026-42946 (CVSS 8.3) — избыточное выделение памяти в модулях SCGI и uWSGI, эксплуатируемое через AitM при наличии конфигурации scgi_pass или uwsgi_pass. CVE-2026-40701 (CVSS 6.3) — использование освобождённой памяти (use-after-free) в модуле SSL при включённой проверке клиентских сертификатов и OCSP stapling. CVE-2026-42934 (CVSS 6.3) — чтение за пределами буфера в модуле charset при определённых конфигурациях proxy-buffering. Ни одна из них не является NGINX Rift, но раз уж вы всё равно устанавливаете патчи — исправьте все.
Кто пострадает
NGINX является предпочтительным балансировщиком нагрузки и обратным прокси для значительной части интернет-инфраструктуры. Если в вашем стеке есть граничный уровень (edge tier), велика вероятность, что там стоит NGINX.
В iGaming типичный фронтенд букмекерской конторы работает за слоем NGINX, выполняющим геороутинг, A/B-разбивку и переписывание устаревших URL для многолетних рыночных лендингов. Именно такие цепочки rewrite, накопившиеся за десятилетие регуляторных слияний, идеально активируют эту CVE. Отравленный акведук всё это время доставлял ставки.
Финтех находится в той же ситуации. Платёжные шлюзы регулярно используют NGINX как слой терминирования TLS и маршрутизации перед API-сервисами без сохранения состояния. Команда по комплаенсу будет ждать письменного ответа на вопрос «работали ли хоть один из наших рабочих процессов в PCI-периметре на уязвимой версии» уже к следующему понедельнику. Тем, кто использует NGINX App Protect WAF версий с 4.9.0 по 4.16.0 или с 5.1.0 по 5.8.0, либо F5 WAF for NGINX версий с 5.9.0 по 5.12.1, предстоит особое удовольствие — объяснять, почему их WAF сам оказался уязвим.
Криптовалютным и DeFi-компаниям, использующим NGINX Ingress Controller в Kubernetes (затронуты версии с 3.5.0 по 3.7.2, с 4.0.0 по 4.0.1 и с 5.0.0 по 5.4.1), необходимо немедленно проверить манифесты кластеров. Скомпрометированный ingress-под в мультиарендном кластере — это исключительно неприятная ситуация.
Рекламные технологии, пожалуй, наиболее уязвимы из всех. Весь вертикаль работает на bid-эндпоинтах за NGINX, обрабатывающих огромные объёмы запросов, где падение рабочего процесса в цикл — это не просто простой, а потеря выручки, измеряемая в долларах в секунду. Повторные DoS-запросы против RTB-биржи были бы разрушительны даже без пути к RCE.
Наконец, версии с 0.6.27 по 0.9.7, для которых исправление не планируется. Это NGINX образца до 2012 года. Тот, кто до сих пор его использует, живёт в музейном экспонате — а у музеев, как правило, нет налаженных процессов патчинга.
Инструкция для команд безопасности
Первое: инвентаризация. Запустите на всём парке скрипт, вызывающий nginx -v и сопоставляющий результат со списком уязвимых версий. Не полагайтесь только на данные пакетного менеджера: в контейнеризированных средах запущенный бинарный файл нередко отличается от того, что считает установленным хост-машина. Также проверьте sidecar-прокси в service mesh — многие из них содержат NGINX под капотом.
Второе: установите патчи. Пользователи NGINX Plus переходят на R32 P6 или R36 P4. Пользователи Open Source переходят на 1.30.1 или 1.31.0. Если вы используете смежные продукты F5 (Instance Manager, App Protect WAF, Gateway Fabric, Ingress Controller), сверьтесь с матрицей версий в бюллетене и установите соответствующее исправление.
Третье: если установить патч на этой неделе невозможно, рекомендованное F5 временное решение просто: замените безымянные захваты на именованные во всех затронутых директивах rewrite. То есть rewrite ^/foo/(.*)$ /bar/$1?baz=1; превращается в версию с именованными группами вида (?<path>.*) и $path. Прогоните grep по конфигам в поисках этого шаблона и перепишите их. Это скучная работа, но если пропустить хотя бы один файл конфигурации, временное решение молча окажется неприменимым.
Четвёртое: убедитесь, что ASLR включён на каждом хосте, где работает NGINX. Команда cat /proc/sys/kernel/randomize_va_space должна возвращать 2. Это не остановит DoS-вектор, но переводит RCE из категории «один запрос» в категорию «значительно сложнее».
Пятое: ищите следы активности. Эксплойт представляет собой специально сформированные HTTP-запросы с URI, содержащими захваты PCRE и знаки вопроса. Проанализируйте логи доступа за неделю и ищите необычные паттерны, направленные на rewrite-эндпоинты. Каталог KEV от CISA, скорее всего, быстро добавит эту уязвимость после появления публичных эксплойтов — следите за обновлениями.
Ключевые выводы
- CVE-2026-42945, под кодовым названием NGINX Rift, — это переполнение буфера кучи в
ngx_http_rewrite_moduleс оценкой CVSS 9.2, оставшееся незамеченным 18 лет и позволяющее выполнить неаутентифицированный RCE одним специально сформированным HTTP-запросом. - Уязвимость срабатывает, когда директива
rewriteиспользует безымянные захваты PCRE со строкой замены, содержащей знак вопроса, — конфигурационный шаблон, типичный для давно работающих production-систем. - Патчи доступны в NGINX Plus R32 P6 и R36 P4, а также в NGINX Open Source 1.30.1 и 1.31.0. Версии с 0.6.27 по 0.9.7 уязвимы, исправления для них не планируются.
- Три сопутствующих CVE (CVE-2026-42946, CVE-2026-40701, CVE-2026-42934) устранены в том же бюллетене и должны быть закрыты одновременно.
- Акведук всё это время доставлял ваш трафик, но свинец теперь виден. Проведите инвентаризацию, установите патчи и замените безымянные захваты именованными в качестве немедленного временного решения.
Часто задаваемые вопросы
Вопрос: Что такое CVE-2026-42945 и насколько это серьёзно?
CVE-2026-42945, под кодовым названием NGINX Rift, — это уязвимость типа «переполнение буфера кучи» в модуле rewrite NGINX с оценкой CVSS v4 равной 9.2. Она позволяет неаутентифицированному атакующему достичь удалённого выполнения кода или отказа в обслуживании, отправив один специально сформированный HTTP-запрос. Уязвимость существовала незамеченной 18 лет.
Вопрос: Какие версии NGINX затронуты уязвимостью NGINX Rift?
Затронуты NGINX Plus R32 — R36, NGINX Open Source версий с 1.0.0 по 1.30.0, а также устаревший диапазон версий с 0.6.27 по 0.9.7. Исправления доступны в NGINX Plus R32 P6 и R36 P4, а также в NGINX Open Source 1.30.1 и 1.31.0. Для серии с 0.6.27 по 0.9.7 исправления не планируются.
Вопрос: Какое самое быстрое временное решение, если установить патч немедленно невозможно?
Рекомендованная F5 мера митигации — заменить безымянные захваты PCRE (например, $1, $2) на именованные во всех затронутых директивах rewrite. Также следует убедиться, что ASLR включён на всех хостах с NGINX: путь к RCE требует отключённого ASLR для надёжного выполнения кода.
Foxconn подтвердила атаку вымогателя Nitrogen на заводы в Северной Америке
Nitrogen заявляет о похищении 8 ТБ и 11 миллионов файлов с заводов Foxconn в Северной Америке, включая карты топологии сетей Intel, Google и AMD.
Вредонос ODINI преодолевает клетки Фарадея через магнитные поля процессора
Команда из Университета Бен-Гуриона показала, как модуляция нагрузки CPU обеспечивает утечку 40 бит в секунду сквозь стены клетки Фарадея. Допущения об air-gap требуют пересмотра.
ShinyHunters атакует Canvas: 9 000 университетов, 275 миллионов записей
ShinyHunters заявляют о компрометации 275 миллионов записей из 9 000 университетов через один аккаунт преподавателя Canvas. Масштаб взлома — главная история, а не требование выкупа.




