Разкриха се подробности за атака с метод «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
