Критическая уязвимость HTTP/2 Bomb: механизм исчерпания памяти сервера

50
Критическая уязвимость HTTP/2 Bomb: механизм исчерпания памяти сервера

Современная веб-инфраструктура полагается на высокую эффективность протокола HTTP/2, однако механизмы оптимизации этого протокола могут быть использованы для проведения массированных атак типа «отказ в обслуживании» (DoS). Исследователи из компании Calif выявили серьезную брешь, получившую название HTTP/2 Bomb. Опасность данной уязвимости заключается в том, что для полной остановки сервера не требуется развертывания сложной ботнет-сети — достаточно одного клиентского устройства со стандартным интернет-каналом скоростью 100 Мбит/с.

Суть проблемы кроется в реализации сжатия заголовков HPACK. Злоумышленник отправляет на сервер практически пустой заголовок, который содержит сотни тысяч инструкций. Эти инструкции заставляют сервер многократно распаковывать и ссылаться на один и тот же небольшой элемент данных. В результате возникает лавинообразный рост потребления оперативной памяти. Чтобы закрепить эффект и не дать серверу очистить ресурсы, атакующий использует механизм Flow Control (управление потоком), устанавливая размер окна (flow-control window) на значение 0. Это принудительно приостанавливает отправку ответа сервером, при этом занятая память остается заблокированной. Для поддержания соединения в активном состоянии хакер отправляет периодические запросы размером всего в 1 байт.

Эффективность такой атаки крайне высока: всего за 10–20 секунд один клиент способен поглотить от 32 до 64 ГБ оперативной памяти. Степень уязвимости зависит от конкретной реализации сервера. Наибольший расход ресурсов наблюдается в Envoy (около 5700 байт на каждый байт в индексе) и Apache httpd (около 4000 байт).

Более устойчивыми, но все еще подверженными атаке, оказались nginx, IIS и Pingora, где потребление составляет примерно 70 байт на байт индекса.

Методы нейтрализации и исправления

Для защиты систем от HTTP/2 Bomb необходимо обновить серверное ПО до версий, где внедрены ограничения на количество обрабатываемых заголовков и объем памяти. Решение заключается в жестком лимитировании ресурсов, которые может потребовать один запрос при распаковке HPACK.

  1. Для пользователей nginx требуется обновление до версии 1.29.8. В этой версии была внедрена директива max_headers (заимствованная из freenginx), которая по умолчанию ограничивает обработку до 1000 заголовков.
  2. Владельцам Envoy необходимо перейти на версии 1.35.11 или 1.36.7, где реализованы параметры max_headers_count и mutable_max_request_headers_kb.
  3. Для Apache требуется обновление модуля mod_http2 до версии 2.0.41.

Стоит отметить, что сервер Angie оказался невосприимчив к данной атаке, так как механизмы защиты были интегрированы в него еще в 2024 году, начиная с версии 1.8.0. В то же время, на текущий момент решения для Microsoft IIS и Cloudflare Pingora остаются менее доступными или отсутствуют в стандартных конфигурациях.

В качестве рекомендации для системных администраторов и DevOps-инженеров: при невозможности немедленного обновления ПО следует рассмотреть возможность использования WAF (Web Application Firewall) для фильтрации аномальных HTTP/2 запросов или переход на альтернативные реализации серверов, имеющие встроенную защиту от манипуляций с HPACK. Основным критерием безопасности сейчас является наличие строгого лимита на количество заголовков в одном соединении, что предотвращает бесконтрольное раздувание памяти сервера.

Последнее изменение:

0 Комментарии
Популярные
Новые Старые