Father
Professional
- Messages
- 2,602
- Reaction score
- 757
- Points
- 113
Новое исследование показало, что фрейм ПРОДОЛЖЕНИЯ в протоколе HTTP/2 может быть использован для проведения атак типа "отказ в обслуживании" (DoS).
Метод получил кодовое название HTTP/2 CONTINUATION Flood от исследователя безопасности Бартека Новотарски, который сообщил о проблеме в Координационный центр CERT (CERT / CC) 25 января 2024 года.
"Многие реализации HTTP/2 должным образом не ограничивают и не дезинфицируют количество фреймов продолжения, отправляемых в рамках одного потока", - сказал CERT / CC в рекомендательном письме от 3 апреля 2024 года.
"Злоумышленник, который может отправлять пакеты на целевой сервер, может отправлять поток кадров продолжения, которые не будут добавлены к списку заголовков в памяти, но все равно будут обработаны и декодированы сервером или будут добавлены к списку заголовков, вызывая сбой из-за нехватки памяти".
Как и в HTTP/1, HTTP/2 использует поля заголовка в запросах и ответах. Эти поля заголовка могут содержать списки заголовков, которые, в свою очередь, сериализуются и разбиваются на блоки заголовков. Затем блоки заголовков разделяются на фрагменты блоков и передаются в заголовочных или так называемых фреймах ПРОДОЛЖЕНИЯ.
"Фрейм ПРОДОЛЖЕНИЯ (тип=0x9) используется для продолжения последовательности фрагментов блока заголовка", - говорится в документации к RFC 7540.
"Может быть отправлено любое количество кадров продолжения, при условии, что предыдущий кадр находится в том же потоке и является кадром ЗАГОЛОВКОВ, PUSH_PROMISE или кадром ПРОДОЛЖЕНИЯ без установленного флага END_HEADERS".
На последнем фрейме, содержащем заголовки, будет установлен флаг END_HEADERS, который сигнализирует удаленной конечной точке, что это конец блока заголовка.
По словам Новотарски, CONTINUATION Flood - это класс уязвимостей в нескольких реализациях протокола HTTP/2, которые представляют более серьезную угрозу по сравнению с атакой Rapid Reset, которая была обнаружена в октябре 2023 года.
"Одна машина (а в некоторых случаях всего лишь одно TCP-соединение или несколько фреймов) потенциально может нарушить доступность сервера с последствиями, варьирующимися от сбоев сервера до существенного снижения производительности", - сказал исследователь. "Примечательно, что запросы, представляющие собой атаку, не отображаются в журналах доступа HTTP".
Уязвимость, по своей сути, связана с неправильной обработкой ЗАГОЛОВКОВ и множественных фреймов ПРОДОЛЖЕНИЯ, которые открывают путь для состояния DoS.
Другими словами, злоумышленник может инициировать новый поток HTTP/2 против целевого сервера, используя уязвимую реализацию, и отправлять ЗАГОЛОВКИ и фреймы ПРОДОЛЖЕНИЯ без установленного флага END_HEADERS, создавая бесконечный поток заголовков, которые серверу HTTP/2 потребуется проанализировать и сохранить в памяти.
Хотя точный результат зависит от реализации, последствия варьируются от мгновенного сбоя после отправки пары кадров HTTP/2 и нехватки памяти до истощения процессора, что влияет на доступность сервера.
"В RFC 9113 [...] упоминается множество проблем безопасности, которые могут возникнуть, если фреймы ПРОДОЛЖЕНИЯ обрабатываются некорректно", - сказал Новотарски.
"В то же время в нем не упоминается конкретный случай, когда кадры продолжения отправляются без флага final END_HEADERS, что может иметь последствия для затронутых серверов".
Проблема затрагивает несколько проектов, таких как amphp / http (CVE-2024-2653), HTTP-сервер Apache (CVE-2024-27316), Apache Tomcat (CVE-2024-24549), Apache Traffic Server (CVE-2024-31309), Envoy proxy (CVE-2024-27919 и CVE-2024-30255), Golang (CVE-2023- 45288), ящик для ржавчины h2, nghttp2 (CVE-2024-28182), Node.js (CVE-2024-27983) и Tempesta FW (CVE-2024-2758).
Пользователям рекомендуется обновить уязвимое программное обеспечение до последней версии, чтобы уменьшить потенциальные угрозы. В отсутствие исправления рекомендуется рассмотреть возможность временного отключения HTTP/2 на сервере.
Метод получил кодовое название HTTP/2 CONTINUATION Flood от исследователя безопасности Бартека Новотарски, который сообщил о проблеме в Координационный центр CERT (CERT / CC) 25 января 2024 года.
"Многие реализации HTTP/2 должным образом не ограничивают и не дезинфицируют количество фреймов продолжения, отправляемых в рамках одного потока", - сказал CERT / CC в рекомендательном письме от 3 апреля 2024 года.
"Злоумышленник, который может отправлять пакеты на целевой сервер, может отправлять поток кадров продолжения, которые не будут добавлены к списку заголовков в памяти, но все равно будут обработаны и декодированы сервером или будут добавлены к списку заголовков, вызывая сбой из-за нехватки памяти".
Как и в HTTP/1, HTTP/2 использует поля заголовка в запросах и ответах. Эти поля заголовка могут содержать списки заголовков, которые, в свою очередь, сериализуются и разбиваются на блоки заголовков. Затем блоки заголовков разделяются на фрагменты блоков и передаются в заголовочных или так называемых фреймах ПРОДОЛЖЕНИЯ.
"Фрейм ПРОДОЛЖЕНИЯ (тип=0x9) используется для продолжения последовательности фрагментов блока заголовка", - говорится в документации к RFC 7540.
"Может быть отправлено любое количество кадров продолжения, при условии, что предыдущий кадр находится в том же потоке и является кадром ЗАГОЛОВКОВ, PUSH_PROMISE или кадром ПРОДОЛЖЕНИЯ без установленного флага END_HEADERS".
На последнем фрейме, содержащем заголовки, будет установлен флаг END_HEADERS, который сигнализирует удаленной конечной точке, что это конец блока заголовка.
По словам Новотарски, CONTINUATION Flood - это класс уязвимостей в нескольких реализациях протокола HTTP/2, которые представляют более серьезную угрозу по сравнению с атакой Rapid Reset, которая была обнаружена в октябре 2023 года.
"Одна машина (а в некоторых случаях всего лишь одно TCP-соединение или несколько фреймов) потенциально может нарушить доступность сервера с последствиями, варьирующимися от сбоев сервера до существенного снижения производительности", - сказал исследователь. "Примечательно, что запросы, представляющие собой атаку, не отображаются в журналах доступа HTTP".
Уязвимость, по своей сути, связана с неправильной обработкой ЗАГОЛОВКОВ и множественных фреймов ПРОДОЛЖЕНИЯ, которые открывают путь для состояния DoS.
Другими словами, злоумышленник может инициировать новый поток HTTP/2 против целевого сервера, используя уязвимую реализацию, и отправлять ЗАГОЛОВКИ и фреймы ПРОДОЛЖЕНИЯ без установленного флага END_HEADERS, создавая бесконечный поток заголовков, которые серверу HTTP/2 потребуется проанализировать и сохранить в памяти.
Хотя точный результат зависит от реализации, последствия варьируются от мгновенного сбоя после отправки пары кадров HTTP/2 и нехватки памяти до истощения процессора, что влияет на доступность сервера.
"В RFC 9113 [...] упоминается множество проблем безопасности, которые могут возникнуть, если фреймы ПРОДОЛЖЕНИЯ обрабатываются некорректно", - сказал Новотарски.
"В то же время в нем не упоминается конкретный случай, когда кадры продолжения отправляются без флага final END_HEADERS, что может иметь последствия для затронутых серверов".
Проблема затрагивает несколько проектов, таких как amphp / http (CVE-2024-2653), HTTP-сервер Apache (CVE-2024-27316), Apache Tomcat (CVE-2024-24549), Apache Traffic Server (CVE-2024-31309), Envoy proxy (CVE-2024-27919 и CVE-2024-30255), Golang (CVE-2023- 45288), ящик для ржавчины h2, nghttp2 (CVE-2024-28182), Node.js (CVE-2024-27983) и Tempesta FW (CVE-2024-2758).
Пользователям рекомендуется обновить уязвимое программное обеспечение до последней версии, чтобы уменьшить потенциальные угрозы. В отсутствие исправления рекомендуется рассмотреть возможность временного отключения HTTP/2 на сервере.