Bemutatásra került egy új támadási technika a HTTP/2 protokoll megvalósításain, amely egyszerűsíti a szolgáltatásmegtagadásos támadások végrehajtását a szerver erőforrásainak kimerítésével. A sebezhetőség kódneve MadeYouReset, és lehetővé teszi, hogy a HTTP/2 irányító keretei manipulálásával a szervert sok kéréssel áraszthassuk el a beállított korlátok megkerülésével.
A probléma lényege, hogy a kliens nagyon nagy számú párhuzamosan feldolgozott folyamot hozhat létre, függetlenül a SETTINGS_MAX_CONCURRENT_STREAMS korláttól, mivel minden folyamot a kezdeti szakaszban visszaállít. Az ilyen visszaállítás azt eredményezi, hogy a kliensnek új kérés küldéséhez az HTTP/2 kapcsolaton belül nem szükséges a válaszra várnia, a szerver és azonnal nagy, folyamatos kérésáramot irányíthat, amennyire a kommunikációs csatorna sávszélessége lehetővé teszi.
A kliens nem függ a kérés küldése és a válasz megszerzése közötti késlektetésektől (RTT, round-trip time), és a támadást minimális költségekkel végezheti el, miközben a szerver továbbra is erőforrásokat költ a beérkező kérések feldolgozására. Például a szerver adatstruktúrákat különít el új folyamok számára, elemzi a kérést, kibővíti a fejlécet és párosítja az URL-t az erőforrással. Visszaterjedő proxytámadás esetén a támadás átterjedhet azokra a backendekre, amelyekre a proxy nyilvánvalóan irányítja a kérést, mielőtt az vissza lenne állítva.
A sebezhetőség emlékeztet a korábban ismert Rapid Reset problémára (CVE-2023-44487), és a HTTP/2 protokoll logikájának és a végtermékek megvalósításának eltéréséből ered. A specifikáció lehetővé teszi a folyam kliens és szerver általi bármikor történő visszaállítását, de a HTTP/2 számos megvalósításában -szerverek a hasonló visszaállítás után a kérés továbbra is feldolgozás alatt áll. Az új támadás kulcsfontosságú különbsége az, hogy a kérés feldolgozásának visszaállítása a szerver kezdeményezésére történik, nem pedig az ügyfél által küldött RST_STREAM zászlóval ellátott keret elküldésével.
A szerver általi kezdeményezett visszaállítás akkor történik, ha hibás kérések érkeznek, de az ilyen kéréseket azonnal elutasítják, anélkül hogy teljes körű feldolgozásra kerülnének, és anélkül, hogy továbbítanák a backendnek. Az elkövető először egy helyes HTTP-kérést küldhet, de ezt követően egy hibás HTTP/2 vezérlőkeret-sorozatot adhat meg. Ez a tevékenység azt eredményezi, hogy a szerver teljes körűen megkezdi a kérés feldolgozását, de a következő keretek feldolgozása során fellépő hiba miatt a folyamatot visszaállítja (a helyes kérést RST_STREAM állapotba helyezi).

A probléma megerősítve van az Apache Tomcat, Netty, Eclipse Jetty, Fastly, varnish, lighttpd, Zephyr RTOS HTTP-szervereken. A probléma a Mozilla webhelyein és szerver szolgáltatásain is megjelenik. Az Apache httpd, Apache Traffic Server, Node.js, LiteSpeed és HAProxy nem érintett. Az nginx sérülékenység státusza nem határozott.
Forrás: opennet.ru
