ʻO ka vulnerability i loko o ka Linux kernel e hiki ai ke hoʻopōʻino i nā faila heluhelu wale nō

Ua ʻike ʻia kahi haʻahaʻa ma ka Linux kernel (CVE-2022-0847) e hiki ai ke hoʻopaʻa ʻia nā ʻike o ka ʻaoʻao cache no nā faila, me nā mea ma ke ʻano heluhelu-wale nō, wehe ʻia me ka hae O_RDONLY, a i ʻole ma nā ʻōnaehana faila. kau ʻia ma ke ʻano heluhelu wale nō. Ma nā ʻōlelo kūpono, hiki ke hoʻohana ʻia ka nāwaliwali e hoʻokomo i ke code i nā kaʻina hana a i ʻole nā ​​​​ʻikepili hewa i nā faila i wehe ʻia. No ka laʻana, hiki iā ʻoe ke hoʻololi i nā ʻike o ka faila authorized_keys no ke kaʻina sshd. Loaʻa kahi prototype o ka hoʻohana no ka hoʻāʻo ʻana.

Ua kapa inoa ʻia ka pilikia ʻo Dirty Pipe, e like me ke koʻikoʻi koʻikoʻi ʻo Dirty COW i ʻike ʻia ma 2016. Hoʻomaopopo ʻia ma ke ʻano o ka pae pōʻino, aia ka Dirty Pipe ma ka pae like me Dirty COW, akā ʻoi aku ka maʻalahi o ka hana. Ua ʻike ʻia ka nāwaliwali i ka wā o ka nānā ʻana i nā hoʻopiʻi e pili ana i ka pōʻino o nā faila i hoʻoiho ʻia ma luna o ka pūnaewele ma kahi ʻōnaehana e hoʻoiho i nā waihona i hoʻopaʻa ʻia mai kahi kikowaena log (37 palaho i loko o 3 mau mahina ma kahi ʻōnaehana hoʻouka), ka hoʻomākaukau ʻana i hoʻohana i ka hana splice() a me na paipu inoa ole.

Hōʻike ʻia ka nāwaliwali e hoʻomaka me ka Linux kernel 5.8, i hoʻokuʻu ʻia ma ʻAukake 2020, ʻo ia hoʻi. aia ma Debian 11, akā ʻaʻole pili i ke kumu kumu ma Ubuntu 20.04 LTS. Hoʻokumu mua ʻia ka RHEL 8.x a me openSUSE/SUSE 15 kernels ma luna o nā lālā kahiko, akā hiki ke hoʻihoʻi ʻia ka hoʻololi i ka pilikia i loko o lākou (ʻaʻohe ʻikepili pololei). Hiki iā ʻoe ke hahai i ka hoʻolaha ʻana o nā hōʻano hou i ka hāʻawi ʻana ma kēia mau ʻaoʻao: Debian, SUSE, Ubuntu, RHEL, Fedora, Gentoo, Arch Linux. Ua noi ʻia kahi hoʻoponopono no ka nāwaliwali ma nā hoʻokuʻu 5.16.11, 5.15.25 a me 5.10.102. Hoʻokomo pū ʻia ka hoʻoponopono i ka kernel i hoʻohana ʻia ma ka platform Android.

Hoʻokumu ʻia ka nāwaliwali ma muli o ka nele o ka hoʻomaka ʻana o ka waiwai "buf->flags" i ke code o nā hana copy_page_to_iter_pipe () a me push_pipe (), ʻoiai ʻaʻole i hoʻomaʻemaʻe ʻia ka hoʻomanaʻo i ka wā e hoʻokaʻawale ai i kahi hale a i ka wā o kekahi mau manipulations me. paipu inoa ole, he waiwai mai kekahi hana. Ke hoʻohana nei i kēia hiʻohiʻona, hiki i kahi mea hoʻohana kūloko pono ʻole ke hoʻokō i ke ʻano o ka waiwai PIPE_BUF_FLAG_CAN_MERGE i ka hae, kahi e hiki ai iā ʻoe ke hoʻonohonoho i ka overwriting ʻikepili ma ka ʻaoʻao huna ma ke kākau ʻana i nā ʻikepili hou i kahi paipu i hoʻomākaukau ʻole ʻia.

No ka hoʻouka kaua, pono e heluhelu ʻia ka faila i manaʻo ʻia, a no ka mea ʻaʻole i nānā ʻia nā kuleana komo i ka wā e kākau ai i ka paipu, hiki ke hoʻololi ʻia i ka cache ʻaoʻao no nā faila i loaʻa i nā ʻāpana i kau ʻia he heluhelu wale nō (no ka laʻana, no nā faila c CD- ROM). Ma hope o ka hoʻololi ʻana i ka ʻike ma ka cache ʻaoʻao, i ka heluhelu ʻana i ka ʻikepili mai kahi faila, ʻaʻole e loaʻa i ke kaʻina ka ʻikepili maoli, akā i ka ʻikepili i pani ʻia.

Hoʻomaka ka hana i ka hoʻokumu ʻana i kahi kaila inoa ʻole a hoʻopiha iā ia me ka ʻikepili kūʻokoʻa i mea e hōʻoia ai ua hoʻonohonoho ʻia ka hae PIPE_BUF_FLAG_CAN_MERGE i nā hale apo a pau e pili ana me ia. Ma hope aʻe, heluhelu ʻia ka ʻikepili mai ke kahawai, akā mau ka hae i nā manawa āpau o ka pipe_buffer structure i loko o nā hale apo pipe_inode_info. A laila hana ʻia kahi kelepona i splice () e heluhelu i ka ʻikepili mai ka faila i hoʻopaʻa ʻia i loko o kahi paipu inoa ʻole, e hoʻomaka ana ma ka offset makemake. Ke kākau ʻana i ka ʻikepili i kēia paipu inoa ʻole, ma muli o ka hoʻonohonoho ʻia ʻana o ka hae PIPE_BUF_FLAG_CAN_MERGE, e kope ʻia ka ʻikepili i loko o ka waihona ʻaoʻao ma mua o ka hana ʻana i kahi mea hou o ka pipe_buffer structure.

Source: opennet.ru

Pākuʻi i ka manaʻo hoʻopuka