Skip to content
RiverCore
NGINX Rift: Вразливість 18-річної Давності у Rewrite Дозволяє Неавторизований RCE
NGINX RCE vulnerabilityCVE-2026-42945heap overflowNGINX rewrite module remote code executionunauthenticated RCE exploit 2026

NGINX Rift: Вразливість 18-річної Давності у Rewrite Дозволяє Неавторизований RCE

15 тра 20267 хв. читанняJames O'Brien

В археології є стара легенда про римські акведуки: свинцеві труби отруювали воду токсинами протягом століть, але ніхто цього не помічав, бо акведуки продовжували постачати воду. NGINX щойно пережив свій «момент свинцевої труби». Переповнення буфера купи знаходилося в rewrite-модулі приблизно з часів адміністрації Буша, сумлінно проксуючи половину інтернету, і ніхто не помічав цього досі.

Вода, здається, смакує нормально. Але труба отруєна.

Що Сталося

У середу, 14 травня 2026 року, F5 опублікувала попередження про критичну вразливість у NGINX Plus та NGINX Open Source. Баг під кодовою назвою NGINX Rift, зареєстрований як CVE-2026-42945, має оцінку CVSS v4 — 9.2 і залишався непоміченим протягом 18 років. Як повідомляє The Hacker News, вразливість виявив дослідник під псевдонімом depthfirst і відповідально розкрив її 21 квітня 2026 року.

Це переповнення буфера купи в ngx_http_rewrite_module — частині NGINX, що відповідає за переписування URL. Формулювання F5: «NGINX Plus та NGINX Open Source мають вразливість у модулі ngx_http_rewrite_module». Умови спрацьовування специфічні, але не екзотичні: директива rewrite, за якою йде ще одна rewrite, if або set, з використанням безіменного PCRE-захоплення на кшталт $1 чи $2, і рядок заміни, що містить знак питання. Такий патерн конфігурації зустрічається повсюди. Кожен, хто колись вручну писав ланцюжок редиректів для SEO-міграції, точно це робив.

Зона ураження широка. NGINX Plus від R32 до R36 є вразливими, виправлення доступні в R32 P6 та R36 P4. NGINX Open Source від 1.0.0 до 1.30.0 є ураженим, виправлено у версіях 1.30.1 та 1.31.0. Найсумніше: версії від 0.6.27 до 0.9.7 також вразливі, і F5 не планує для них виправлень. Продукти F5, що базуються на NGINX, також потрапили під удар: NGINX Instance Manager, F5 WAF для NGINX, App Protect WAF та DoS, Gateway Fabric і Ingress Controller у кількох основних версіях. У тому ж попередженні виправлено ще три CVE — про них трохи нижче.

Технічна Анатомія

Суть проблеми неприємно елегантна. Коли NGINX обробляє директиву rewrite з безіменним PCRE-захопленням і рядком заміни, що містить знак питання, воркер неправильно обчислює розмір виділення пам'яті для переписаного URI. Байти записуються за межами буфера. Байти, що переповнюють буфер, не є випадковими даними від ядра — вони походять з URI зловмисника. Depthfirst прямо зазначає: «байти, записані за межами виділеної пам'яті, походять з URI зловмисника, тому пошкодження формується ним самим, а не є випадковим».

Ця відмінність принципова. Випадкове пошкодження купи — це примітив для відмови в обслуговуванні. Керована корупція купи — це примітив для експлойту. Різниця між «ми завалили ваш воркер» і «ми виконуємо свій код у вашому воркері» залежить від того, чи контролює зловмисник, що і куди потрапляє. Тут — контролює.

Попередні умови достатньо короткі, щоб помістити на стікер. Без автентифікації. Без сесії. Без попереднього доступу. Цитуємо depthfirst: «Зловмисник, який може досягти вразливого сервера NGINX через HTTP, може надіслати єдиний запит, що переповнює купу у воркер-процесі та досягає виконання віддаленого коду. Немає жодного кроку автентифікації, жодних вимог до попереднього доступу і жодної потреби в існуючій сесії».

Один HTTP-запит. Ось і весь ланцюжок експлойту.

