Oplysninger om angrebsmetoden "Continuation flood" er blevet afsløret, hvilket påvirker forskellige implementeringer af protokollen HTTP/2, herunder Apache httpd, Apache Traffic Server, Node.js, oghttp, Go net/http2, Envoy, oghttp og nghttp2. Sårbarheden kan bruges til at udføre angreb på servere, der understøtter HTTP/2.0, og afhængigt af implementeringen fører det til hukommelsesudtømning (ophør af anmodningsbehandling eller utilsigtet afslutning af processer) eller skaber høj belastning på CPU'en (forsinkelse af anmodningsbehandling). Ifølge den forsker, der opdagede sårbarheden, er den identificerede problematik mere farlig end den, der blev fundet sidste år, kaldet "Rapid Reset", som blev brugt til at udføre de største DDoS-angreb på det tidspunkt.
Det høje niveau af fare skyldes, at det er tilstrækkeligt at skabe en strøm af specielt udformede anmodninger fra en almindelig computer for at forstyrre driften server, forårsage utilsigtet afslutning eller alvorligt nedsætte ydeevnen. I visse tilfælde er det endda tilstrækkeligt med én TCP-forbindelse for at udføre angrebet. Samtidig skelnes den trafik, der er relateret til angrebet, ikke tydeligt i logfilerne i forhold til almindelige brugerforespørgsler.
Sårbarheden skyldes særegenhederne ved behandlingen af HEADERS og CONTINUATION rammer i HTTP/2-anmodninger. HEADERS rammer bruges i HTTP/2 til at overføre HTTP-overskrifter, mens CONTINUATION rammer bruges til at opdele overførslen af HTTP-overskrifter i flere trin (f.eks. når overskrifterne ikke passer ind i én ramme, eller når man først skal sende overskrifter, der kan udfyldes på det nuværende trin, og derefter sende de overskrifter, hvis værdier for nuværende ikke kan bestemmes). Når overskrifter sendes i flere trin, sendes en HEADERS ramme først uden END_HEADERS flaget, efterfulgt af flere CONTINUATION rammer med yderligere overskrifter og afsluttes med en CONTINUATION ramme med END_HEADERS flaget.
Angrebsmetoden indebærer at sende en uophørlig strøm af CONTINUATION rammer uden at sætte END_HEADERS flaget. En sådan aktivitet resulterer i transmission af server et stort antal overskrifter, som serveren gemmer i hukommelsen, indtil den tilgængelige proceshukommelse er udtømt. For at skabe høj CPU-belastning kan angriberen, udover at udtømme hukommelsen, udnytte komprimering af indholdet af CONTINUATION-rammer ved at bruge HPACK-formatet, hvis parsing kræver beregninger. I implementeringer af HTTP/1.1 blev der anvendt en grænse for størrelsen af overskrifter og en timeout for forsendelse af forbindelsen for at beskytte mod oversvømmelse af serveren med overskrifter. For HTTP/2, på grund af protokollens kompleksitet, har mange implementeringer ikke forudset lignende beskyttelsesmetoder mod uendelig afsendelse af overskrifter.
Sårbarheden udgør den største fare for brugere af Node.js (CVE-2024-27983), da denne implementering muliggør nedbrud ved at sende et meget lille antal rammer til serveren. På grund af en race-condition i Node.js er det tilstrækkeligt at afslutte forbindelsen under afsendelsen af en ufuldstændig strøm af overskrifter (nedbrud, hvis en CONTINUATION-ramme med flaget END_HEADERS ikke er modtaget under lukningen af forbindelserne). Sårbarheden er blevet rettet i Node.js version 18.20.1, 21.7.2 og 20.12.1 samt i de nyeste versioner af bibliotekerne llhttp og undici. I de nye versioner af Node.js er en mindre farlig sårbarhed (CVE-2024-27982) af typen 'request smuggling' også blevet rettet, hvilket tillader at manipulere 'Content Length'-værdien for at infiltrere indholdet af andre brugeres anmodninger, der behandles i samme tråd mellem frontend og backend.
Sårbarheder relateret til behandling af CONTINUATION i andre HTTP/2.0-implementeringer:
- oghttp (CVE-2024-27919) — ubegrænset hukommelsesforbrug.
- Tempesta FW (CVE-2024-2758) — omgåelse af begrænsninger.
- PHP-bibliotekerne amphp/http, amphp/http-client og amphp/http-server (CVE-2024-2653) — ubegrænset hukommelsesforbrug, frem til fuld udtømning af tilgængelig hukommelse.
- Go-pakken net/http (CVE-2023-45288) — skabe høj CPU-belastning.
- Biblioteket nghttp2 (CVE-2024-28182) — forårsager denial of service.
- Apache Httpd (CVE-2024-27316) — overdreven hukommelsesforbrug og skabelse af CPU-belastning.
- Apache Traffic Server (CVE-2024-31309) — overdreven ressourceforbrug.
- Envoy (CVE-2024-30255) — skaber høj CPU-belastning (for fuld belastning af et CPU-kerne kræves en strøm på 300Mbit/s).
Kilde: opennet.ru
