Специалист обнаружил серию уязвимостей в протоколе HTTP/2, получивших общее название Continuation Flood. Эти проблемы могут привести к атакам на отказ в обслуживании (DoS) и способны вывести из строя веб-серверы в некоторых имплементациях при помощи одного TCP-соединения. По словам эксперта, Continuation Flood гораздо опаснее похожей проблемы Rapid Reset, обнаруженной прошлой осенью.
Напомним, что HTTP/2 представляет собой обновленную версию протокола HTTP, стандартизированную в 2015 году и призванную повысить производительность веб-серверов за счет внедрения бинарного фрейминга (binary framing) для более эффективной передачи данных, мультиплексирования для передачи нескольких запросов и ответов через одно соединение, а также сжатия заголовков.
Проблемы Continuation Flood были обнаружены исследователем Баркетом Новотарски (Barket Nowotarski). Он утверждает, что уязвимости связаны с использованием фреймов HTTP/2 CONTINUATION, которые во многих имплементациях протокола не ограничиваются и не проверяются должным образом.
Так, сообщения HTTP/2 содержат секции заголовков и трейлеров, сериализованные в блоки. В ходе передачи такие блоки могут быть фрагментированы в несколько фреймов, а фреймы CONTINUATION используются для объединения потока.
Как объясняет Новотарски, отсутствие должной проверки фреймов позволяет злоумышленникам отправлять чрезвычайно длинные строки фреймов, просто не устанавливая флаг END_HEADERS. В результате это может приводить к сбоям в работе сервера из-за исчерпания ресурсов, которые уйдет на обработку этих фреймов.
Исследователь предупредил, что в некоторых имплементациях вывести сервер из строя можно при помощи всего одного TCP-соединения HTTP/2.
Эксперты Координационного центра CERT (CERT-CC) уже публиковали предупреждение, посвященное Continuation Flood. Уязвимостям в различных имплементациях HTTP/2 были присвоены собственные идентификаторы CVE:
- CVE-2024-27983 — затрагивает HTTP/2-сервер Node.js. Отправка нескольких HTTP/2-фреймов может спровоцировать утечку памяти из-за состояния гонки, что приводит к потенциальному отказу в облуживании;
- CVE-2024-27919 — затрагивает oghttp-кодек Envoy. Провоцирует неограниченное потребление памяти, так как не сбрасывает запрос в случае исчерпания лимита header map;
- CVE-2024-2758 — затрагивает к Tempesta FW. Ограничения не позволяют эффективно предотвращать атаки пустыми фреймами CONTINUATION, что потенциально может привести к отказу в обслуживании;
- CVE-2024-2653 — затрагивает amphp/http. Собирает фреймы CONTINUATION в неограниченный буфер, что чревато аварийным завершением работы в случае превышении лимита на размера заголовка;
- CVE-2023-45288 — затрагивает Go-пакеты net/http и net/http2. Позволяет злоумышленнику отправлять большой набор заголовков, что приводит к перерасходу ресурсов процессора;
- CVE-2024-28182 — затрагивает имплементации, использующие библиотеку nghttp2, которая продолжает получать фреймы CONTINUATION, пока это не приведет к отказу в обслуживании;
- CVE-2024-27316 — затрагивает Apache Httpd. Можно отправлять непрерывный поток фреймов CONTINUATION без установленного флага END_HEADERS;
- CVE-2024-31309 — затрагивает Apache Traffic Server. Атака Continuation Flood может привести к перерасходу ресурсов сервера;
- CVE-2024-30255 — затрагивает Envoy версии 1.29.2 и более ранних. Истощает ресурсы процессора потоком фреймов CONTINUATION.
По данным CERT-CC, уязвимость перед Continuation Flood и хотя бы одной из перечисленных CVE уже подтвердили создатели Red Hat, SUSE Linux, Arista Networks, Apache HTTP Server Project, nghttp2, Node.js, AMPHP и языка программирования Go.
По словам Новотарски, проблема Continuation Flood гораздо серьезнее уже упомянутой выше атаки HTTP/2 Rapid Reset, описанной в октябре прошлого года крупными поставщиками облачных услуг. Напомним, что тогда Google, Cloudflare и AWS, заявили, что проблема Rapid Reset спровоцировала волну самых мощных DDoS-атак за всю историю наблюдений.
«Учитывая, значимость затронутых проектов, а также тот факт, что, по данным Cloudflare Radar, на HTTP-трафик приходится свыше 70% от всех интернет-коммуникаций, можно предположить, что большая часть интернета уязвима перед легко эксплуатируемой уязвимостью: во многих случаях достаточно одного TCP-соединения, чтобы обрушить сервер», — предупреждает Новотарски.
Также исследователь полагает, что администраторам серверов будет сложно устранить проблему без соответствующих знаний о HTTP/2. Дело в том, что вредоносные запросы не будут видны в логах доступа, если на сервере не включена расширенная аналитика фреймов, которая в большинстве случаев отключена.