
Эксплойт, подтверждающий концепцию, для CVE-2026-42945 — переполнение кучи в директивах rewrite/set NGINX, позволяющее осуществить DoS и потенциальный RCE с помощью специально созданных запросов.
CVE-2026-42945 — критическая уязвимость переполнения буфера кучи в сервере NGINX, известная как "NGINX Rift". Уязвимость существует в логике обработки директив rewrite и set в NGINX. При выполнении определённых условий конфигурации злоумышленник может вызвать переполнение кучи с помощью специально сформированного запроса, что приводит к отказу в обслуживании (DoS) и потенциальному удалённому выполнению кода (RCE).
Тип уязвимости: Переполнение буфера кучи Уровень риска: Высокий CVE ID: CVE-2026-42945
Рекомендуется немедленно обновиться до одной из следующих версий:
Для эксплуатации уязвимости должны одновременно выполняться два условия:
Условие конфигурации: В конфигурации NGINX одновременно используются:
rewrite (строка замены содержит символ ?)set (ссылается на группы захвата регулярного выражения rewrite, например, $1, $2)Условие запроса: URI запроса содержит символы, подлежащие экранированию (например, +, &, % и т.д.)
Пояснение:
rewrite устанавливает e->is_args = 1 (никогда не сбрасывается)set используется поддвижок с нулевыми значениями (le.is_args = 0)%25 в %, но ngx_escape_uri перекодирует обратно в %25 (3 байта)%25 расширяется с 1 байта до 3 байт, что приводит к записи за границы буфера# Использование тестового скрипта из проекта
python3 CVE-2026-42945/CVE-2026-42945-test.py --host cve.test.com --port 80
%25 для маломасштабного тестирования%25 (например, 2000) для запуска переполнения буфераВ одноуровневой конфигурации NGINX результаты тестирования запускают уязвимость:
Анализ журнала краха:
ngx_http_script_flush_no_cacheable_variablesngx_http_core_rewrite_phaseВ двухуровневой конфигурации NGINX (layer1 — пересылка, layer2 — приложение) результаты тестирования следующие:
| Сценарий конфигурации | Результат layer1 | Результат layer2 | Анализ причины |
|---|---|---|---|
rewrite без break + proxy_pass | ❌ Уязвимость запущена (404) | ❌ Запрос не достиг | После rewrite продолжается выполнение set, запускается переполнение кучи, worker падает |
rewrite с break + proxy_pass | ✅ Нормально (200) | ⚠️ Возможно запуск уязвимости | break прекращает выполнение set, запрос нормально пересылается на бэкенд |
| Файл | Описание |
|---|---|
CVE-2026-42945/CVE-2026-42945-test.py | PoC-скрипт для проверки уязвимости, используется для проверки, уязвима ли цель |
single_layer_test/single_layer_nginx.conf | Пример уязвимой конфигурации NGINX одноуровневой архитектуры |
single_layer_test/image.png | Схема принципа действия уязвимости |
single_layer_test/test.log | Файл журнала тестирования |
double_layer_test/layer1_nginx.conf | Конфигурация NGINX первого уровня (уровень пересылки) двухуровневой архитектуры |
double_layer_test/layer2_nginx.conf | Конфигурация NGINX второго уровня (прикладной уровень) двухуровневой архитектуры |
Данный проект предназначен исключительно для целей исследования и обучения в области безопасности. Пользователи обязаны соблюдать законы и нормативные акты своей страны и региона. Авторы не несут ответственности за любое несанкционированное использование.
Запрещено использовать для незаконных атак!
Последнее обновление: 2026-05-19