Varnarleysi í Linux kjarnanum sem gerir skrifvarða skrám kleift að skemma

Varnarleysi hefur fundist í Linux kjarnanum (CVE-2022-0847) sem gerir kleift að skrifa yfir innihald skyndiminni síðunnar fyrir hvaða skrár sem er, þar á meðal þær sem eru í skrifvarandi ham, opnaðar með O_RDONLY fánanum eða staðsettar á skráarkerfum settur í skrifvarinn ham. Í raun má nota varnarleysið til að setja kóða inn í handahófskennda ferla eða spilla gögnum í opnum skrám. Til dæmis geturðu breytt innihaldi authorized_keys skráarinnar fyrir sshd ferlið. Frumgerð er fáanleg til prófunar.

Vandamálið hefur fengið kóðanafnið Dirty Pipe, svipað og mikilvæga varnarleysið Dirty COW sem greindist árið 2016. Tekið er fram að með tilliti til hættustigs er Dirty Pipe á sama stigi og Dirty COW, en er mun auðveldara í notkun. Varnarleysið kom í ljós við greiningu kvartana um reglubundna spillingu skráa sem hlaðið er niður um netið í kerfi sem hleður niður þjöppuðum skjalasöfnum frá annálþjóni (37 spillingar á 3 mánuðum á hlaðnu kerfi), en undirbúningurinn notaði splice() aðgerðina. og ónefndir rör.

Varnarleysið virðist byrja með Linux kjarna 5.8, sem kom út í ágúst 2020, þ.e. til staðar í Debian 11, en hefur ekki áhrif á grunnkjarnann í Ubuntu 20.04 LTS. RHEL 8.x og openSUSE/SUSE 15 kjarnarnir eru upphaflega byggðir á gömlum útibúum, en það er mögulegt að breytingin sem olli vandamálinu hafi verið flutt inn í þá (það eru engin nákvæm gögn ennþá). Þú getur fylgst með útgáfu pakkauppfærslna í dreifingum á þessum síðum: Debian, SUSE, Ubuntu, RHEL, Fedora, Gentoo, Arch Linux. Lagfæring fyrir varnarleysið var lögð til í útgáfum 5.16.11, 5.15.25 og 5.10.102. Lagfæringin er einnig innifalin í kjarnanum sem notaður er á Android pallinum.

Varnarleysið stafar af skorti á frumstillingu „buf->flags“ gildisins í kóðanum á aðgerðunum copy_page_to_iter_pipe() og push_pipe(), þrátt fyrir að minnið sé ekki hreinsað þegar mannvirki er úthlutað og við ákveðnar meðhöndlun með ónefndir rör, gildi frá annarri aðgerð. Með því að nota þennan eiginleika getur óforréttur staðbundinn notandi náð útliti PIPE_BUF_FLAG_CAN_MERGE gildisins í fánanum, sem gerir þér kleift að skipuleggja yfirskrift gagna í skyndiminni síðunnar með því einfaldlega að skrifa ný gögn í sérútbúið ónefnda pípu.

Fyrir árás verður markskráin að vera læsileg og þar sem aðgangsréttur er ekki hakaður þegar skrifað er í pípu, er einnig hægt að skipta út í skyndiminni síðu fyrir skrár sem staðsettar eru á skiptingum sem eru settar upp sem skrifvarinn (til dæmis fyrir skrár c CD- ROM). Eftir að hafa skipt út upplýsingum í skyndiminni síðunnar, þegar gögn eru lesin úr skrá, mun ferlið ekki fá raunveruleg gögn, heldur gögnin sem skipt er um.

Aðgerð kemur niður á því að búa til ónefnda rás og fylla hana af handahófskenndum gögnum til að tryggja að PIPE_BUF_FLAG_CAN_MERGE fáninn sé stilltur í öllum hringbyggingum sem tengjast henni. Næst eru gögnin lesin af rásinni, en fáninn er áfram stilltur í öllum tilvikum pipe_buffer uppbyggingu í pipe_inode_info hringbyggingum. Þá er hringt í splice() til að lesa gögn úr markskránni í ónefnda pípu, byrjað á æskilegri offset. Þegar gögn eru rituð í þessa ónefndu pípu, vegna þess að PIPE_BUF_FLAG_CAN_MERGE fáninn er stilltur, verður gögnum í skyndiminni síðu skrifað yfir í stað þess að búa til nýtt tilvik af pipe_buffer uppbyggingunni.

Heimild: opennet.ru

Bæta við athugasemd