V različnih izvedbah protokola HTTP/2 je bilo ugotovljenih 8 ranljivosti DoS

Raziskovalci iz Netflixa in Googla razkrila V različnih implementacijah protokola HTTP/2 je osem ranljivosti, ki lahko povzročijo zavrnitev storitve s pošiljanjem toka omrežnih zahtev na določen način. Težave do neke mere prizadenejo večino strežnikov HTTP s podporo za HTTP/2 in povzročijo, da delovnemu procesu zmanjka pomnilnika ali povzroči preveliko obremenitev procesorja. Posodobitve, ki odpravljajo ranljivosti, so že predstavljene v nginx 1.16.1/1.17.3 и H2O 2.2.6, ampak za zdaj nedosegljiv za Apache httpd in drugi izdelki.

Težave so bile posledica zapletov, vnesenih v protokol HTTP/2, povezanih z uporabo binarnih struktur, sistemom za omejevanje podatkovnih tokov znotraj povezav, mehanizmom za določanje prednosti toka in prisotnostjo nadzornih sporočil, podobnih ICMP, ki delujejo na povezavi HTTP/2. raven (na primer nastavitve ping, ponastavitev in pretok). Številne implementacije niso pravilno omejile pretoka kontrolnih sporočil, niso učinkovito upravljale prednostne čakalne vrste pri obdelavi zahtev ali so uporabile neoptimalne implementacije algoritmov za nadzor toka.

Večina prepoznanih metod napadov se nanaša na pošiljanje določenih zahtev strežniku, kar povzroči generiranje velikega števila odgovorov. Če odjemalec ne prebere podatkov iz vtičnice in ne zapre povezave, se čakalna vrsta medpomnilnika odgovorov na strani strežnika nenehno polni. To vedenje ustvarja obremenitev sistema za upravljanje čakalne vrste za obdelavo omrežnih povezav in, odvisno od izvedbenih funkcij, vodi do izčrpanja razpoložljivega pomnilnika ali virov CPU.

Ugotovljene ranljivosti:

  • CVE-2019-9511 (Pretapljanje podatkov) – napadalec zahteva veliko količino podatkov v več niti z manipulacijo velikosti drsnega okna in prioritete niti, zaradi česar strežnik prisili, da podatke postavi v čakalno vrsto v 1-bajtnih blokih;
  • CVE-2019-9512 (Ping Flood) – napadalec nenehno zastruplja sporočila ping prek povezave HTTP/2, kar povzroči poplavo notranje čakalne vrste poslanih odgovorov na drugi strani;
  • CVE-2019-9513 (Resource Loop) – napadalec ustvari več niti zahtev in nenehno spreminja prioriteto niti, zaradi česar se prednostno drevo premeša;
  • CVE-2019-9514 (Reset Flood) - napadalec ustvari več niti
    in pošlje neveljavno zahtevo skozi vsako nit, zaradi česar strežnik pošlje okvirje RST_STREAM, vendar jih ne sprejme, da bi zapolnili čakalno vrsto odgovorov;

  • CVE-2019-9515 (Settings Flood) - napadalec pošlje tok praznih okvirjev "SETTINGS", v odgovor na katere mora strežnik potrditi prejem vsake zahteve;
  • CVE-2019-9516 (0-Length Headers Leak) – napadalec pošlje tok glav z ničelnim imenom in ničelno vrednostjo, strežnik pa dodeli medpomnilnik v pomnilniku za shranjevanje vsake glave in ga ne sprosti, dokler se seja ne konča. ;
  • CVE-2019-9517 (Internal Data Buffering) - napadalec se odpre
    Drsno okno HTTP/2 za pošiljanje podatkov strežniku brez omejitev, vendar ohranja okno TCP zaprto, kar preprečuje dejansko pisanje podatkov v vtičnico. Nato napadalec pošlje zahteve, ki zahtevajo velik odziv;

  • CVE-2019-9518 (Poplava praznih okvirjev) – Napadalec pošlje tok okvirjev tipa DATA, HEADERS, CONTINUATION ali PUSH_PROMISE, vendar s praznim tovorom in brez oznake za prekinitev toka. Strežnik porabi čas za obdelavo vsakega okvirja, nesorazmeren s pasovno širino, ki jo porabi napadalec.

Vir: opennet.ru

Dodaj komentar