Около 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 и многие другие.

«Атаки на эти уязвимости явно не заставят себя долго ждать, – считает Михаил Зайцев, эксперт по информационной безопасности компании 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.

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