Ranjivost u jezgri Linuxa koja omogućuje oštećenje datoteka samo za čitanje

Ranjivost je identificirana u jezgri Linuxa (CVE-2022-0847) koja dopušta prebrisanje sadržaja predmemorije stranice za sve datoteke, uključujući one u načinu rada samo za čitanje, otvorene s oznakom O_RDONLY ili smještene na sustavima datoteka montiran u načinu rada samo za čitanje. U praktičnom smislu, ranjivost bi se mogla koristiti za ubacivanje koda u proizvoljne procese ili oštećenje podataka u otvorenim datotekama. Na primjer, možete promijeniti sadržaj datoteke authorized_keys za sshd proces. Prototip eksploatacije dostupan je za testiranje.

Problem je dobio kodno ime Dirty Pipe, slično kritičnoj ranjivosti Dirty COW identificiranoj 2016. Napominje se da je u pogledu razine opasnosti Dirty Pipe na istoj razini kao Dirty COW, ali je puno lakši za rukovanje. Ranjivost je identificirana tijekom analize pritužbi na povremeno oštećenje datoteka preuzetih putem mreže u sustavu koji preuzima komprimirane arhive s log servera (37 oštećenja u 3 mjeseca na opterećenom sustavu), za čiju je pripremu korištena operacija splice(). i neimenovane cijevi.

Ranjivost se pojavljuje počevši od Linux kernela 5.8, objavljenog u kolovozu 2020., tj. prisutan u Debianu 11, ali ne utječe na osnovni kernel u Ubuntu 20.04 LTS. Jezgre RHEL 8.x i openSUSE/SUSE 15 inicijalno se temelje na starim granama, no moguće je da je promjena koja uzrokuje problem prenesena u njih (još nema točnih podataka). Objavljivanje ažuriranja paketa u distribucijama možete pratiti na ovim stranicama: Debian, SUSE, Ubuntu, RHEL, Fedora, Gentoo, Arch Linux. Popravak za ranjivost predložen je u izdanjima 5.16.11, 5.15.25 i 5.10.102. Popravak je također uključen u kernel koji se koristi u platformi Android.

Ranjivost je uzrokovana nedostatkom inicijalizacije vrijednosti “buf->flags” u kodu funkcija copy_page_to_iter_pipe() i push_pipe(), unatoč činjenici da se memorija ne briše prilikom dodjele strukture i tijekom određenih manipulacija s neimenovane cijevi, vrijednost iz druge operacije. Koristeći ovu značajku, neprivilegirani lokalni korisnik može postići pojavu vrijednosti PIPE_BUF_FLAG_CAN_MERGE u zastavici, što vam omogućuje organiziranje prepisivanja podataka u predmemoriju stranice jednostavnim pisanjem novih podataka u posebno pripremljenu neimenovanu cijev.

Za napad ciljna datoteka mora biti čitljiva, a budući da se prava pristupa ne provjeravaju prilikom pisanja u cjevovod, zamjena u predmemoriji stranice također se može izvršiti za datoteke koje se nalaze na particijama montiranim samo za čitanje (na primjer, za datoteke c CD- ROM). Nakon zamjene informacija u predmemoriji stranice, prilikom čitanja podataka iz datoteke, proces neće primiti stvarne podatke, već zamijenjene podatke.

Operacija se svodi na stvaranje neimenovanog kanala i njegovo ispunjavanje proizvoljnim podacima kako bi se osiguralo da je zastavica PIPE_BUF_FLAG_CAN_MERGE postavljena u svim prstenastim strukturama povezanim s njim. Zatim se podaci čitaju iz kanala, ali zastavica ostaje postavljena u svim instancama pipe_buffer strukture u pipe_inode_info prstenastim strukturama. Zatim se upućuje poziv splice() za čitanje podataka iz ciljne datoteke u neimenovanu cijev, počevši od željenog pomaka. Prilikom pisanja podataka u ovu neimenovanu cijev, zbog postavljene zastavice PIPE_BUF_FLAG_CAN_MERGE, podaci u predmemoriji stranice bit će prebrisani umjesto stvaranja nove instance strukture pipe_buffer.

Izvor: opennet.ru

Dodajte komentar