Gegevens zijn onthuld over de aanvalsmethode 'Continuation flood', die verschillende implementaties van het HTTP/2-protocol aangaat, waaronder Apache httpd, Apache Traffic Server, Node.js, oghttp, Go net/http2, Envoy, oghttp en nghttp2. De kwetsbaarheid kan worden gebruikt voor aanvallen op servers die HTTP/2.0 ondersteunen en leidt, afhankelijk van de implementatie, tot het uitputten van geheugen (afbreken van verzoekverwerking of het onverwacht afsluiten van processen) of tot een hoge CPU-belasting (vertraging van de verzoekverwerking). Volgens de onderzoeker die de kwetsbaarheid ontdekte, is het probleem gevaarlijker dan de kwetsbaarheid 'Rapid Reset', die vorig jaar werd ontdekt en werd gebruikt voor de grootste DDoS-aanvallen tot dan toe.
Het hoge niveau van gevaar wordt verklaard door het feit dat het verstoren van de werking de server, het onverwacht afsluiten of het ernstig verlagen van de prestaties, voldoende is om een stroom speciaal opgemaakte verzoeken vanaf ƩƩn gewone computer te creƫren. In bepaalde gevallen is zelfs ƩƩn TCP-verbinding voldoende om een aanval uit te voeren. Daarbij is het verkeer dat met de aanval te maken heeft, in de logs niet te onderscheiden van de normale gebruikersverzoeken.
De kwetsbaarheid wordt veroorzaakt door de manier waarop HEADERS- en CONTINUATION-frames worden verwerkt in verzoeken via het HTTP/2-protocol. HEADERS-frames worden in HTTP/2 gebruikt om HTTP-headers te verzenden, terwijl CONTINUATION-frames dienen om de verzending van HTTP-headers in meerdere fasen op te splitsen (bijvoorbeeld wanneer de headers niet in ƩƩn frame passen of wanneer eerst headers moeten worden verzonden die op dit moment kunnen worden ingevuld, en daarna andere headers waarvan de waarden nog niet kunnen worden bepaald). Bij het verzenden van headers in meerdere fasen wordt eerst een HEADERS-frame zonder de END_HEADERS-vlag verzonden, gevolgd door meerdere CONTINUATION-frames met aanvullende headers, en de lijst wordt beƫindigd met een CONTINUATION-frame met de END_HEADERS-vlag.
De aanvalsmethode komt neer op het verzenden van een constante stroom CONTINUATION-frames zonder de END_HEADERS-vlag in te stellen. Deze activiteit leidt tot het verzenden van server Een groot aantal headers wordt in het geheugen van de server opgeslagen totdat het beschikbare geheugen voor processen is opgebruikt. Om een hoge CPU-belasting te creƫren, kan de aanvaller naast het uitputten van het geheugen ook het comprimeren van CONTINUATION-frames gebruiken met behulp van het HPACK-formaat, waarvan de ontleding rekencapaciteit vereist. In implementaties van het HTTP/1.1-protocol werd een limiet voor de grootte van de headers en een time-out voor de verbindingsinstelling toegepast ter bescherming tegen het overbelasten van de server met headers. Aangezien het HTTP/2-protocol complexer is, hebben veel implementaties geen vergelijkbare beschermingsmethoden voorzien tegen eindeloze header-verzending.
De kwetsbaarheid vormt de grootste bedreiging voor gebruikers van Node.js (CVE-2024-27983), omdat deze implementatie tot een crash kan leiden door slechts een paar frames naar de server te verzenden. Vanwege een raceconditie in Node.js is het voldoende om de verbinding te beƫindigen tijdens het verzenden van een onafgemaakte headerstream om een crash te veroorzaken door een Assert-controle. Dit gebeurt als een CONTINUATION-frame met de END_HEADERS-vlag nog niet is ontvangen tijdens het sluiten van verbindingen. De kwetsbaarheid is verholpen in Node.js 18.20.1, 21.7.2 en 20.12.1, evenals in recente versies van de llhttp- en undici-bibliotheken. In nieuwere versies van Node.js is ook een minder gevaarlijke kwetsbaarheid (CVE-2024-27982) verholpen, die tot de categorie 'request smuggling' behoort en waarmee door manipulatie van de 'Content Length'-waarde in de inhoud van de verzoeken van andere gebruikers kan worden ingebroken die in dezelfde stroom tussen frontend en backend worden verwerkt.
Kwetsbaarheden met betrekking tot de verwerking van CONTINUATION in andere implementaties van HTTP/2.0:
- oghttp (CVE-2024-27919) ā onbeperkte geheugengebruik.
- Tempesta FW (CVE-2024-2758) ā omzeilen van beperkingen.
- PHP-bibliotheek amphp/http, amphp/http-client en amphp/http-server (CVE-2024-2653) ā onbeperkte geheugengebruik, tot volledige uitputting van het beschikbare geheugen.
- Go-pakket net/http (CVE-2023-45288) ā creĆ«ren van een hoge CPU-belasting.
- Bibliotheek nghttp2 (CVE-2024-28182) ā veroorzaken van een denial-of-service.
- Apache Httpd (CVE-2024-27316) ā overmatig geheugengebruik en creĆ«ren van een hoge CPU-belasting.
- Apache Traffic Server (CVE-2024-31309) ā overmatig gebruik van middelen.
- Envoy (CVE-2024-30255) ā creĆ«ren van een hoge CPU-belasting (voor volledige belasting van ƩƩn CPU-kern is een stroom van 300Mbit/s nodig).
Bron: opennet.ru
