В различных реализациях протокола HTTP/2 выявлено 8 DoS-уязвимостей

@OpenNet

Исследователи из компаний Netflix и Google выявили в различных реализациях протокола HTTP/2 восемь уязвимостей, которые позволяют вызвать отказ в обслуживании через отправку определённым образом оформленного потока сетевых запросов. Проблемы в той или иной мере затрагивают большинство HTTP-серверов с поддержкой HTTP/2 и приводят к исчерпанию доступной для рабочего процесса памяти или созданию слишком высокой нагрузки на CPU. Обновления с устранением уязвимостей уже представлены в nginx 1.16.1/1.17.3 и H2O 2.2.6, но пока недоступны для Apache httpd и других продуктов.

Проблемы стали следствием внесённых в протокол HTTP/2 усложнений, связанных с применением бинарных структур, системой лимитирования потоков данных внутри соединений, механизмом приоритезации потоков и наличия ICMP-подобных управляющих сообщений, работающих на уровне соединения HTTP/2 (например, операции ping, сброса и настройки потока). Многие реализации должным образом не ограничивали поток управляющих сообщений, неэффективно организовывали работу очереди приоритетов при обработке запросов или использовали неоптимальные реализации алгоритмов управления потоком.

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

Выявленные уязвимости:

  • CVE-2019-9511 (Data Dribble) - атакующий запрашивает большой объём данных в несколько потоков, манипулируя размером скользящего окна и приоритетом потока, принуждая сервер помещать данные в очередь блоками по 1 байту;
  • CVE-2019-9512 (Ping Flood) - атакующий непрерывно отравляет ping-сообщения через соединение HTTP/2, инициируя заполнение на другой стороне внутренней очереди отправленных ответов;
  • CVE-2019-9513 (Resource Loop) - атакующий создаёт несколько потоков запросов и непрерывно меняет приоритет потоков, вызывая перемешивание дерева приоритетов;
  • CVE-2019-9514 (Reset Flood) - атакующий создаёт несколько потоков и отправляет через каждый поток некорректный запрос, вызывая отправку сервером кадров RST_STREAM, но не принимает их для заполнения очереди ответов;
  • CVE-2019-9515 (Settings Flood) - атакующий отправляет поток пустых кадров "SETTINGS", в ответ на которые сервер обязан подтвердить получение каждого запроса;
  • CVE-2019-9516 (0-Length Headers Leak) - атакующий отправляет поток заголовков с нулевым именем и нулевым значением, а сервер выделяет для хранения каждого заголовка буфер в памяти и не освобождает его до завершения сеанса;
  • CVE-2019-9517 (Internal Data Buffering) - атакующий открывает скользящее окно HTTP/2 для отправки сервером данных без ограничений, но при этом держит окно TCP закрытым, что не позволяет фактически записать данные в сокет. Далее атакующий отправляет запросы, требующие большого ответа;
  • CVE-2019-9518 (Empty Frames Flood) - атакующий отправляет поток кадров типа DATA, HEADERS, CONTINUATION или PUSH_PROMISE, но с пустым полезным содержимым и без флага завершения потока. Сервер тратит время на обработку каждого кадра, непропорционально затраченной атакующим полосе пропускания.


Анализ
×
Google
Сфера деятельности:Образование и наука
128
Netflix
Организации
39