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

Разкрития относно метода на атака „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

Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри 🔥 Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри | ProHoster