НОВОСТИ БЕЗОПАСНОСТИ

NGINX Rift, CVE-2026-42945: ошибке в модуле rewrite 18 лет

Ошибка, оставшаяся незамеченной в модуле rewrite nginx примерно 18 лет, оказалась критическим, неавторизованным, удалённо запускаемым переполнением буфера в куче. CVE-2026-42945, получившая имя NGINX Rift, имеет оценку CVSS 4.0 9.2 и CVSS 3.1 8.1 и затрагивает все версии nginx Open Source с 0.6.27 по 1.30.0, а также nginx Plus с R32 по R36. PoC-код эксплойта уже опубличен, а исследователи безопасности сообщали о попытках эксплуатации после выхода патча. Это хороший пример того, насколько узким может быть условие срабатывания критической уязвимости, и почему скорость патчинга важна даже для ошибки, требующей очень специфичного паттерна конфигурации.

Быстрый результат (5 минут)

  • Проверьте версию nginx: nginx -v. Всё от 0.6.27 до 1.30.0, или Plus от R32 до R36, потенциально затронуто.
  • Проверьте конфиги на паттерн срабатывания: grep -rn "rewrite.*\$[0-9].*?" /etc/nginx/, затем проверьте, есть ли в том же location следующая директива rewrite, if или set.
  • Если версия затронута, считайте это приоритетным патчем, а не рутинным обслуживанием, так же как любую запись в каталоге KEV CISA.
  • После обновления убедитесь, что новая версия реально применилась: снова nginx -v, и systemctl status nginx, чтобы подтвердить чистый перезапуск.

Что такое NGINX Rift на самом деле

CVE-2026-42945 это переполнение буфера в куче (CWE-122) в ngx_http_rewrite_module, части nginx, отвечающей за перезапись URL и логику редиректов. Согласно собственному бюллетеню F5, неавторизованный атакующий может отправить специально сформированный запрос, вызывающий несовпадение между тем, как nginx вычисляет размер буфера назначения, и тем, как он реально записывает в него данные, переполняя буфер в куче. Минимальный эффект: обрушение затронутого worker-процесса nginx, который затем перезапускается, что вызывает отказ в обслуживании. На системе с отключённой рандомизацией адресного пространства, либо там, где атакующий способен её обойти, то же переполнение можно использовать для удалённого выполнения кода.

Что запускает переполнение

Уязвимый паттерн конкретен: директива rewrite, использующая неименованную группу захвата PCRE, например $1 или $2, в строке замены, содержащей знак вопроса, за которой в том же блоке location следует ещё одна директива rewrite, if или set. Когда такая последовательность встречается, nginx вычисляет требуемый размер буфера назначения одним методом экранирования, но записывает реальный вывод другим методом, и эти два метода расходятся в том, сколько места требуется. Это расхождение и переполняет буфер. Это узкий, конкретный паттерн, а не изъян в перезаписи URL в целом, и именно поэтому он оставался незамеченным 18 лет активного реального использования модуля rewrite.

Почему 18-летняя ошибка всплыла именно сейчас

Такие ошибки обычно находят через фаззинг или целевой аудит кода широко используемого ПО, а не через обычное использование, поскольку условие срабатывания зависит от детали конфигурации, которую большинство администраторов никогда не подумали бы специально проверять. Как только F5 и проект nginx раскрыли уязвимость и выпустили исправление, PoC-код эксплойта появился быстро, а несколько источников сообщили о попытках эксплуатации сразу после этого. Это тот же паттерн, который подробно разбирает наше руководство по управлению обновлениями: в момент публикации исправления становится публичной и достаточная информация, чтобы атакующие построили рабочий эксплойт, и отсчёт того, сколько непропатченный сервер остаётся в безопасности, начинается немедленно.

Кого это касается

Затронут каждый релиз nginx Open Source с 0.6.27 по 1.30.0, а также релизы nginx Plus с R32 по R36. Учитывая, насколько давно вышла 0.6.27, это покрывает практически любое развёртывание nginx, которое не поддерживалось в актуальном состоянии, а не узкое окно недавних релизов. Согласно бюллетеню AlmaLinux, большинство крупных дистрибутивов Linux быстро перенесли исправление в свои поддерживаемые пакеты nginx, как только оно стало доступно в upstream.

Не уверены, что реально делает ваша конфигурация nginx?

Бесплатная проверка безопасности в режиме только чтения оценивает версию nginx, конфигурацию и открытые сервисы без каких-либо изменений.

Получить бесплатную проверку сервера Связаться с инженером по безопасности

Как проверить конфигурацию

nginx -v
grep -rn "rewrite" /etc/nginx/

