
Nginx Rewrite CVE Сканирование (CVE-2026-42945 nginx-rift CVE-2026-9256)
Язык: русский | English
Это легковесный скрипт для проверки конфигураций NGINX на наличие паттернов риска CVE-2026-42945 (NGINX Rift) и CVE-2026-9256.
Уязвимость была раскрыта depthfirst в статье NGINX Rift: Achieving NGINX RCE via an 18-Year-Old Vulnerability. Согласно статье и описаниям F5/NVD, риск связан с определенными комбинациями конфигураций ngx_http_rewrite_module: когда строка замены rewrite содержит ?, а последующие rewrite, if или set ссылаются на безымянные переменные захвата PCRE, например $1, $2.
Данный инструмент проверяет конфигурации NGINX на наличие следующих высокорисковых паттернов.
Высокорисковая последовательность, например:
location ~ ^/api/(.*)$ {
rewrite ^/api/(.*)$ /internal?migrated=true;
set $original_endpoint $1;
}
Риск представляют не отдельные rewrite или set, а их порядок выполнения в одном контексте:
rewrite использует регулярные захваты, и строка замены содержит ?rewrite, if или set используют безымянные переменные захвата, такие как $1, $2Такая комбинация может привести к несоответствию между вычислением длины и фактическим копированием в скриптовом движке NGINX, вызывая переполнение кучи.
Высокорисковый rewrite, например:
location / {
rewrite /wengine-auth-static/((.*)) /?$1$2 break;
}
Условия риска:
^/((.*))$ $1 включает $2$1$2Обратите внимание, что break не исключает риск; если несколько перекрывающихся групп захвата появляются в части аргументов после ?, это всё равно относится к контексту arguments. Обычный URI rewrite, например /$1$2 break, не является условием срабатывания этой CVE.
При обнаружении такого паттерна скрипт явно помечает его как CVE-2026-9256.
Согласно статье depthfirst, затронутые версии включают:
Фактические исправленные версии и матрицу продуктов уточняйте в официальных уведомлениях F5 или бюллетенях безопасности дистрибутивов. Даже если версия попадает в затронутый диапазон, для эксплуатации уязвимости обычно требуется наличие определённой последовательности rewrite в конфигурации.
Скрипт выводит текущую версию NGINX и результаты сканирования конфигурации:
0.6.27 – 1.30.1 и конфигурация содержит рискованную последовательность: необходимо обновить NGINX или изменить конфигурацию.0.6.27 – 1.30.1, но конфигурация не содержит рискованную последовательность: рекомендуется обновление, но данный инструмент не обнаружил условий срабатывания.Простое сканирование полной конфигурации NGINX на текущей машине:
python3 scan_rift.py
Скрипт выполнит:
nginx -T
Если у текущего пользователя нет прав на чтение полной конфигурации, используйте sudo:
sudo python3 scan_rift.py
Также можно сканировать уже экспортированный файл конфигурации:
python3 scan_rift.py /path/to/nginx-full.conf
Например, сначала экспортировать конфигурацию, а затем сканировать:
sudo nginx -T > nginx-full.conf
python3 scan_rift.py nginx-full.conf
При отсутствии рискованных последовательностей:
--- NGINX Rift Config Scanner (CVE-2026-42945 / CVE-2026-9256) ---
Current NGINX Version: nginx version: nginx/1.23.3
Version Status: Affected version range for NGINX Open Source (0.6.27 - 1.30.1)
[+] No vulnerable CVE-2026-42945 sequences or CVE-2026-9256 patterns detected.
[Recommendation]: Current NGINX version is in the affected range, but no vulnerable config pattern was detected. Upgrade is recommended, but config risk was not found by this scanner.
При обнаружении подозрительной последовательности:
--- NGINX Rift Config Scanner (CVE-2026-42945 / CVE-2026-9256) ---
Current NGINX Version: nginx version: nginx/1.23.3
Version Status: Affected version range for NGINX Open Source (0.6.27 - 1.30.1)
[!] VULNERABLE SEQUENCE FOUND (CVE-2026-42945):
Context: location ~ ^/api/(.*)$ {
[1. Rewrite With ?] rewrite ^/api/(.*)$ /internal?migrated=true;
[2. Follow-up $N] set $original_endpoint $1;
[Action Required]: Current NGINX version is affected and vulnerable config was found. Upgrade NGINX or adjust the reported rewrite pattern.
При обнаружении подозрительного паттерна CVE-2026-9256:
--- NGINX Rift Config Scanner (CVE-2026-42945 / CVE-2026-9256) ---
Current NGINX Version: nginx version: nginx/1.23.3
Version Status: Affected version range for NGINX Open Source (0.6.27 - 1.30.1)
[!] VULNERABLE PATTERN FOUND (CVE-2026-9256):
Context: location ^~ /wengine-auth-static/ {
[Rewrite Overlapping Captures] rewrite /wengine-auth-static/((.*)) /?$1$2 break;
[Context] arguments; overlapping refs: $1/$2
[Action Required]: Current NGINX version is affected and vulnerable config was found. Upgrade NGINX or adjust the reported rewrite pattern.
После обнаружения необходимо вручную подтвердить, доступен ли данный контекст конфигурации для внешних запросов, и как можно быстрее обновить NGINX или изменить конфигурацию.
rewrite / set в контекстах location, server, if и т.д.$1, $2, после rewrite с ?.^/((.*))$ с ?$1$2.break способом обхода CVE-2026-9256; /?$1$2 break всё равно сработает.Данный скрипт является статическим сканером конфигураций, предназначенным для быстрого обнаружения высокорисковых паттернов, и не является проверкой эксплуатации уязвимости.