
Эксплойт концепции (Proof-of-concept) для CVE-2026-42945, критическое переполнение кучи в модуле rewrite NGINX, позволяющее удаленное выполнение кода без аутентификации. Включает скрипт настройки и эксплойт на Python для получения оболочки.
PoC удаленного выполнения кода для CVE-2026-42945 — критического переполнения кучи в модуле ngx_http_rewrite_module NGINX, появившегося в 2008 году. Ошибка позволяет неаутентифицированному злоумышленнику удаленно выполнить код на серверах, использующих директивы rewrite и set.
Эта уязвимость — вместе с тремя другими ошибками повреждения памяти (CVE-2026-42946, CVE-2026-40701, CVE-2026-42934) — была автономно обнаружена системой анализа безопасности depthfirst после одного клика при подключении исходного кода NGINX.
Скриптовый движок NGINX использует двухпроходный процесс: сначала вычисляет необходимый размер буфера, затем копирует данные. Флаг is_args устанавливается в главном движке, когда замена в rewrite содержит ?, но проход вычисления длины выполняется на свежеобнуленном поддвижке. Таким образом:
is_args = 0 → возвращает сырую длину захвата.is_args = 1 → вызывает ngx_escape_uri с NGX_ESCAPE_ARGS, расширяя каждый экранируемый байт до 3 байт.Копирование переполняет слишком маленький буфер кучи данными URI, контролируемыми злоумышленником. Эксплуатация использует межзапросную «фэн-шуй» кучу для повреждения указателя cleanup соседнего ngx_pool_t (распыляется через тела POST, так как байты URI не могут содержать нулевые байты), перенаправляя его на поддельный ngx_pool_cleanup_s, вызывающий system() при уничтожении пула.
Подробнее об этой ошибке читайте в нашем https://t.me/p3Nt3st3rsTAr
| Продукт | Затронутые версии | Исправлено в |
|---|---|---|
| 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.3 LTS.
./setup.sh — сборка контейнера.docker compose -f env/docker-compose.yml up — запуск уязвимого сервера NGINX.python3 poc.py --shell — получение оболочки.