Haavatavus Linuxi tuumas, mis võib rikkuda kirjutuskaitstud faile

Linuxi tuumas (CVE-2022-0847) on tuvastatud haavatavus, mis võimaldab lehe vahemälu sisu üle kirjutada kõigi failide puhul, sealhulgas kirjutuskaitstud režiimis, lipuga O_RDONLY avatud või failisüsteemides asuvate failide puhul. monteeritud kirjutuskaitstud režiimis. Praktikas võib haavatavust kasutada koodi sisestamiseks suvalistesse protsessidesse või avatud failide andmete rikkumiseks. Näiteks saate muuta sshd-protsessi jaoks faili authorised_keys sisu. Katsetamiseks on saadaval ärakasutamise prototüüp.

Probleem on saanud koodnime Dirty Pipe, mis sarnaneb 2016. aastal tuvastatud kriitilise haavatavusega Dirty COW. Märgitakse, et ohutasemelt on Dirty Pipe samal tasemel kui Dirty COW, kuid seda on palju lihtsam kasutada. Haavatavus tuvastati kaebuste analüüsimisel võrgu kaudu alla laaditud failide perioodilise riknemise kohta logiserverist tihendatud arhiive alla laadivas süsteemis (37 korruptsiooni 3 kuu jooksul laaditud süsteemis), mille ettevalmistamisel kasutati operatsiooni splice() ja nimetuid torusid.

Haavatavus ilmneb alates 5.8. aasta augustis välja antud Linuxi kernelist 2020, st. olemas Debian 11-s, kuid ei mõjuta Ubuntu 20.04 LTS baastuuma. RHEL 8.x ja openSUSE/SUSE 15 tuumad põhinevad algselt vanadel harudel, kuid on võimalik, et probleemi põhjustanud muudatus kanti neisse tagasi (täpsed andmed veel puuduvad). Saate jälgida pakettide värskenduste avaldamist järgmistel lehtedel: Debian, SUSE, Ubuntu, RHEL, Fedora, Gentoo, Arch Linux. Haavatavuse parandamiseks pakuti välja versioonid 5.16.11, 5.15.25 ja 5.10.102. Parandus sisaldub ka Androidi platvormis kasutatavas tuumas.

Haavatavuse põhjuseks on funktsioonide copy_page_to_iter_pipe() ja push_pipe() väärtuse “buf->flags” initsialiseerimise puudumine, hoolimata asjaolust, et mälu ei tühjendata struktuuri eraldamisel ja teatud manipulatsioonide ajal. nimetu torud, väärtus teisest toimingust. Seda funktsiooni kasutades saab privilegeeritud kohalik kasutaja saavutada PIPE_BUF_FLAG_CAN_MERGE väärtuse ilmumise lipule, mis võimaldab korraldada andmete ülekirjutamist lehe vahemälus, kirjutades lihtsalt uued andmed spetsiaalselt ettevalmistatud nimetu torusse.

Rünnakuks peab sihtfail olema loetav ja kuna torusse kirjutamisel juurdepääsuõigusi ei kontrollita, saab lehe vahemälus asendada ka failid, mis asuvad partitsioonides, mis on ühendatud kirjutuskaitstud kujul (näiteks failid c CD- ROM). Pärast lehe vahemälus oleva teabe asendamist ei saa protsess failist andmete lugemisel tegelikke andmeid, vaid asendatud andmeid.

Toiming taandub nimetu kanali loomisele ja selle täitmisele suvaliste andmetega tagamaks, et lipp PIPE_BUF_FLAG_CAN_MERGE on seatud kõigis sellega seotud ringstruktuurides. Järgmiseks loetakse andmeid kanalist, kuid lipp jääb pipe_inode_info ringstruktuurides pipe_buffer struktuuri kõikidel juhtudel seadistatuks. Seejärel kutsutakse splice(), et lugeda andmeid sihtfailist nimetu torusse, alustades soovitud nihkest. Andmete kirjutamisel sellesse nimetu torusse kirjutatakse lipu PIPE_BUF_FLAG_CAN_MERGE seatud tõttu lehe vahemälus olevad andmed üle, selle asemel et luua pipe_buffer struktuuri uus eksemplar.

Allikas: opennet.ru

Lisa kommentaar