Спецпроекты

40% серверов по всему миру легко вывести из строя из-за «дыр» в протоколе HTTP/2

2608
Безопасность Администратору Стратегия безопасности Интернет
Около 40% серверов в мире поддерживают протокол HTTP/2, в котором выявлены несколько уязвимостей. Серверы можно вывести из строя с помощью специальных запросов. Вендоры выпускают исправления.

Немногим менее половины

В серверах, поддерживающих протокол HTTP/2, выявлены несколько уязвимостей, которые могут быть использованы для DDoS-атак. По данным W3Techs, около 40% в мире поддерживают протокол HTTP/2, так что масштабы угрозы весьма велики.

Эксперты Netflix и Google опубликовали сведения о восьми уязвимостях в реализации протокола HTTP/2 разной степени опасности. Некоторые из них можно использовать для атаки с одной рабочей станции на множество серверов, некоторые другие - для организации распределённых DDoS-атак.

В бюллетене Netflix указывается, что векторы атак во всех случаях являются «вариациями на одну и ту же тему»: клиент отправляет серверу запрос и отказывается считывать ответ. В зависимости от того, как сервер обрабатывает очереди запросов, клиент может заставить сервер расходовать избыточное количество системных ресурсов (процессорного времени и памяти), так что он в итоге перестаёт принимать соединения. В результате перестаёт работать и веб-сайт, работающий на данном сервере.

Координационный центр CERT опубликовал список вендоров, которые могут быть затронуты данными уязвимостями. В списке - Amazon, Apache, Apple, Facebook, Microsoft, Nginx, Node.js, Ubuntu и многие другие.

http2600.jpg
Около 40% серверов в мире, поддерживающих протокол HTTP/2, можно вывести из строя с помощью специальных запросов

«Атаки на эти уязвимости явно не заставят себя долго ждать, - считает Михаил Зайцев, эксперт по информационной безопасности компании SEC Consult Services. - Необходимые исправления, скорее всего, будут выпущены в ближайшее время, поскольку под угрозой - крупнейшие и самые посещаемые в мире сетевые ресурсы. Вопрос лишь в том, насколько быстро эти обновления на самом деле будут установлены на уязвимые серверы».

Что представляют собой выявленные уязвимости

При эксплуатации уязвимости CVE-2019-9511 Data Dribble («Протечка данными») злоумышленник запрашивает получение большого объёма информации с заданного ресурса через несколько потоков; путём манипуляций над размерами группы сетевых пакетов и приоритетностью потоков, злоумышленник вынуждает сервер пересылать данные очередями из фрагментов по 1 байт. В зависимости от того, насколько эффективно устанавливается такая очередь, это может привести к избыточному расходованию процессорных мощностей, памяти или и того и другого.

При использовании CVE-2019-9513 Resource Loop («Ресурсная петля») злоумышленник создаёт запросы на множество потоков и постоянно варьирует их приоритетность, заставляя сервер постоянно перестраивать приоритетность ответов, расходуя всё возрастающее количество ресурсов.

Уязвимость CVE-2019-9514 Reset Flood («Затапливание запросами на сброс») позволяет открыть большое количество потоков и через каждый отправляет некорректный запрос, на который сервер должен ответить серией фреймов RST_STREAM. Это также может приводить к избыточному расходованию ресурсов.

«Дыра» CVE-2019-9515 Settings Flood («Затапливание запросами SETTINGS») отправляет поток фреймов SETTINGS на целевой сервер. Процедура RFC (Remote Function Call - удалённый вызов функции) предполагает, что сервер даёт ответ на каждый фрейм SETTINGS, а пустой такой фрейм практически эквивалентен по своему поведению PING-запросу. Так что, вероятнее всего, произойдёт перегрузка.

Уязвимость CVE-2019-9516 0-Length Headers Leak («Утечка заголовков нулевой длины») направляет поток пустых заголовков, опционально закодированных по алгоритму Хаффмана в 1-байтные или более длинные заголовки. В некоторых случаях для этих заголовков выделяется область в памяти; соответственно, сервер будет выделять память, пока сессия не завершится - или пока не будет израсходована вся память.

При использовании CVE-2019-9517 Internal Data Buffering («Буферизация внутренней памяти») злоумышленник открывает окно HTTP/2, так что сервер может слать в него данные без ограничений; при этом остаётся закрытым окно TCP, так что запись оказывает полностью или частично невозможной. Затем злоумышленник направляет поток запросов, на которые сервер должен отвечать крупными объектами. В результате всё это приводит к избыточному расходованию памяти, процессорного времени или и того и другого.

Наконец, CVE-2019-9518 Empty Frames Flood («Затапливание пустыми фреймами») позволяет отправлять серию пустых фреймов DATA, HEADERS, CONTINUATION и/или PUSH_PROMISE без отметки окончания потока. Сервер обрабатывает каждый фрейм непропорционально размерам канала атакующего. В результате происходит перерасходование процессорной мошности.

Исправления

Компания Cloudflare опубликовала обновление для своих серверов, отметив заодно, что попытки эксплуатации уязвимостей уже действительно наблюдались.

Nginx опубликовал обновления 1.16.1 с исправлениями трёх из восьми DDoS-уязвимостей.

Корпорация Microsoft выпустила сразу пять патчей.

Apple выпустила обновления для фреймворка SwiftNIO, в котором обнаружились пять из этих уязвимостей, затрагивающие macOS.

По всей видимости, другие вендоры вскоре последуют примеру.



Профиль месяца

Мы помогаем выращивать российское ПО

Андрей Филатов

глава SAP CIS

Взгляд месяца

На хайпе часто можно построить только фейк

Сергей Мацоцкий

основатель и член совета директоров IBS