
🛡️ Скрипт для проверки NGINX CVE-2026-42945
Организации, использующие NGINX Open Source, NGINX Plus или ingress/контроллеры на базе NGINX, должны проверить, затронуты ли они уязвимостью CVE-2026-42945, и установить исправления или перенастроить до того, как попытки эксплуатации достигнут производственных границ.
Этот репозиторий предоставляет только для чтения, не эксплуатирующий сканер для авторизованного защитного использования в системах, которыми вы владеете или которые вам разрешено тестировать.
| Пункт | Детали |
|---|
| CVE | CVE-2026-42945 |
| Название | NGINX Rift |
| Компонент | ngx_http_rewrite_module (переполнение буфера кучи) |
| Затронутые версии | NGINX Open Source с 0.6.27 по 1.30.0 |
| Исправленные версии | 1.30.1, 1.31.0 (+ патчи от вендоров) |
| CVSS | 9.2 (Критический) |
Эксплуатация требует специфической конфигурации rewrite:
rewrite, использующая безымянный захват PCRE ($1, $2, …) в замене?rewrite, if или set в той же области server/location использует этот захватВоздействие:
| Проверка | Метод |
|---|---|
| Версия | Локально nginx -v или пассивный заголовок Server |
| Триггер конфигурации | Эвристический разбор nginx -T или файла конфигурации |
| ASLR (Linux) | /proc/sys/kernel/randomize_va_space |
| Рекомендации | Приоритетные шаги по устранению |
Он не отправляет специально созданные запросы для эксплуатации и не пытается вызвать падение рабочих процессов.
cd nginx-cve-2026-42945
chmod +x scan_nginx_rift.py
# Best: run on each NGINX host with sudo
sudo python3 scan_nginx_rift.py --local
# Or scan a full config dump
sudo nginx -T 2>&1 | tee /tmp/nginx-full.txt
python3 scan_nginx_rift.py --local --config /tmp/nginx-full.txt
# Passive remote banner check (version only)
python3 scan_nginx_rift.py --url https://your-site.example/
# JSON for automation
python3 scan_nginx_rift.py --local --json --fail-on high
Код выхода 1, когда риск ВЫСОКИЙ или КРИТИЧЕСКИЙ (используйте --fail-on для настройки шлюзов CI).
| Риск | Значение |
|---|---|
| КРИТИЧЕСКИЙ | Уязвимая версия + шаблон rewrite, соответствующий известному триггеру |
| ВЫСОКИЙ | Уязвимая версия и подозрительные rewrite, или неизвестная версия с вероятным триггером |
| СРЕДНИЙ | Уязвимая версия, триггер не найден в просканированной конфигурации (все равно установите исправление) |
| НИЗКИЙ | Исправленная версия, но остаются рискованные шаблоны rewrite |
| ИНФО | Исправлена и нет шаблонов триггера в просканированной конфигурации |
Обновите до NGINX 1.30.1 / 1.31.0+ или пакета безопасности вашей ОС/вендора.
Перезапустите рабочие процессы после обновления (systemctl restart nginx), а не только reload.
Проверьте полную конфигурацию: sudo nginx -T и найдите правила rewrite с $1/$2 и ?.
Временная мера: используйте именованные захваты вместо $1, $2:
# Vulnerable pattern (simplified)
rewrite ^/api/(.*)$ /internal?migrated=true;
set $original_path $1;
# Safer pattern
rewrite ^/api/(?<path>.*)$ /internal?migrated=true;
set $original_path $path;
Убедитесь, что ASLR включен на Linux (randomize_va_space=2).
Проверьте Kubernetes ingress, диаграммы Helm и сгенерированные конфигурации — не только /etc/nginx/nginx.conf.
Используйте только в инфраструктуре, которую вы уполномочены проверять. Несанкционированное сканирование может нарушать политику или закон.