Представена нова техника за атака срещу имплементации на протокола 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 сървъри Apache Tomcat, Netty, Eclipse Jetty, Fastly, varnish, lighttpd, Zephyr RTOS. Проблемът се проявява също така на сайтове и сървърни услуги на Mozilla. Apache httpd, Apache Traffic Server, Node.js, LiteSpeed и HAProxy не са уязвими на проблема. Статусът на наличието на уязвимост в nginx не е определен.
Източник: opennet.ru
