2 DoS-sårbarheter har identifierats i olika implementeringar av HTTP/8-protokollet

Forskare från Netflix och Google avslöjat Det finns åtta sårbarheter i olika implementeringar av HTTP/2-protokollet som kan orsaka en denial of service genom att skicka en ström av nätverksbegäranden på ett visst sätt. Problemet påverkar de flesta HTTP-servrar med HTTP/2-stöd till viss del och resulterar i att arbetaren får ont om minne eller skapar för mycket CPU-belastning. Uppdateringar som eliminerar sårbarheter presenteras redan i nginx 1.16.1/1.17.3 и H2O 2.2.6, men för nu inte tillgänglig för Apache httpd och andra produkter.

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

Lägg en kommentar