Атака Continuation flood, приводящая к проблемам на серверах, использующих HTTP/2.0

Новости мира unix. Хотите узнать секрет вечного счастья? Откройте страницу 246.
Ответить
acolyte
Аватара пользователя
Сообщения: 2575
Зарегистрирован: 20.08.2022

#

Атака Continuation flood, приводящая к проблемам на серверах, использующих HTTP/2.0
Дата публикации:Thu, 04 Apr 2024 13:22:09 +0300




Раскрыты сведения об методе атаки "Continuation flood", затрагивающем различные реализации протокола HTTP/2, среди которых Apache httpd, Apache Traffic Server, Node.js, oghttp, Go net/http2, Envoy, oghttp и nghttp2. Уязвимость может использоваться для совершения атак на серверы с поддержкой HTTP/2.0 и в зависимости от реализации приводит к исчерпанию памяти (прекращение обработки запросов или аварийное завершение процессов) или созданию высокой нагрузки на CPU (замедление обработки запросов). По мнению обнаружившего уязвимость исследователя, выявленная проблема более опасна, чем найденная в прошлом году уязвимость "Rapid Reset", использованная для совершения крупнейших на то время DDoS-атак.



Высокий уровень опасности объясняется тем, что для нарушения работы сервера, аварийного завершения или серьёзного снижения производительности достаточно создания потока специально оформленных запросов с одного обычного компьютера. В определённых случаях для осуществления атаки достаточно даже одного TCP-соединения. При этом связанных с проведением атаки трафик никак не выделяется в логах на фоне обычных запросов пользователей.




Уязвимость вызвана особенностями обработки кадров HEADERS и CONTINUATION в запросах по протоколу HTTP/2. Кадры
HEADERS используются в HTTP/2 для передачи HTTP-заголовков, а кадры CONTINUATION для разбивки отправки HTTP-заголовков на несколько стадий (например, когда заголовки не умещаются в один кадр или когда вначале следует отправить заголовки, которые можно заполнить на текущем этапе, а затем доотправить заголовки, значения которых пока невозможно определить). При передаче заголовков в несколько этапов вначале отправляется кадр HEADERS без флага END_HEADERS, за ним следует несколько кадров CONTINUATION с дополнительными заголовками и завершает список кадр CONTINUATION с флагом END_HEADERS.




Метод атаки сводится к отправке непрекращающегося потока кадров CONTINUATION без выставления флага END_HEADERS. Подобная активность приводит к передаче на сервер большого числа заголовков, которые сервер сохраняет в оперативной памяти до тех пор, пока доступная процессу память не будет исчерпана. Для создания высокой нагрузки на CPU помимо исчерпания памяти атакующий может воспользоваться сжатием содержимого кадров CONTINUATION с использованием формата HPACK, разбор которого требует вычислений. В реализациях протокола HTTP/1.1 для защиты от затопления сервера заголовками применялся лимит на размер заголовков и таймаут на время отправки соединения. Для HTTP/2 в силу усложнения протокола многие реализации не предусмотрели подобные методы защиты от бесконечной отправки заголовков.




Наибольшую опасность уязвимость представляет для пользователей Node.js (CVE-2024-27983), так как данная реализация позволяет добиться краха через отправку всего нескольких кадров на сервер. Из-за состояния гонки в Node.js для вызова аварийного завершения через срабатывание Assert-проверки достаточно завершить соединения во время отправки незавершённого потока заголовков (крах, если во время закрытия соединений ещё не поступил кадр CONTINUATION с флагом END_HEADERS). Уязвимость устранена в Node.js 18.20.1, 21.7.2 и 20.12.1, а также в свежих выпусках библиотек llhttp и undici. В новых версиях Node.js также устранена менее опасная уязвимость (CVE-2024-27982) класса "request smuggling", позволяющая через манипуляцию со значением "Content Length" вклиниться в содержимое запросов других пользователей, обрабатываемых в том же потоке между фронтэндом и бэкендом.



Уязвимости, связанные с обработкой CONTINUATION, в других реализациях HTTP/2.0:
  • oghttp (CVE-2024-27919) - неограниченное потребление памяти.

    Tempesta FW (CVE-2024-2758) - обход ограничений.

    PHP-библиотека amphp/http, amphp/http-client и amphp/http-server (CVE-2024-2653) - неограниченное потребление памяти, вплоть до полного исчерпания доступной памяти.

    Go-пакет net/http (CVE-2023-45288) - создание высокой нагрузки на CPU.

    Библиотека nghttp2 (CVE-2024-28182) - вызов отказа в обслуживании.

    Apache Httpd (CVE-2024-27316 - чрезмерное потребление памяти и создание нагрузки на CPU.

    Apache Traffic Server (CVE-2024-31309 - чрезмерное потребление ресурсов.

    Envoy (CVE-2024-30255) - создание высокой нагрузки на CPU (для полной нагрузки одного ядра CPU необходим поток в 300Mbit/s).


Новость позаимствована с opennet.ru
Ссылка на оригинал: https://www.opennet.ru/opennews/art.shtml?num=60924

Жизнь за Нер'зула!

Ответить