Bola predstavená nová technika útoku na implementácie protokolu HTTP/2, ktorá zjednodušuje vykonávanie útokov na výpadok služieb prostredníctvom vyčerpania prostriedkov servera. Zraniteľnosť dostala kódové meno MadeYouReset a umožňuje manipuláciou s riadiacimi rámcami HTTP/2 zaplaviť server veľkým množstvom požiadaviek obchádzajúcich jeho nastavené obmedzenia.
Podstatou problému je, že klient môže vytvoriť veľmi veľké množstvo súčasne spracovávaných prúdov, bez ohľadu na obmedzenie SETTINGS_MAX_CONCURRENT_STREAMS, pričom každý prúd resetuje v počiatočnej fáze. Takýto reset vedie k tomu, že na odoslanie novej žiadosti v zriadenom pripojení HTTP/2 klient nepotrebuje čakať na odpoveď od servera a môže okamžite nasmerovať veľký nepretržitý prúd požiadaviek, koľko povoľuje šírka pásma spojenia.
Klient prestáva závisieť od oneskorení medzi odoslaním požiadavky a prijatím odpovede (RTT, round-trip time) a môže uskutočniť útok s minimálnymi nákladmi, zatiaľ čo server naďalej spotrebováva prostriedky na spracovanie prichádzajúcich požiadaviek. Napríklad server vykonáva alokáciu štruktúr dát pre nové prúdy, analýzu požiadavky, rozbalenie hlavičky a priradenie URL k zdroju. Pri útoku na reverzné proxy sa útok môže rozšíriť na backendy, na ktoré proxy stihne presmerovať požiadavku pred jej resetovaním.
Zraniteľnosť pripomína predtým známy problém Rapid Reset (CVE-2023-44487) a je spôsobená nesúladom logiky resetovania prúdov definovanej v špecifikácii protokolu HTTP/2 a implementovanej vo finálnych produktoch. V špecifikácii je predpokladaná možnosť resetovania prúdu zákazníkom a serverom v akomkoľvek okamihu, ale v mnohých implementáciách HTTP/2serverov po takomto resetovaní požiadavka pokračuje v spracovaní. Kľúčovým rozdielom nového útoku je, že reset spracovávania požiadavky je vykonaný zo strany servera, a nie prostredníctvom odoslania rámca s vlajkou RST_STREAM zo strany klienta.
Server-initiated resets occur when invalid requests are received, but such requests are immediately discarded without initiating full processing or passing them to the backend. To achieve a complete request processing cycle, an attacker may first send a valid HTTP request, followed by an incorrect sequence of HTTP/2 control frames. Such activity will cause the server to fully process the request, but then due to an error in processing the subsequent frames, it will reset the stream (transitioning the stream with the valid request to RST_STREAM state).

The issue has been confirmed in HTTP servers like Apache Tomcat, Netty, Eclipse Jetty, Fastly, Varnish, Lighttpd, and Zephyr RTOS. The problem also manifests on Mozilla's websites and server services. Apache httpd, Apache Traffic Server, Node.js, LiteSpeed, and HAProxy are not affected by the issue. The status of vulnerability in nginx is undetermined.
Zdroj: opennet.ru
