A Netflix és a Google kutatói
A problémákat a HTTP/2 protokollba bevezetett bonyodalmak okozták, amelyek a bináris struktúrák használatával, a kapcsolatokon belüli adatáramlást korlátozó rendszerrel, az áramlási prioritási mechanizmussal, valamint a HTTP/2 kapcsolaton működő ICMP-szerű vezérlőüzenetekkel kapcsolatosak. szint (például ping, visszaállítás és áramlási beállítások). Sok megvalósítás nem korlátozta megfelelően a vezérlőüzenetek áramlását, nem kezelte hatékonyan a prioritási sort a kérések feldolgozásakor, vagy az áramlásvezérlő algoritmusok szuboptimális megvalósításait használta.
A legtöbb azonosított támadási mód bizonyos kérések elküldésére vezethető vissza a kiszolgálónak, ami nagyszámú válasz generálásához vezet. Ha a kliens nem olvas adatokat a socketből, és nem zárja le a kapcsolatot, akkor a szerveroldali válaszpufferelési sor folyamatosan töltődik. Ez a viselkedés megterheli a sorkezelő rendszert a hálózati kapcsolatok feldolgozásához, és a megvalósítás jellemzőitől függően a rendelkezésre álló memória vagy CPU erőforrások kimerüléséhez vezet.
Azonosított sebezhetőségek:
- CVE-2019-9511 (Data Dribble) – a támadó nagy mennyiségű adatot kér le több szálba a csúszóablak méretének és a szálprioritásnak a manipulálásával, és arra kényszeríti a kiszolgálót, hogy 1 bájtos blokkokban állítsa sorba az adatokat;
- CVE-2019-9512 (Ping Flood) – a támadó folyamatosan mérgezi a ping üzeneteket HTTP/2 kapcsolaton keresztül, aminek következtében az elküldött válaszok belső sora elárasztja a másik oldalon;
- CVE-2019-9513 (Erőforráshurok) – a támadó több kérési szálat hoz létre, és folyamatosan módosítja a szálak prioritását, ami a prioritási fa keveredését okozza;
- CVE-2019-9514 (Reset Flood) – a támadó több szálat hoz létre
és minden szálon keresztül érvénytelen kérést küld, aminek hatására a szerver RST_STREAM kereteket küld, de nem fogadja el azokat a válaszsor kitöltésére; - CVE-2019-9515 (Settings Flood) - a támadó üres „BEÁLLÍTÁSOK” kereteket küld, amelyekre válaszul a szervernek vissza kell igazolnia az egyes kérések fogadását;
- CVE-2019-9516 (0-Length Headers Leak) – a támadó fejlécek folyamát küldi null névvel és null értékkel, a kiszolgáló pedig lefoglal egy puffert a memóriában az egyes fejlécek tárolására, és nem engedi fel a munkamenet végéig ;
- CVE-2019-9517 (belső adatpufferelés) – megnyílik a támadó
HTTP/2 csúszóablak a szerver számára, hogy korlátozás nélkül küldjön adatokat, de zárva tartja a TCP-ablakot, megakadályozva, hogy az adatok ténylegesen a socketbe kerüljenek. Ezután a támadó olyan kéréseket küld, amelyek nagy választ igényelnek; - CVE-2019-9518 (Üres keretek elárasztása) – A támadó DATA, HEADERS, CONTINUATION vagy PUSH_PROMISE típusú keretek folyamát küldi, de üres hasznos adattartalommal és folyamlezáró jelző nélkül. A szerver időt tölt az egyes keretek feldolgozásával, ami aránytalan a támadó által fogyasztott sávszélességgel.
Forrás: opennet.ru