
NGINX RCE эксплойты
RCE Proof of concept для CVE-2026-42945 — критического переполнения буфера в куче в ngx_http_rewrite_module NGINX, появившегося в 2008 году. Уязвимость позволяет неаутентифицированному удалённому выполнению кода на серверах, использующих директивы rewrite и set.
Эта уязвимость — наряду с тремя другими проблемами повреждения памяти (CVE-2026-42946, CVE-2026-40701, CVE-2026-42934) — была автономно обнаружена системой анализа безопасности depthfirst после одного клика по подключению исходного кода NGINX.
Хотите находить подобные проблемы в своём коде? Попробуйте ту же систему на https://depthfirst.com/open-defense.
Скриптовый движок NGINX использует двухпроходный процесс: сначала вычисляется необходимый размер буфера, затем данные копируются. Флаг is_args устанавливается в основном движке, когда замена в rewrite содержит ?, но проход вычисления длины выполняется на заново обнулённом под-движке. Таким образом:
is_args = 0 → возвращает исходную длину захвата.is_args = 1 → вызывает ngx_escape_uri с NGX_ESCAPE_ARGS, расширяя каждый подлежащий экранированию байт до 3 байт.Копирование переполняет недостаточно большой буфер в куче контролируемыми URI-данными. Эксплуатация использует межзапросный heap feng shui для повреждения указателя cleanup соседнего ngx_pool_t (распыляемого через тела POST-запросов, поскольку байты URI не могут содержать нулевые байты), перенаправляя его на поддельный 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
K000161616: Уязвимость NGINX ngx_http_v3_module — HTTP/3 QPACK выделяет insert_buffer сессии из пула однонаправленного потока кодера. Закрытие этого потока освобождает пул, в то время как сессия сохраняет висячий указатель, поэтому последующий поток кодера вызывает use-after-free в куче в рабочем процессе NGINX.
K000162097: Уязвимость директивы map и сопоставления с регулярными выражениями в NGINX — сопоставление регулярных выражений в директиве map с переменными захвата может вызвать переполнение буфера в куче в рабочем процессе NGINX.
Ошибка находится в двухпроходной оценке сложных значений в скриптовом движке потоков. В уязвимой конфигурации stream с использованием ssl_preread управляемый атакующим TLS SNI передаётся в переменные, основанные на регулярных выражениях. NGINX сначала вычисляет длину выходного буфера, затем копирует выходные данные. Регулярное выражение в map может обновить глобальное состояние захвата между этими проходами: проход длины учитывает малое значение, а проход копирования читает более крупный захват регулярного выражения, такой как $1, что приводит к записи за пределы буфера в куче в рабочем процессе.
Прилагаемый PoC CVE-2026-42533/ — это эксплойт полного цикла. Он использует примитив утечки из потока для восстановления баз кучи и libc для обхода ASLR, распыляет поддельные записи ngx_pool_cleanup_s через тела HTTP-запросов, а затем использует переполнение для повреждения указателя очистки соседнего пула NGINX. Когда повреждённый пул уничтожается, диспетчеризация очистки перенаправляется на system() из libc, выполняющий указанную команду.