Просмотрите найденные директивы rewrite на предмет использования неименованной группы захвата, $1, $2 и так далее, внутри строки замены со знаком вопроса, и проверьте, есть ли в том же блоке location следующая директива rewrite, if или set. Если вы нашли именно такое сочетание на затронутой версии, считайте это подтверждённой уязвимостью. Если не нашли, конкретный путь кода недостижим даже на непропатченной версии, хотя обновление всё равно правильный шаг, поскольку новые изменения конфигурации могут позже незаметно ввести этот паттерн.

Как это исправить

Обновите nginx до версии 1.30.1 или новее, если вы следите за stable-веткой, либо 1.31.0 или новее на mainline. На Debian и Ubuntu команда sudo apt update && sudo apt install nginx применяет исправление, как только ваш дистрибутив перенёс его в поддерживаемый пакет; на системах семейства RHEL эквивалент это sudo dnf upgrade nginx. Всегда проверяйте установленную версию после этого командой nginx -v, а не считайте обновление успешным по умолчанию, и подтвердите, что служба перезапустилась чисто, командой systemctl status nginx.

Если немедленное обновление невозможно, удаление или переписывание конкретного вызывающего паттерна конфигурации, неименованного захвата со знаком вопроса, за которым следует ещё одна директива rewrite, if или set в том же location, закрывает уязвимость без изменения самого бинарника nginx, хотя это временная мера, а не замена патчу.

Более общий урок

NGINX Rift хороший пример того, что фраза «мы всегда использовали эту конфигурацию и никогда не было проблем» не равна утверждению «эта конфигурация безопасна». Уязвимый путь кода в этом случае существовал с версии 0.6.27 и не имел никакого отношения к необычным или экзотическим настройкам; он зависел от конкретного, но не такого уж редкого паттерна в директивах rewrite, который многие реальные конфигурации используют для чистых URL, редиректов и обработки строк запроса. Поддержание самого nginx в актуальном состоянии, а не только конфигурации вокруг него, единственная надёжная защита от класса ошибок, которые живут в коде, не вызывающем подозрений, пока кто-то не начнёт целенаправленно его искать. Наше руководство по лучшим практикам безопасности nginx подробно разбирает настройку; эта уязвимость напоминание, что и само ПО под конфигурацией нуждается в таком же внимании.

Часто задаваемые вопросы

Что такое NGINX Rift, CVE-2026-42945?

NGINX Rift это критическое переполнение буфера в куче в модуле ngx_http_rewrite_module, с оценкой CVSS 4.0 9.2 (критическая) и CVSS 3.1 8.1 (высокая). Она позволяет неавторизованному атакующему отправить специально сформированный запрос, который обрушивает worker-процесс nginx, а на системах с отключённой или обойдённой рандомизацией адресного пространства может привести к удалённому выполнению кода.

Что на самом деле запускает CVE-2026-42945?

Ошибка требует конкретного паттерна конфигурации: директива rewrite, использующая неименованную группу захвата PCRE, например $1 или $2, в замене, содержащей знак вопроса, за которой в том же location следует ещё одна директива rewrite, if или set. nginx вычисляет размер буфера назначения одним методом экранирования, но записывает результат другим методом, из-за чего возникает несовпадение, переполняющее буфер.

Какие версии nginx затронуты?

Все версии nginx Open Source с 0.6.27 по 1.30.0 и релизы nginx Plus с R32 по R36. Эта ошибка существовала в модуле rewrite примерно 18 лет. Исправлена в nginx 1.30.1 (stable) и 1.31.0 (mainline).

Эксплуатируется ли CVE-2026-42945 активно?

PoC-код эксплойта опубликовали вскоре после того, как F5 и проект nginx раскрыли уязвимость, и несколько исследователей безопасности сообщили о попытках эксплуатации после выхода патча, что типично для широко освещённой и легко запускаемой уязвимости.

Как проверить, уязвима ли моя конфигурация nginx?

Проверьте конфигурационные файлы на директивы rewrite, использующие неименованную группу захвата со знаком вопроса в замене, за которыми в том же блоке location сразу следует ещё одна директива rewrite, if или set. Если ни один файл не использует такой паттерн, уязвимый путь кода недостижим даже на непропатченной версии, хотя обновление всё равно рекомендуется.

Как исправить CVE-2026-42945?

Обновите nginx до версии 1.30.1 или новее на stable-ветке, либо 1.31.0 или новее на mainline. Большинство дистрибутивов Linux уже перенесли исправление в свои поддерживаемые пакеты, поэтому обычное обновление через менеджер пакетов, например sudo apt update && sudo apt install nginx на Debian или Ubuntu, применяет его, как только оно доступно.

Не уверены, в каком состоянии ваш сервер?

Получите бесплатную проверку безопасности в режиме только чтения или поговорите с инженером по безопасности об управляемой защите.

Получить бесплатную проверку сервера Связаться с инженером по безопасности