Athari kwenye kinu cha Linux inayoruhusu upotovu wa faili za kusoma tu

Athari imetambuliwa katika kinu cha Linux (CVE-2022-0847) ambacho huruhusu yaliyomo kwenye akiba ya ukurasa kufutwa kwa faili zozote, ikiwa ni pamoja na zile zilizo katika hali ya kusoma tu, iliyofunguliwa kwa bendera ya O_RDONLY, au iliyo kwenye mifumo ya faili. imewekwa katika hali ya kusoma tu. Katika hali halisi, athari inaweza kutumika kuingiza msimbo katika michakato isiyo rasmi au kupotosha data katika faili zilizofunguliwa. Kwa mfano, unaweza kubadilisha yaliyomo kwenye authorized_keys faili kwa mchakato wa sshd. Mfano wa exploit unapatikana kwa majaribio.

Tatizo limepewa jina la Bomba Dirty, sawa na hatari kubwa ya COW Dirty iliyotambuliwa mwaka wa 2016. Imeelezwa kuwa kwa upande wa kiwango cha hatari, Bomba chafu liko kwenye kiwango sawa na ng'ombe Mchafu, lakini ni rahisi zaidi kufanya kazi. Athari hiyo ilitambuliwa wakati wa kuchanganua malalamiko kuhusu ufisadi wa mara kwa mara wa faili zilizopakuliwa kwenye mtandao katika mfumo wa kupakua kumbukumbu zilizobanwa kutoka kwa seva ya kumbukumbu (ufisadi 37 ndani ya miezi 3 kwenye mfumo uliopakiwa), utayarishaji ambao ulitumia operesheni ya splice() na mabomba yasiyo na jina.

Athari inaonekana kuanzia kwenye Linux kernel 5.8, iliyotolewa Agosti 2020, i.e. iliyopo katika Debian 11, lakini haiathiri msingi wa kernel katika Ubuntu 20.04 LTS. Kernels za RHEL 8.x na openSUSE/SUSE 15 hapo awali zinatokana na matawi ya zamani, lakini inawezekana kwamba mabadiliko yanayosababisha tatizo yaliletwa ndani yake (hakuna data kamili bado). Unaweza kufuata uchapishaji wa masasisho ya kifurushi katika usambazaji kwenye kurasa hizi: Debian, SUSE, Ubuntu, RHEL, Fedora, Gentoo, Arch Linux. Marekebisho ya athari yametolewa katika matoleo 5.16.11, 5.15.25 na 5.10.102. Marekebisho pia yamejumuishwa kwenye kernel inayotumiwa kwenye jukwaa la Android.

Athari hii inasababishwa na ukosefu wa uanzishaji wa thamani ya "buf->bendera" katika msimbo wa chaguo za kukokotoa copy_page_to_iter_pipe() na push_pipe(), licha ya ukweli kwamba kumbukumbu haijafutwa wakati wa kugawa muundo na wakati wa upotoshaji fulani na. mabomba yasiyo na jina, thamani kutoka kwa operesheni nyingine. Kwa kutumia kipengele hiki, mtumiaji wa ndani ambaye hajabahatika anaweza kufikia mwonekano wa thamani ya PIPE_BUF_FLAG_CAN_MERGE kwenye bendera, ambayo hukuruhusu kupanga ubatilishaji wa data kwenye akiba ya ukurasa kwa kuandika data mpya kwa bomba lililotayarishwa mahususi lisilo na jina.

Kwa shambulio, faili inayolengwa lazima isomeke, na kwa kuwa haki za ufikiaji hazijaangaliwa wakati wa kuandika kwa bomba, uingizwaji katika kashe ya ukurasa unaweza pia kufanywa kwa faili zilizo katika sehemu zilizowekwa kwa kusoma tu (kwa mfano, kwa faili c CD- ROM). Baada ya kubadilisha habari kwenye cache ya ukurasa, wakati wa kusoma data kutoka kwa faili, mchakato hautapata data halisi, lakini data iliyobadilishwa.

Operesheni inategemea kuunda kituo kisicho na jina na kukijaza data kiholela ili kuhakikisha kuwa bendera ya PIPE_BUF_FLAG_CAN_MERGE imewekwa katika miundo yote ya pete inayohusishwa nayo. Ifuatayo, data inasomwa kutoka kwa chaneli, lakini bendera inasalia imewekwa katika hali zote za muundo wa bomba_buffer katika miundo ya pete ya pipe_inode_info. Simu kwa splice() basi inafanywa kusoma data kutoka kwa faili inayolengwa hadi kwa bomba lisilo na jina, kuanzia kwa urekebishaji unaotaka. Wakati wa kuandika data kwa bomba hili lisilo na jina, kutokana na PIPE_BUF_FLAG_CAN_MERGE kuweka alama, data katika akiba ya ukurasa itafutwa badala ya kuunda mfano mpya wa muundo wa pipe_buffer.

Chanzo: opennet.ru

Kuongeza maoni