Специалист выявил ряд уязвимостей в протоколе HTTP/2, объединенных под общим названием Continuation Flood. Эти уязвимости могут стать причиной атак типа отказ в обслуживании (DoS), способных вывести из строя веб-серверы в некоторых реализациях с помощью одного TCP-соединения. Эксперт отмечает, что Continuation Flood представляет большую опасность, чем аналогичная проблема Rapid Reset, обнаруженная ранее.
HTTP/2 является обновленной версией протокола HTTP, принятой в 2015 году. Его цель - улучшить производительность веб-серверов за счет использования бинарного фрейминга для более эффективной передачи данных, мультиплексирования для одновременной отправки нескольких запросов и ответов через одно соединение, а также сжатия заголовков.
Уязвимости Continuation Flood были обнаружены исследователем Баркетом Новотарски. Он утверждает, что они связаны с использованием фреймов HTTP/2 CONTINUATION, которые во многих реализациях протокола не контролируются и не проверяются должным образом.
В ходе передачи сообщения HTTP/2, содержащие разделы заголовков и трейлеров, сериализуются в блоки, которые могут быть разбиты на несколько фреймов. Фреймы CONTINUATION используются для объединения потока.
Отсутствие надлежащей проверки фреймов позволяет злоумышленникам отправлять очень длинные строки фреймов, просто не устанавливая флаг END_HEADERS. Это может привести к сбоям в работе сервера из-за исчерпания его ресурсов, необходимых для обработки этих фреймов.
Баркет Новотарски предупреждает, что в некоторых реализациях вывести сервер из строя можно с помощью всего одного TCP-соединения HTTP/2.
HTTP/2 является обновленной версией протокола HTTP, принятой в 2015 году. Его цель - улучшить производительность веб-серверов за счет использования бинарного фрейминга для более эффективной передачи данных, мультиплексирования для одновременной отправки нескольких запросов и ответов через одно соединение, а также сжатия заголовков.
Уязвимости Continuation Flood были обнаружены исследователем Баркетом Новотарски. Он утверждает, что они связаны с использованием фреймов HTTP/2 CONTINUATION, которые во многих реализациях протокола не контролируются и не проверяются должным образом.
В ходе передачи сообщения HTTP/2, содержащие разделы заголовков и трейлеров, сериализуются в блоки, которые могут быть разбиты на несколько фреймов. Фреймы CONTINUATION используются для объединения потока.
Отсутствие надлежащей проверки фреймов позволяет злоумышленникам отправлять очень длинные строки фреймов, просто не устанавливая флаг END_HEADERS. Это может привести к сбоям в работе сервера из-за исчерпания его ресурсов, необходимых для обработки этих фреймов.
Баркет Новотарски предупреждает, что в некоторых реализациях вывести сервер из строя можно с помощью всего одного TCP-соединения HTTP/2.
Координационный центр CERT уже выпустил предупреждение относительно уязвимостей Continuation Flood. Уязвимости в различных реализациях HTTP/2 получили свои идентификаторы CVE:
- CVE-2024-27983 затрагивает HTTP/2-сервер Node.js. Отправка нескольких HTTP/2-фреймов может вызвать утечку памяти из-за состояния гонки, что приводит к потенциальному отказу в обслуживании.
- CVE-2024-27919 затрагивает кодк Envoy. Неограниченное потребление памяти происходит из-за отсутствия сброса запроса при исчерпании лимита header map.
- CVE-2024-258 затрагивает 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 истощает ресурсы процессора.
Создатели Red Hat, SUSE Linux, Arista Networks, Apache HTTP Server Project, nghttp2, Node.js, AMPHP и языка программирования Go подтвердили уязвимость перед Continuation Flood и хотя бы одной из перечисленных CVE.
- CVE-2024-27983 затрагивает HTTP/2-сервер Node.js. Отправка нескольких HTTP/2-фреймов может вызвать утечку памяти из-за состояния гонки, что приводит к потенциальному отказу в обслуживании.
- CVE-2024-27919 затрагивает кодк Envoy. Неограниченное потребление памяти происходит из-за отсутствия сброса запроса при исчерпании лимита header map.
- CVE-2024-258 затрагивает 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 истощает ресурсы процессора.
Создатели Red Hat, SUSE Linux, Arista Networks, Apache HTTP Server Project, nghttp2, Node.js, AMPHP и языка программирования Go подтвердили уязвимость перед Continuation Flood и хотя бы одной из перечисленных CVE.
По словам Новотарски, проблема Continuation Flood гораздо серьезнее уже упомянутой выше атаки HTTP/2 Rapid Reset, описанной в октябре прошлого года крупными поставщиками облачных услуг. Напомним, что тогда Google, Cloudflare и AWS, заявили, что проблема Rapid Reset спровоцировала волну самых мощных DDoS-атак за всю историю наблюдений.
«Учитывая, значимость затронутых проектов, а также тот факт, что, по данным Cloudflare Radar, на HTTP-трафик приходится свыше 70% от всех интернет-коммуникаций, можно предположить, что большая часть интернета уязвима перед легко эксплуатируемой уязвимостью: во многих случаях достаточно одного TCP-соединения, чтобы обрушить сервер», — предупреждает Новотарски.
Также исследователь полагает, что администраторам серверов будет сложно устранить проблему без соответствующих знаний о HTTP/2. Дело в том, что вредоносные запросы не будут видны в логах доступа, если на сервере не включена расширенная аналитика фреймов, которая в большинстве случаев отключена.