Для повноцінного RCE потрібно, щоб ASLR було вимкнено на цільовій системі — це єдиний суттєвий пом'якшувальний фактор. На захищених сучасних дистрибутивах Linux це не типова конфігурація, але кожен, хто проводив аудит парку різновікових VM у платіжному або iGaming-середовищі, знає: машини з вимкненим ASLR трапляються частіше, ніж мали б, особливо в старих базових образах контейнерів і кастомних збірках ядра. Навіть на системах з увімкненим ASLR воркер падає в петлю перезапусків. Повторні запити тримають воркери в циклі, знижуючи доступність кожного сайту, що обслуговується цим екземпляром. Тож це RCE для незахищених цілей і надійний DoS для всіх інших.

Три супутні CVE з того ж попередження варті уваги. CVE-2026-42946 (CVSS 8.3) — надмірне виділення пам'яті в модулях SCGI та uWSGI, що експлуатується через AitM, якщо налаштовано scgi_pass або uwsgi_pass. CVE-2026-40701 (CVSS 6.3) — використання пам'яті після звільнення в SSL-модулі за умов увімкненої перевірки клієнтського сертифіката та OCSP stapling. CVE-2026-42934 (CVSS 6.3) — читання за межами буфера в модулі charset при певних конфігураціях proxy-buffering. Жодна з них не є NGINX Rift, але якщо вже патчити — патчіть усі.

Хто Постраждає

NGINX є балансувальником навантаження та зворотним проксі за замовчуванням для значної частини інтернет-інфраструктури. Якщо у вашому стеку є edge-рівень — швидше за все, там є NGINX.

В iGaming типовий фронтенд букмекерської контори стоїть за шаром NGINX, що виконує гео-маршрутизацію, A/B-тести та legacy URL-переписування для цільових сторінок на різних ринках. Такі ланцюжки rewrite, що накопичувалися десятиліттями через регуляторні злиття, — це саме та конфігурація, яка активує цей CVE. Отруєний акведук весь цей час обробляв ставки.

Fintech — у тій самій ситуації. Платіжні шлюзи регулярно використовують NGINX як рівень TLS-термінації та маршрутизації перед безстатусними API-сервісами. Команда з відповідності вже наступного понеділка захоче письмову відповідь на запитання «чи будь-які з наших воркерів у зоні PCI-відповідності працювали на вразливій версії?». Усі, хто використовує NGINX App Protect WAF версій від 4.9.0 до 4.16.0 або від 5.1.0 до 5.8.0, чи F5 WAF для NGINX від 5.9.0 до 5.12.1, матимуть особливе задоволення пояснювати, чому їхній WAF сам виявився вразливим.

Команди крипто- та DeFi-проєктів, що використовують NGINX Ingress Controller у Kubernetes (уражені версії 3.5.0–3.7.2, 4.0.0–4.0.1 та 5.0.0–5.4.1), повинні негайно перевірити маніфести своїх кластерів. Скомпрометований ingress-под у багатотенантному кластері — це надзвичайно поганий день.

Ad-tech, мабуть, найбільш вразлива з усіх. Уся вертикаль працює на NGINX-фронтованих bid-ендпоінтах із величезними обсягами запитів, де воркер, що падає в петлю перезапусків, — це не просто простій, а втрата виручки, яку вимірюють у доларах за секунду. Повторні DoS-запити проти RTB-біржі були б руйнівними навіть без шляху до RCE.

Нарешті, когорта від 0.6.27 до 0.9.7 без запланованого виправлення. Це NGINX до 2012 року. Будь-хто, хто досі його використовує, — живе в музейному експонаті, а музеї, як правило, не мають ефективних пайплайнів патчування.

Інструкція для Команд Безпеки

Перше — інвентаризація. Запустіть щось по всьому парку, що виконує nginx -v і звіряє з переліком вразливих версій. Не довіряйте лише даним пакетного менеджера, бо в контейнеризованих середовищах запущений бінарний файл часто відрізняється від того, що вважає встановленим хост. Також перевірте sidecar-проксі у service mesh — чимало з них постачають NGINX під капотом.

Друге — патч. Користувачі NGINX Plus переходять на R32 P6 або R36 P4. Користувачі Open Source переходять на 1.30.1 або 1.31.0. Якщо ви використовуєте похідні продукти F5 (Instance Manager, App Protect WAF, Gateway Fabric, Ingress Controller), звіртеся з матрицею версій у попередженні та встановіть відповідне виправлення.

