Er is een nieuwe aanvankelijke techniek gepresenteerd die de implementaties van het HTTP/2-protocol aanvalt, waardoor aanvallen voor het veroorzaken van een denial-of-service door uitputting van serverbronnen eenvoudiger worden. De kwetsbaarheid heeft de codenaam MadeYouReset gekregen en stelt aanvallers in staat om servers te overspoelen met een grote hoeveelheid aanvragen door manipulatie van de controleframes van HTTP/2, waarbij de ingestelde limieten worden omzeild.
De kern van het probleem is dat de cliƫnt een zeer groot aantal gelijktijdig verwerkte streams kan creƫren, ongeacht de limiet van SETTINGS_MAX_CONCURRENT_STREAMS, door elke stream in de beginfase te resetten. Dit soort reset zorgt ervoor dat de cliƫnt geen antwoord van de server hoeft te wachten om een nieuwe aanvraag in de gevestigde HTTP/2-verbinding te verzenden. de server en onmiddellijk een grote ononderbroken stroom aanvragen kan indienen, afhankelijk van de beschikbare bandbreedte van de verbinding.
De cliƫnt is niet langer afhankelijk van vertragingen tussen het verzenden van aanvragen en het ontvangen van antwoorden (RTT, round-trip time) en kan een aanval uitvoeren met minimale overhead, terwijl de server blijft resources besteden aan het verwerken van binnenkomende aanvragen. Bijvoorbeeld, de server stelt nieuwe gegevensstructuren in onder nieuwe streams, parseert de aanvraag, pakt de headers uit en koppelt de URL aan de bron. Bij aanvallen op reverse proxies kan de aanval zich uitbreiden naar de backends waar de proxy aanvragen naar omleidt voordat deze worden gereset.
De kwetsbaarheid lijkt op een eerder bekende probleem genaamd Rapid Reset (CVE-2023-44487) en is veroorzaakt door een discrepantie tussen de logica van het resetten van streams, zoals gedefinieerd in de specificatie van het HTTP/2-protocol en geïmplementeerd in eindproducten. De specificatie staat een reset van streams door zowel de cliënt als de server op elk moment toe, maar in veel HTTP/2-implementatiesservers blijft de aanvraag na een dergelijke reset doorgaan met verwerken. Het belangrijkste verschil met de nieuwe aanval is dat de reset van de aanvraagverwerking op initiatief van de server plaatsvindt, in plaats van door de cliënt die een frame met de RST_STREAM-vlag verzendt.
Een server-initiated reset vindt plaats wanneer onjuiste verzoeken binnenkomen, maar dergelijke verzoeken worden onmiddellijk geweigerd zonder volledige verwerking en zonder doorgegeven te worden aan de backend. Om een volledige cyclus van verzoekverwerking te bereiken, kan de aanvaller eerst een correct HTTP-verzoek verzenden, gevolgd door een onjuiste reeks control frames voor HTTP/2. Deze activiteit zal ertoe leiden dat de server het verzoek volledig begint te verwerken, maar daarna de stroom reset als gevolg van een fout bij de verwerking van de volgende frames (de stroom met het correcte verzoek wordt in de RST_STREAM-status geplaatst).

Het probleem is bevestigd in HTTP-servers zoals Apache Tomcat, Netty, Eclipse Jetty, Fastly, Varnish, Lighttpd, en Zephyr RTOS. Het probleem manifesteert zich ook op de websites en serverdiensten van Mozilla. Apache httpd, Apache Traffic Server, Node.js, LiteSpeed en HAProxy zijn niet kwetsbaar voor het probleem. De status van de kwetsbaarheid in nginx is niet bepaald.
Bron: opennet.ru
