io_uring pažeidžiamumas leido vartotojui be teisių tapti root net konteineriuose

Neseniai atskleista pažeidžiamumo informacija (CVE-2022-29582) įgyvendinant io_uring asinchroninę įvesties/išvesties sąsają, įtrauktą į Linux branduolį nuo 5.1 versijos, kuri leidžia neprivilegijuotam vartotojui tapti sistemos root, net ir vykdant konteinerio išnaudojimą.

Verta tai paminėti apie pažeidžiamumą pranešta kiek daugiau nei prieš 3 mėnesius (maždaug šių metų gegužės pradžioje), tačiau visa informacija ir atskleidimas buvo paskelbtas tik neseniai.

Kalbant apie pažeidžiamumą, minima, kad š įvyksta, kai pasiekiate jau atlaisvintą atminties bloką, pasireiškia Linux branduoliuose, pradedant 5.10 šaka.

Apie pažeidžiamumą CVE-2022-29582

Šis pažeidžiamumas leidžia pasiekti atlaisvintą atmintį dėl lenktynių sąlygos apdorojant skirtąjį laiką naudojant funkciją io_flush_timeouts(), kurie pašalina skirtojo laiko įrašą iš sąrašo ir jį atšaukia, nepatikrinęs, ar tuo metu buvo sukurtas ir panaikintas skirtasis laikas.

Atnaujintą bendrą io_uring aprašymą jau pateikė kiti. Jie tai paaiškina tūkstantį kartų geriau nei mes, todėl mes tiesiog apžvelgsime posistemį plačiau (žr. šį Grapl Security straipsnį ir šį Flatt Security straipsnį, kad gautumėte puikų įvadą).

Kas svarbiau, opcode laukas nustato, kokio tipo operaciją atlikti. Kiekvienam „operaciniam kodui“, kuriam to reikia, fd lauke nurodomas failo deskriptorius, pagal kurį turi būti atliktas prašomas įvestis / išvestis. Beveik visi įprasti įvesties/išvesties sistemos iškvietimai (skaitymas, siuntimas ir kt.) turi lygiavertį asinchroninį operacijų kodą. Kiekvienas laukas gali atlikti skirtingus vaidmenis, priklausomai nuo operacijos.

Gavus iš SQ, SQE konvertuojamas į vidinį vaizdą, aprašytą struct io_kiocb (branduolio įvesties/išvesties skambutis atgal). Šie objektai paprastai vadinami užklausomis.

struct io_kiocb naudojamas kaip SQE "paruoštas paleisti", kuriuo jis grindžiamas, atitikmuo, pagal kurį bet koks failo deskriptorius išsprendžiamas į struct failą*, pridedami vartotojo kredencialai, asmenybė (kuriame veiks branduolys) ir kt. .

Atlikus prašomą operaciją, ji įrašoma į užbaigimo eilę (CQ) įrašas, atitinkantis SQE. Toks įrašas vadinamas užbaigimo eilės įrašu (CQE) ir apima tokius laukus kaip klaidos kodas ir rezultato reikšmė. Vartotojo erdvės programa gali apklausti CQ, ar nėra naujų įrašų, kad nustatytų, ar išsiųsti SQE baigti apdoroti ir koks buvo jų rezultatas.

Minima, kad yra keletas scenarijų, kai objektą pakeisti nesunku apie progresą. Tačiau yra du apribojimai:

  • LT' turi būti priskirtas ir inicijuotas lenktynių lange. Tai yra, po LT išleidimo, bet nepasiekus taško LT, prie kurio nebepasiekiama.
  • LT' gali būti tik kitas struct io_kiocb objektas. Dėl krūvos izoliacijos, kai objektai krūvoje yra atskirti pagal jų tipą, per sunku juos priskirti kaip kito tipo objektus lenktynių lange.

Tyrėjai parengė funkcinį išnaudojimą kurios veikimui nereikia įtraukti vartotojo identifikatorių vardų erdvių (vartotojo vardų erdvių) ir gali suteikti pagrindinę prieigą prie pagrindinio kompiuterio, kai neprivilegijuotas vartotojas paleidžia išnaudojimą izoliuotame konteineryje.

Mūsų išnaudojimo tikslas yra 5.10.90 branduolio versija, versija, kurią „Google“ tuo metu veikė nuotoliniu būdu. Turėjome pritaikyti savo eksploataciją pagal konkrečias serverio specifikacijas (4 Skylake Xeon branduoliai @ 2.80 GHz, 16 GiB RAM), tačiau šiek tiek pakeitus, bet koks įrenginys, kuriame veikia pažeidžiamas branduolys, turėtų būti išnaudojamas.

Išnaudojimas taip pat veikia nsjail aplinkoje izoliuotas Google COS (Container Optimized OS) paskirstyme, pagrįstas Chromium OS, ir naudojamas Google Cloud Platform virtualiosiose mašinose Compute Engine. Išnaudojimas skirtas dirbti su branduolio šakomis nuo 5.10 iki 5.12. Galiausiai verta paminėti tai problema išspręsta balandžio mėn. atnaujinimuose 5.10.111, 5.15.34 ir 5.17.3.

Galiausiai, jei norite sužinoti daugiau apie pažeidžiamumą, galite peržiūrėti paskelbtą leidinį Šioje nuorodoje.


Palikite komentarą

Jūsų elektroninio pašto adresas nebus skelbiamas. Privalomi laukai yra pažymėti *

*

*

  1. Už duomenis atsakingas: AB Internet Networks 2008 SL
  2. Duomenų paskirtis: kontroliuoti šlamštą, komentarų valdymą.
  3. Įteisinimas: jūsų sutikimas
  4. Duomenų perdavimas: Duomenys nebus perduoti trečiosioms šalims, išskyrus teisinius įsipareigojimus.
  5. Duomenų saugojimas: „Occentus Networks“ (ES) talpinama duomenų bazė
  6. Teisės: bet kuriuo metu galite apriboti, atkurti ir ištrinti savo informaciją.