Een nieuw onderzoek uitgevoerd door beveiligingsexpert Bartek Nowotarski heeft een potentiële kwetsbaarheid in het HTTP/2-protocol blootgelegd. Bekend als de CONTINUATION Flood, deze exploit stelt aanvallers in staat om uit te voeren denial-of-service (DoS) aanvallen door een server te overspoelen met CONTINUATION-frames.
De Kwetsbaarheid van de CONTINU-overstroming uitgelegd
Het probleem ligt in de manier waarop HTTP/2-implementaties CONTINUATION-frames binnen een enkele stream verwerken. Veel implementaties slagen er niet in om het aantal verzonden CONTINUATION-frames op de juiste manier te beperken of op te schonen, waardoor aanvallers een server kunnen overweldigen met een stroom frames die geheugenuitputting of crashes kunnen veroorzaken.
HTTP/2, net als zijn voorganger HTTP/1, gebruikt headervelden binnen verzoeken en antwoorden. Deze headers zijn geserialiseerd in headerblokken, die vervolgens worden verzonden als blokfragmenten binnen CONTINUATION-frames.
Hoe kan de kwetsbaarheid worden uitgebuit
Aanvallers kunnen dit beveiligingslek misbruiken door een continue stroom CONTINUATION-frames te verzenden zonder dat de vlag END_HEADERS is ingesteld, waardoor de server een overmatige hoeveelheid headergegevens in het geheugen parseert en opslaat.
Deze kwetsbaarheid vormt een ernstige bedreiging, omdat een enkele machine of TCP-verbinding de beschikbaarheid van de server kan verstoren, wat kan leiden tot crashes of prestatieverlies. De aanval is mogelijk niet zichtbaar in HTTP-toegangslogboeken, waardoor detectie een uitdaging wordt.
Betrokken implementaties
Verschillende HTTP/2-implementaties worden beïnvloed, inclusief projecten zoals Apache HTTP Server, Node.js, en Golang. Gebruikers wordt geadviseerd de getroffen software te upgraden om de risico's te beperken. Als er geen oplossing beschikbaar is, het tijdelijk uitschakelen van HTTP/2 kan bescherming bieden tegen deze exploit.
Hier zijn meerdere CVE-lijsten die de kwetsbaarheid in verschillende implementaties benadrukken, volgens het CERT Coördinatiecentrum adviserend.
CVE-2024-27983
Een aanvaller kan de Node.js HTTP/2-server onbeschikbaar maken door een beperkt aantal HTTP/2-framepakketten te verzenden die enkele HTTP/2-frames bevatten. Door de fout kunnen gegevens achterblijven nghttp2 geheugen na een reset. Dit kan gebeuren wanneer headers met HTTP/2 CONTINUATION-frames naar de server worden verzonden en de TCP-verbinding abrupt wordt verbroken door de client, het activeren van de Http2Session-destructor terwijl headerframes nog steeds worden verwerkt, waardoor een raceconditie ontstaat.
CVE-2024-27919
Van de gezant enhttp codec slaagt er niet in een verzoek opnieuw in te stellen wanneer de headerkaartlimieten worden overschreden. Hierdoor kan een aanvaller een reeks CONTINUATION-frames verzenden zonder dat de END_HEADERS-bit is ingesteld, wat leidt tot onbeperkt geheugengebruik.
CVE-2024-2758
Tempesta FW-snelheidslimieten zijn standaard niet ingeschakeld. Ze zijn ofwel te groot ingesteld om aanvallen met lege CONTINUATION-frames op te vangen, ofwel te klein om normale HTTP-verzoeken op de juiste manier af te handelen.
CVE-2024-2653
amphp/http verzamelt HTTP/2 CONTINUATION-frames in een onbegrensde buffer en controleert de headergroottelimiet pas nadat de vlag END_HEADERS is ontvangen, resulterend in een geheugentekort (OOM) neerstorten. amphp/http-client en amphp/http-server worden indirect beïnvloed als ze worden gebruikt met een niet-gepatchte versie van amphp/http. Eerdere versies van amphp/http-client met HTTP/2-ondersteuning (v4.0.0-rc10 naar 4.0.0) worden ook rechtstreeks getroffen.
CVE-2023-45288
De Go-pakketten net/http en net/http2 beperk niet het aantal CONTINUATION-frames dat wordt gelezen voor een HTTP/2-verzoek, waardoor een aanvaller een buitensporig grote set headers kan leveren voor één enkel verzoek, wat leidt tot overmatig CPU-verbruik.
CVE-2024-28182
Een implementatie met behulp van de nghttp2 bibliotheek blijft CONTINUATION-frames ontvangen en zal niet terugbellen naar de applicatie om inzicht in deze informatie mogelijk te maken voordat de stream wordt gereset, resulterend in een Denial of Service (DoS) kwetsbaarheid.
CVE-2024-27316
HTTP/2 CONTINUATION-frames zonder de vlag END_HEADERS kunnen continu door een aanvaller naar een Apache Httpd-implementatie worden gestuurd, die er niet in slaagt het verzoek vroegtijdig te beëindigen.
CVE-2024-31309
Een HTTP/2-VERVOLG DoS-aanval kan ervoor zorgen dat Apache Traffic Server meer bronnen op de server verbruikt. Versies vanaf 8.0.0 door 8.1.9 en van 9.0.0 door 9.2.3 zijn aangetast.
CVE-2024-30255
De HTTP/2-protocolstack in Envoy-versies 1.29.2 of eerder is kwetsbaar voor CPU-uitputting als gevolg van een overvloed aan CONTINUATION-frames. Met de HTTP/2-codec van Envoy kan de client een onbeperkt aantal CONTINUATION-frames verzenden, zelfs nadat de headerkaartlimieten van Envoy zijn overschreden. Hierdoor kan een aanvaller een reeks CONTINUATION-frames verzenden zonder dat de END_HEADERS-bit is ingesteld, waardoor het CPU-gebruik ongeveer verbruikt 1 core per 300 Mbit/s verkeer.