Er zijn 2 DoS-kwetsbaarheden geïdentificeerd in verschillende implementaties van het HTTP/8-protocol

Onderzoekers van Netflix en Google onthuld Er zijn acht kwetsbaarheden in verschillende implementaties van het HTTP/2-protocol die een Denial of Service kunnen veroorzaken door een stroom netwerkverzoeken op een bepaalde manier te verzenden. Het probleem treft tot op zekere hoogte de meeste HTTP-servers met HTTP/2-ondersteuning en heeft tot gevolg dat de werker onvoldoende geheugen heeft of te veel CPU-belasting veroorzaakt. Updates die kwetsbaarheden elimineren, zijn al gepresenteerd in nginx 1.16.1/1.17.3 и H2O 2.2.6, maar voor nu niet beschikbaar voor Apache httpd en andere producten.

De problemen waren het gevolg van complicaties die in het HTTP/2-protocol waren geïntroduceerd en verband hielden met het gebruik van binaire structuren, een systeem voor het beperken van gegevensstromen binnen verbindingen, een mechanisme voor stroomprioriteit en de aanwezigheid van ICMP-achtige controleberichten die op de HTTP/2-verbinding werken. niveau (bijvoorbeeld ping-, reset- en flow-instellingen). Veel implementaties beperkten de stroom van besturingsberichten niet op de juiste manier, beheerden de prioriteitswachtrij niet efficiënt bij het verwerken van verzoeken, of gebruikten suboptimale implementaties van stroombesturingsalgoritmen.

De meeste van de geïdentificeerde aanvalsmethoden komen neer op het sturen van bepaalde verzoeken naar de server, wat leidt tot het genereren van een groot aantal reacties. Als de client geen gegevens uit de socket leest en de verbinding niet verbreekt, wordt de responsbufferwachtrij aan de serverzijde voortdurend gevuld. Dit gedrag veroorzaakt een belasting van het wachtrijbeheersysteem voor het verwerken van netwerkverbindingen en leidt, afhankelijk van de implementatiekenmerken, tot uitputting van het beschikbare geheugen of CPU-bronnen.

Geïdentificeerde kwetsbaarheden:

  • CVE-2019-9511 (Data Dribble) - een aanvaller verzoekt een grote hoeveelheid gegevens in meerdere threads door de schuifvenstergrootte en threadprioriteit te manipuleren, waardoor de server wordt gedwongen de gegevens in blokken van 1 byte in de wachtrij te plaatsen;
  • CVE-2019-9512 (Ping Flood) - een aanvaller vergiftigt voortdurend ping-berichten via een HTTP/2-verbinding, waardoor de interne wachtrij met verzonden antwoorden aan de andere kant overstroomt;
  • CVE-2019-9513 (Resource Loop) - een aanvaller creëert meerdere verzoekthreads en verandert voortdurend de prioriteit van de threads, waardoor de prioriteitenboom in willekeurige volgorde wordt weergegeven;
  • CVE-2019-9514 (Reset Flood) - een aanvaller maakt meerdere threads
    en verzendt een ongeldig verzoek via elke thread, waardoor de server RST_STREAM-frames verzendt, maar deze niet accepteert om de antwoordwachtrij te vullen;

  • CVE-2019-9515 (Settings Flood) - de aanvaller verzendt een stroom lege “SETTINGS”-frames, als reactie waarop de server de ontvangst van elk verzoek moet bevestigen;
  • CVE-2019-9516 (0-Length Headers Leak) – een aanvaller verzendt een stroom headers met een nulnaam en een nulwaarde, en de server wijst een buffer in het geheugen toe om elke header op te slaan en geeft deze pas vrij als de sessie eindigt ;
  • CVE-2019-9517 (Interne gegevensbuffering) - aanvaller wordt geopend
    HTTP/2-schuifvenster waarmee de server gegevens zonder beperkingen kan verzenden, maar het TCP-venster gesloten houdt, waardoor wordt voorkomen dat gegevens daadwerkelijk naar de socket worden geschreven. Vervolgens verzendt de aanvaller verzoeken die een groot antwoord vereisen;

  • CVE-2019-9518 (Empty Frames Flood) - Een aanvaller verzendt een stroom frames van het type DATA, HEADERS, CONTINUATION of PUSH_PROMISE, maar met een lege lading en zonder vlag voor het beëindigen van de stroom. De server besteedt tijd aan het verwerken van elk frame, wat niet in verhouding staat tot de bandbreedte die de aanvaller verbruikt.

Bron: opennet.ru

Voeg een reactie