Третє — якщо не можете патчити цього тижня, обхідне рішення F5 є зрозумілим: замініть безіменні захоплення на іменовані в кожній ураженій директиві rewrite. Тобто rewrite ^/foo/(.*)$ /bar/$1?baz=1; перетворюється на версію з іменованими групами на кшталт (?<path>.*) та $path. Пройдіться grep по конфігах в пошуку цього патерну та перепишіть їх. Це нудна частина, але саме тут, якщо пропустити один конфіг-файл, обхідне рішення мовчки не спрацює.

Четверте — переконайтеся, що ASLR увімкнено на кожному хості, де запущено NGINX. Команда cat /proc/sys/kernel/randomize_va_space повинна повертати 2. Це не зупинить DoS-вектор, але переводить RCE з категорії «один запит» у «набагато складніше».

П'яте — полювання на сліди. Експлойт — це сформовані HTTP-запити з URI, насиченими PCRE-захопленнями та знаками питання. Дістаньте тижневі журнали доступу та шукайте незвичні патерни, що потрапляють на rewrite-ендпоінти. Каталог KEV від CISA, швидше за все, швидко додасть цю вразливість після публікації інформації про експлуатацію — стежте за оновленнями.

Ключові Висновки

  • CVE-2026-42945 під кодовою назвою NGINX Rift — це переповнення буфера купи в ngx_http_rewrite_module з оцінкою CVSS 9.2, яке 18 років залишалося непоміченим і дозволяє неавторизованому зловмиснику виконати RCE одним сформованим HTTP-запитом.
  • Вразливість спрацьовує, коли директива rewrite використовує безіменні PCRE-захоплення з рядком заміни, що містить знак питання, — патерн конфігурації, поширений у довготривалих виробничих середовищах.
  • Патчі доступні в NGINX Plus R32 P6 та R36 P4, а також у NGINX Open Source 1.30.1 та 1.31.0. Версії від 0.6.27 до 0.9.7 є вразливими без запланованого виправлення.
  • Три супутніх CVE (CVE-2026-42946, CVE-2026-40701, CVE-2026-42934) виправлено в тому ж попередженні — їх слід усунути разом.
  • Акведук весь цей час переносив ваш трафік, але свинець тепер видно. Проведіть інвентаризацію, встановіть патчі та замініть безіменні захоплення на іменовані як негайний обхідний захід.

Часті Запитання

Q: Що таке CVE-2026-42945 і наскільки це серйозно?

CVE-2026-42945 під кодовою назвою NGINX Rift — це вразливість переповнення буфера купи в rewrite-модулі NGINX з оцінкою CVSS v4 — 9.2. Вона дозволяє неавторизованому зловмиснику досягти виконання віддаленого коду або відмови в обслуговуванні, надіславши єдиний сформований HTTP-запит. Вразливість існувала непоміченою протягом 18 років.

Q: Які версії NGINX уражені NGINX Rift?

NGINX Plus від R32 до R36, NGINX Open Source від 1.0.0 до 1.30.0, а також застарілий діапазон від 0.6.27 до 0.9.7 — усі вони уражені. Виправлення доступні в NGINX Plus R32 P6 та R36 P4, а також у NGINX Open Source 1.30.1 та 1.31.0. Для серії від 0.6.27 до 0.9.7 виправлення не заплановано.

Q: Який найшвидший обхідний захід, якщо неможливо патчити негайно?

Рекомендований F5 захід — замінити безіменні PCRE-захоплення (наприклад, $1, $2) на іменовані в кожній ураженій директиві rewrite. Також варто переконатися, що ASLR увімкнено на всіх хостах із NGINX, оскільки шлях до RCE специфічно вимагає вимкненого ASLR для надійного виконання коду.

JO
James O'Brien
RiverCore Analyst · Dublin, Ireland
ПОДІЛИТИСЯ
// RELATED ARTICLES
ГоловнаРішенняПроєктиПро насКонтакт
Новини06
Дублін, Ірландія · ЄСGMT+1
LinkedIn
🇺🇦UK