Исследователи из компании 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 или внедрения компенсирующих контролей на уровне сетевой инфраструктуры до выхода официальных патчей. Учитывая, что техника эксплуатирует поведение по умолчанию и не требует аутентификации, промедление с митигацией создаёт реальный риск для доступности публичных сервисов.