Новая уязвимость HTTP/2 угрожает большинству веб-серверов: атака отказа в обслуживании с усилением в тысячи раз

vulnerability

Мировое сообщество специалистов по кибербезопасности обсуждает критическую уязвимость в протоколе HTTP/2, получившую идентификатор CVE-2026-49975. Она позволяет удаленному злоумышленнику вызвать отказ в обслуживании (DoS) практически на любом современном веб-сервере, использующем конфигурацию по умолчанию. Проблема заключается в комбинации двух давно известных техник: сжатия заголовков HPACK и управления потоком данных.

Уязвимость CVE-2026-49975

Уязвимость обнаружила система искусственного интеллекта Codex, разработанная для анализа кода. Исследователи выяснили, что один байт данных в запросе может заставить сервер выделить несколько килобайт оперативной памяти. Атака получила название HTTP/2 Bomb (бомба HTTP/2). Она затрагивает серверы nginx, Apache httpd, Microsoft IIS, Envoy и Cloudflare Pingora. Причем уязвимое поведение присутствует в стандартных настройках каждого из этих продуктов, что повышает уровень риска до высокого.

Как именно работает эксплойт? В протоколе HTTP/2 используется схема сжатия заголовков HPACK. Она позволяет ссылаться на ранее переданные заголовки по индексу, экономя трафик. Однако злоумышленник может заполнить динамическую таблицу одним небольшим заголовком, а затем тысячи раз ссылаться на него. Каждая такая ссылка занимает всего один байт в канале передачи, но сервер вынужден выделять память под полный заголовок - от 70 байт для nginx и IIS до 4000 байт для Apache httpd и Envoy. Затем применяется вторая техника: устанавливается нулевое окно для управления потоком. Из-за этого сервер не может завершить отправку ответа и продолжает удерживать все выделенные данные, пока клиент не пришлет специальные кадры WINDOW_UPDATE. В результате один клиент с домашнего компьютера, подключенного по каналу 100 Мбит/с, способен за считанные секунды исчерпать гигабайты оперативной памяти целевого сервера.

Приведем конкретные цифры. Для Envoy и Apache httpd коэффициент усиления достигает 5700 и 4000 раз соответственно. Это означает, что пропуская около 5-10 мегабайт трафика, злоумышленник вынуждает сервер выделить более 30 гигабайт памяти всего за 10-20 секунд. Для nginx и IIS усиление скромнее - около 70 раз, но и этого достаточно, чтобы за 45 секунд потребить 32-64 гигабайта. В реальной атаке лучше не доводить процесс до аварийного завершения (OOM), когда он умирает и перезапускается чистым. Гораздо эффективнее удерживать давление чуть ниже порога убийства, заставляя систему использовать файл подкачки, и тем самым замедлять все остальные запросы на сервере.

Последствия этой уязвимости крайне серьезны. Поисковый сервис Shodan выявил более 880 тысяч веб-сайтов, поддерживающих HTTP/2 и работающих на одном из перечисленных серверов. Правда, многие из них находятся за CDN, который значительно сложнее вывести из строя. Тем не менее, для публичных серверов без защиты атака означает полную недоступность сайта или приложения. Бизнес может понести финансовые потери из-за простоя, потери клиентов и репутационного ущерба. Кроме того, поскольку эксплойт не требует специальных привилегий и легко воспроизводится, он представляет угрозу для любого интернет-ресурса.

Теперь о мерах защиты. Разработчики уже отреагировали на инцидент. Компания nginx выпустила версию 1.29.8, в которой появилась директива max_headers с ограничением в 1000 заголовков. Apache httpd получил исправление в модуле mod_httpd версии 2.0.41, где теперь cookie-заголовки учитываются при подсчете лимита полей. Владельцам серверов Microsoft IIS, Envoy и Cloudflare Pingora пока рекомендуется отключить HTTP/2, если это возможно, либо разместить перед сервером дополнительный шлюз, который будет принудительно ограничивать число заголовков в каждом запросе. В качестве временной компенсации можно установить жесткие лимиты на память рабочего процесса с помощью cgroups, ulimit -v или контейнеров. Даже если бомба сработает, процесс будет аварийно завершен и перезапущен, не давая атаке парализовать всю машину.

Стоит отметить, что данная уязвимость демонстрирует слабость самой спецификации протокола. В документе RFC 7541 есть раздел, предупреждающий о риске исчерпания памяти через HPACK, но он рассматривает только коэффициент сжатия как единственный вектор. Проблема в том, что усиление - лишь половина уравнения. Даже небольшое усиление становится опасным, если сервер не освобождает память вовремя - а HTTP/2 позволяет клиенту удерживать соединение почти бесплатно. Ни один из разработчиков не учел комбинацию этих двух механизмов, хотя оба были известны отдельно еще с 2016 года.

Для специалистов по информационной безопасности это важный урок: при проектировании защитных мер нужно рассматривать не только изолированные техники, но и их цепочки. Атака HTTP/2 Bomb - яркий пример того, как композиция давно известных методов порождает новую критическую угрозу. Остается надеяться, что производители оперативно выпустят патчи для всех затронутых продуктов, а владельцы серверов немедленно применят доступные обновления или временные меры защиты.

Ссылки

 

Комментарии: 0