Forskare från Netflix och Google
Problemen berodde på komplikationer som introducerades i HTTP/2-protokollet förknippade med användningen av binära strukturer, ett system för att begränsa dataflöden inom anslutningar, en flödesprioriteringsmekanism och närvaron av ICMP-liknande kontrollmeddelanden som fungerar vid HTTP/2-anslutningen nivå (till exempel ping-, återställnings- och flödesinställningar). Många implementeringar begränsade inte korrekt flödet av kontrollmeddelanden, hanterade inte effektivt prioritetskön vid bearbetning av förfrågningar eller använde suboptimala implementeringar av flödeskontrollalgoritmer.
De flesta av de identifierade attackmetoderna går ut på att skicka vissa förfrågningar till servern, vilket leder till generering av ett stort antal svar. Om klienten inte läser data från socket och inte stänger anslutningen, fylls svarsbuffertkön på serversidan kontinuerligt. Detta beteende skapar en belastning på köhanteringssystemet för bearbetning av nätverksanslutningar och leder, beroende på implementeringsfunktionerna, till att tillgängligt minne eller CPU-resurser förbrukas.
Identifierade sårbarheter:
- CVE-2019-9511 (Data Dribble) - en angripare begär en stor mängd data i flera trådar genom att manipulera skjutfönstrets storlek och trådprioritet, vilket tvingar servern att köa data i 1-byte block;
- CVE-2019-9512 (Ping Flood) - en angripare förgiftar kontinuerligt pingmeddelanden över en HTTP/2-anslutning, vilket gör att den interna kön av skickade svar svämmar över på andra sidan;
- CVE-2019-9513 (Resource Loop) - en angripare skapar flera begärantrådar och ändrar kontinuerligt trådarnas prioritet, vilket får prioritetsträdet att blandas;
- CVE-2019-9514 (Reset Flood) - en angripare skapar flera trådar
och skickar en ogiltig begäran genom varje tråd, vilket gör att servern skickar RST_STREAM-ramar, men accepterar dem inte för att fylla svarskön; - CVE-2019-9515 (Settings Flood) - angriparen skickar en ström av tomma "SETTINGS"-ramar, som svar på vilket servern måste bekräfta mottagandet av varje begäran;
- CVE-2019-9516 (0-Length Headers Leak) – en angripare skickar en ström av rubriker med ett nollnamn och ett nollvärde, och servern tilldelar en buffert i minnet för att lagra varje header och släpper den inte förrän sessionen slutar ;
- CVE-2019-9517 (intern databuffring) - angripare öppnas
HTTP/2 glidande fönster för servern att skicka data utan begränsningar, men håller TCP-fönstret stängt, vilket förhindrar att data faktiskt skrivs till sockeln. Därefter skickar angriparen förfrågningar som kräver ett stort svar; - CVE-2019-9518 (Empty Frames Flood) - En angripare skickar en ström av ramar av typen DATA, HEADERS, CONTINUATION eller PUSH_PROMISE, men med tom nyttolast och ingen flödesavslutningsflagga. Servern ägnar tid åt att bearbeta varje bildruta, oproportionerligt med den bandbredd som konsumeras av angriparen.
Källa: opennet.ru