Dažādās HTTP/2 protokola implementācijās ir identificētas 8 DoS ievainojamības

Pētnieki no Netflix un Google identificēts Dažādās HTTP/2 protokola implementācijās ir astoņas ievainojamības, kas var izraisīt pakalpojuma atteikumu, noteiktā veidā nosūtot tīkla pieprasījumu straumi. Problēma zināmā mērā ietekmē lielāko daļu HTTP serveru ar HTTP/2 atbalstu, un tā rezultātā darbiniekam pietrūkst atmiņas vai tiek radīta pārāk liela CPU slodze. Atjauninājumi, kas novērš ievainojamības, jau ir iesniegti nginx 1.16.1/1.17.3 и H2O 2.2.6, bet pagaidām nav pieejams Apache httpd un citi produkti.

Problēmas radīja sarežģījumi, kas tika ieviesti HTTP/2 protokolā saistībā ar bināro struktūru izmantošanu, sistēmu datu plūsmu ierobežošanai savienojumos, plūsmas prioritāšu noteikšanas mehānismu un ICMP līdzīgu kontroles ziņojumu klātbūtni, kas darbojas HTTP/2 savienojumā. līmenī (piemēram, ping, atiestatīšana un plūsmas iestatījumi). Daudzas ieviešanas pareizi neierobežoja vadības ziņojumu plūsmu, efektīvi nepārvaldīja prioritāro rindu, apstrādājot pieprasījumus, vai izmantoja neoptimālus plūsmas kontroles algoritmu implementācijas.

Lielākā daļa identificēto uzbrukuma metožu ir saistītas ar noteiktu pieprasījumu nosūtīšanu serverim, kā rezultātā tiek ģenerēts liels skaits atbilžu. Ja klients nenolasa datus no ligzdas un neaizver savienojumu, atbildes buferizācijas rinda servera pusē tiek nepārtraukti aizpildīta. Šāda rīcība rada slodzi rindu pārvaldības sistēmai tīkla savienojumu apstrādei un, atkarībā no ieviešanas līdzekļiem, noved pie pieejamās atmiņas vai CPU resursu izsmelšanas.

Identificētās ievainojamības:

  • CVE-2019-9511 (Data Dribble) — uzbrucējs pieprasa lielu datu apjomu vairākos pavedienos, manipulējot ar bīdāmā loga izmēru un pavediena prioritāti, liekot serverim ievietot datus rindā 1 baita blokos;
  • CVE-2019-9512 (Ping Flood) — uzbrucējs nepārtraukti saindē ping ziņojumus, izmantojot HTTP/2 savienojumu, izraisot nosūtīto atbilžu iekšējās rindas pārpludināšanu otrā pusē;
  • CVE-2019-9513 (resursu cilpa) — uzbrucējs izveido vairākus pieprasījumu pavedienus un nepārtraukti maina pavedienu prioritāti, izraisot prioritāšu koka jaukšanu;
  • CVE-2019-9514 (Reset Flood) — uzbrucējs izveido vairākus pavedienus
    un nosūta nederīgu pieprasījumu caur katru pavedienu, liekot serverim nosūtīt RST_STREAM kadrus, bet nepieņem tos, lai aizpildītu atbilžu rindu;

  • CVE-2019-9515 (Settings Flood) - uzbrucējs nosūta tukšu “IESTATĪJUMU” kadru straumi, uz kuru atbildot serverim ir jāapstiprina katra pieprasījuma saņemšana;
  • CVE-2019-9516 (0-Length Headers Leak) — uzbrucējs nosūta virsrakstu straumi ar nulles nosaukumu un nulles vērtību, un serveris piešķir buferi atmiņā, lai saglabātu katru galveni, un neatbrīvo to līdz sesijas beigām. ;
  • CVE-2019-9517 (iekšējā datu buferizācija) — tiek atvērts uzbrucējs
    HTTP/2 bīdāmais logs, lai serveris sūtītu datus bez ierobežojumiem, taču TCP logs ir aizvērts, neļaujot faktiski ierakstīt datus ligzdā. Pēc tam uzbrucējs nosūta pieprasījumus, kuriem nepieciešama liela atbilde;

  • CVE-2019-9518 (tukšu kadru plūdi) — uzbrucējs nosūta kadru straumi, kura tips ir DATA, HEADERS, CONTINUATION vai PUSH_PROMISE, bet ar tukšu lietderīgo slodzi un bez plūsmas pārtraukšanas karoga. Serveris pavada laiku, apstrādājot katru kadru, kas ir nesamērīgi ar uzbrucēja patērēto joslas platumu.

Avots: opennet.ru

Pievieno komentāru