„Linux“ branduolio pažeidžiamumas, galintis pažeisti tik skaitomus failus

Buvo nustatytas Linux branduolio (CVE-2022-0847) pažeidžiamumas, leidžiantis perrašyti puslapio talpyklos turinį bet kokiems failams, įskaitant tuos, kurie veikia tik skaitymo režimu, atidaromi su O_RDONLY vėliava arba yra failų sistemose. montuojamas tik skaitymo režimu. Praktiškai pažeidžiamumas gali būti naudojamas kodui įterpti į savavališkus procesus arba sugadinti atidarytų failų duomenis. Pavyzdžiui, galite pakeisti sshd proceso autorizuotas_keys failo turinį. Galima išbandyti išnaudojimo prototipą.

Problema buvo pavadinta kodiniu pavadinimu „Dirty Pipe“, panašiai kaip 2016 m. nustatytas kritinis pažeidžiamumas „Dirty COW“. Pažymima, kad pagal pavojingumo lygį „Dirty Pipe“ yra tokio paties lygio kaip „Dirty COW“, tačiau yra daug lengviau valdomas. Pažeidžiamumas nustatytas nagrinėjant skundus dėl periodinio per tinklą atsisiunčiamų failų sugadinimo sistemoje, atsisiunčiančioje suglaudintus archyvus iš žurnalų serverio (37 pažeidimai per 3 mėnesius įkeltoje sistemoje), kuriai rengiant buvo naudojama operacija splice() ir bevardžių vamzdžių.

Pažeidžiamumas atsiranda pradedant nuo 5.8 Linux branduolio, išleisto 2020 metų rugpjūtį, t.y. yra Debian 11, bet neturi įtakos baziniam branduoliui Ubuntu 20.04 LTS. RHEL 8.x ir openSUSE/SUSE 15 branduoliai iš pradžių yra pagrįsti senomis šakomis, tačiau gali būti, kad problemą sukėlusi pakeitimas buvo perkeltas į juos (tikslių duomenų dar nėra). Galite stebėti paketų naujinimų publikavimą šiuose puslapiuose: Debian, SUSE, Ubuntu, RHEL, Fedora, Gentoo, Arch Linux. Pažeidžiamumo pataisymas buvo pasiūlytas 5.16.11, 5.15.25 ir 5.10.102 leidimuose. Pataisymas taip pat įtrauktas į branduolį, naudojamą „Android“ platformoje.

Pažeidžiamumą sukelia tai, kad funkcijų copy_page_to_iter_pipe() ir push_pipe() kode nėra inicijuota „buf->flags“ reikšmė, nepaisant to, kad atmintis nėra išvaloma skiriant struktūrą ir atliekant tam tikras manipuliacijas su neįvardinti vamzdžiai, vertė iš kitos operacijos. Naudodamas šią funkciją, neprivilegijuotas vietinis vartotojas gali pasiekti, kad vėliavėlėje būtų rodoma PIPE_BUF_FLAG_CAN_MERGE reikšmė, kuri leidžia organizuoti duomenų perrašymą puslapio talpykloje tiesiog įrašant naujus duomenis į specialiai paruoštą bevardį vamzdį.

Atakos atveju tikslinis failas turi būti skaitomas, o kadangi rašant į vamzdį prieigos teisės netikrinamos, puslapio talpykloje taip pat gali būti pakeisti failai, esantys skaidiniuose, prijungtuose tik skaitymui (pavyzdžiui, failams c CD- ROM). Pakeitus informaciją puslapio talpykloje, nuskaitant duomenis iš failo, procesas gaus ne tikrus, o pakeistus duomenis.

Veiksmas susijęs su neįvardyto kanalo sukūrimu ir jo užpildymu savavališkais duomenimis, siekiant užtikrinti, kad vėliavėlė PIPE_BUF_FLAG_CAN_MERGE būtų nustatyta visose su juo susijusiose žiedų struktūrose. Tada duomenys nuskaitomi iš kanalo, tačiau vėliavėlė lieka nustatyta visuose pipe_buffer struktūros atveju pipe_inode_info žiedo struktūrose. Tada iškviečiamas splice() norint nuskaityti duomenis iš tikslinio failo į neįvardytą vamzdį, pradedant nuo pageidaujamo poslinkio. Rašant duomenis į šį bevardį vamzdį, dėl nustatytos vėliavėlės PIPE_BUF_FLAG_CAN_MERGE, puslapio talpykloje esantys duomenys bus perrašyti, o ne sukurti naują pipe_buffer struktūros egzempliorių.

Šaltinis: opennet.ru

Добавить комментарий