Уязвимост в реализациите на протокола HTTP/2, улесняваща провеждането на DoS атаки

Представена нова техника за атака на реализации на протокола HTTP/2, която опростява провеждането на атаки за отказ на услуги чрез изчерпване на ресурсите на сървъра. Уязвимостта получи кодово име MadeYouReset и позволява чрез манипулации на управляващите кадри HTTP/2 да наводни сървера с голямо количество заявки, заобикаляйки установените ограничения.

Същността на проблема е, че клиентът може да създаде много голям брой потоци, обработвани едновременно, независимо от лимита SETTINGS_MAX_CONCURRENT_STREAMS, нулирайки всеки поток в началния етап. Такова нулиране води до това, че за изпращане на нова заявка в установеното HTTP/2 съединение, клиентът не е длъжен да изчаква отговор от сървър и може веднага да насочи голям неразривен поток от заявки, колкото позволява капацитетът на комуникационния канал.

Клиентът спира да зависи от закъсненията между изпращането на заявка и получаването на отговор (RTT, време за връщане), и може да проведе атака с минимални разходи, докато сървърът продължава да изразходва ресурси за обработка на входящите заявки. Например, сървърът извършва разпределение на структури от данни за нови потоци, анализ на заявки, разопаковане на заглавия и сопоставяне на URL с ресурс. При атака на обратни проксита, атаката може да се разпространи и към бекендите, на които проксито успее да пренасочи заявката преди нейното нулиране.

Уязвимостта напомня на по-рано известната проблема Rapid Reset (CVE-2023-44487) и е предизвикана от несъответствие в логиката на нулиране на потоките, определена в спецификацията на протокола HTTP/2 и реализирана в крайни продукти. В спецификацията е предвидена възможността за нулиране на потока от клиента и сървъра по всяко време, но в много реализации на HTTP/2-сървъри след подобно нулиране заявката продължава да се обработва. Ключовата разлика на новата атака е, че нулирането на обработката на заявката се извършва по инициатива на сървъра, а не чрез изпращане от клиента на кадър с флаг RST_STREAM.

Системното нулиране от страна на сървъра се извършва при получаване на некоректни заявки, като подобни заявки се отхвърлят веднага, без да започне тяхната пълна обработка и без да бъдат предадени на бекенда. За да постигне пълния цикъл на обработка на заявката, атакуващият първо може да изпрати коректна HTTP заявка, но след това да предаде некоректна последователност от управляващи кадри на HTTP/2. Тази активност ще доведе до това, че сървърът ще започне да обработва коректно заявката, но после, поради грешка при обработката на следващите кадри, ще прекъсне потока (ще прехвърли потока с коректната заявка в състояние RST_STREAM).

Уязвимост в реализациите на протокола HTTP/2, улесняваща провеждането на DoS атаки

Проблемът е потвърден в HTTP сървъри като Apache Tomcat, Netty, Eclipse Jetty, Fastly, varnish, lighttpd, Zephyr RTOS. Проблемът също така се проявява на сайтове и сървърни услуги на Mozilla. Apache httpd, Apache Traffic Server, Node.js, LiteSpeed и HAProxy не са податливи на проблема. Статусът на уязвимостта в nginx не е определен.

Източник: opennet.ru

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