Дослідники з компанії Calif опублікували опис нової техніки віддаленої атаки типу «відмова в обслуговуванні», що отримала назву HTTP/2 Bomb. За даними дослідників, вразлива поведінка наявна в конфігураціях HTTP/2 за замовчуванням на серверах NGINX, Apache HTTPD, Microsoft IIS, Envoy і Cloudflare Pingora. Техніка поєднує два відомі підходи — компресійну бомбу та утримання з’єднання в стилі Slowloris — для вичерпання оперативної пам’яті сервера. Патчі доступні лише для NGINX і Apache HTTPD; для решти продуктів виправлення на момент публікації відсутні. Адміністраторам серверів із увімкненим HTTP/2 рекомендується негайно оцінити релевантність загрози та вжити заходів з мітимації.
Механізм атаки
Атака націлена на HPACK — алгоритм стиснення заголовків у протоколі HTTP/2, який використовує кодування Хаффмана і, за даними Cloudflare, забезпечує в середньому 30-відсоткове скорочення розміру заголовків. HPACK був спроєктований як стійка до атак класу CRIME заміна загальному стисненню заголовків.
Ключова відмінність HTTP/2 Bomb від класичної HPACK Bomb (CVE-2016-6581, розкрита у 2016 році) полягає в джерелі підсилення. Класичний варіант поміщав велике значення до таблиці HPACK і багаторазово посилався на нього, що призвело до появи захисних лімітів на сумарний розмір декодованих заголовків. Новий варіант діє інакше: заголовки практично порожні, а підсилення досягається за рахунок службових структур даних, які сервер виділяє для кожного запису в таблиці. Ліміт на розмір декодованих даних не спрацьовує, оскільки фактично нічого декодувати.
Друга складова атаки — утримання з’єднання. Зловмисник встановлює нульове вікно керування потоком (flow-control window), що не дозволяє серверу звільнити виділену пам’ять. Цей прийом подібний до атаки Slowloris, яка утримує велику кількість HTTP-з’єднань відкритими, виснажуючи ресурси сервера на прикладному рівні.
Дослідники також вказують на зв’язок із низкою раніше відомих вразливостей у реалізаціях HTTP/2: CVE-2016-8740 (DoS через спеціально сформовані фрейми CONTINUATION в Apache HTTP Server) і CVE-2016-1546 (виснаження робочих потоків в HTTP/2-з’єднанні Apache).
Оцінка впливу
За заявами Calif, які слід сприймати з застереженням як дані з єдиного джерела без незалежного підтвердження, один клієнт із підключенням 100 Мбіт/с здатен зробити вразливий сервер недоступним за лічені секунди. Також стверджується, що один клієнт може захопити й утримувати до 32 ГБ серверної пам’яті на Apache HTTPD і Envoy приблизно за 20 секунд.
Як підкреслюють дослідники, фундаментальна проблема полягає в тому, що специфікація HTTP/2 оцінює ризик для пам’яті виключно через коефіцієнт підсилення, тоді як критичним фактором є час утримання виділеної пам’яті. Коефіцієнт 70:1 нешкідливий, якщо пам’ять звільняється після завершення запиту, але перетворюється на вектор атаки, коли протокол дозволяє клієнту утримувати з’єднання відкритим практично безкоштовно.
Потенційно зачеплені всі організації, що використовують згадані веб-сервери з увімкненим HTTP/2 у конфігурації за замовчуванням. Найбільшому ризику піддаються публічно доступні сервери, які обробляють прямі HTTP/2-з’єднання від клієнтів. Важливо зазначити: активна експлуатація в реальних атаках на цей момент не зафіксована, жоден із пов’язаних CVE не внесено до каталогу CISA KEV. Статус загрози — наявність публічного PoC-опису.
Рекомендації з мітимації
Доступні заходи захисту залежать від використовуваного серверного ПЗ:
- Apache HTTPD — оновити модуль mod_http2 до версії v2.0.41, що містить виправлення. Якщо оновлення неможливе — вимкнути HTTP/2, встановивши директиву
Protocols http/1.1. - NGINX — за даними дослідників, виправлення доступне у версії 1.29.8+, яка додає директиву
max_headersзі значенням за замовчуванням 1000. Якщо оновлення неможливе, рекомендується вимкнути HTTP/2 директивоюhttp2 off;. Слід враховувати, що ці відомості щодо версії NGINX отримані з єдиного джерела й не підтверджені офіційним бюлетенем NGINX. - Microsoft IIS, Envoy, Cloudflare Pingora — на момент публікації дослідження патчі були відсутні. Для цих продуктів єдиним доступним заходом залишається вимкнення HTTP/2, якщо це прийнятно для інфраструктури, або обмеження кількості одночасних HTTP/2-з’єднань на рівні балансувальника навантаження чи WAF.
Додатково рекомендується:
- Провести аудит конфігурацій веб-серверів на предмет використання HTTP/2 за замовчуванням.
- Налаштувати моніторинг аномального споживання пам’яті процесами веб-сервера.
- Обмежити максимальну кількість одночасних HTTP/2-з’єднань з однієї IP-адреси.
- Відстежувати появу офіційних бюлетенів безпеки від вендорів дотичних продуктів.
Організаціям, які експлуатують Apache HTTPD і NGINX з HTTP/2, слід у пріоритетному порядку застосувати доступні оновлення — mod_http2 v2.0.41 для Apache і версію 1.29.8+ для NGINX. Для серверів Microsoft IIS, Envoy і Cloudflare Pingora необхідно оцінити можливість тимчасового вимкнення HTTP/2 або впровадження компенсуючих контролів на рівні мережевої інфраструктури до виходу офіційних патчів. З огляду на те, що техніка експлуатує поведінку за замовчуванням і не потребує автентифікації, зволікання з мітимацією створює реальний ризик для доступності публічних сервісів.