ʻO ka nāwaliwali o ke kumu ma ka Linux kernel a me ka hōʻole ʻana i ka lawelawe ma systemd

Ua hōʻike nā mea noiʻi palekana mai Qualys i nā kikoʻī o nā mea palupalu ʻelua e pili ana i ka Linux kernel a me ka systemd system manager. ʻO kahi palupalu i loko o ka kernel (CVE-2021-33909) hiki i kahi mea hoʻohana kūloko ke hoʻokō i ka hoʻokō code me nā kuleana kumu ma o ka hoʻopunipuni ʻana i nā papa kuhikuhi nui loa.

Hoʻonui ʻia ka pilikia o ka nāwaliwali e ka mea hiki i nā mea noiʻi ke hoʻomākaukau i nā hana hana e hana ana ma Ubuntu 20.04/20.10/21.04, Debian 11 a me Fedora 34 i ka hoʻonohonoho paʻamau. Hoʻomaopopo ʻia ʻaʻole i hoʻāʻo ʻia nā māhele ʻē aʻe, akā hiki ke hoʻouka ʻia i ka pilikia a hiki ke hoʻouka ʻia. Ua hoʻohiki ʻia ke code piha o nā mea hoʻohana e paʻi ʻia ma hope o ka hoʻopau ʻia ʻana o ka pilikia ma nā wahi āpau, akā i kēia manawa aia kahi prototype o nā hana liʻiliʻi i loaʻa, e hoʻopau ai ka ʻōnaehana. Aia ka pilikia mai Iulai 2014 a pili i ka hoʻokuʻu kernel e hoʻomaka ana mai 3.16. Ua hui pū ʻia ka hoʻoponopono nāwaliwali me ke kaiāulu a ua ʻae ʻia i loko o ka kernel ma Iulai 19th. Ua hoʻopuka mua nā māhele nui i nā mea hou i kā lākou mau kernel packages (Debian, Ubuntu, Fedora, RHEL, SUSE, Arch).

Hoʻokumu ʻia ka nāwaliwali ma muli o ka hiki ʻole ke nānā i ka hopena o ka nui_t i ka hoʻololi int ma mua o ka hana ʻana i nā hana ma ke code seq_file, e hana ana i nā faila mai kahi ʻano o nā moʻolelo. ʻO ka hōʻole ʻana i ka nānā ʻana hiki ke hopena i nā palapala ma waho o nā palena i ka buffer i ka wā e hana ana, e kau ana, a me ka holoi ʻana i kahi hoʻonohonoho papa kuhikuhi pūnana (ʻoi aku ka nui o ke ala ma mua o 1 GB). ʻO ka hopena, hiki i ka mea hoʻouka ke hoʻokō i kahi kaula 10-byte "//deleted" i kākau ʻia ma kahi offset o "-2 GB - 10 bytes" e kuhikuhi ana i ka wahi ma mua o ka buffer i hāʻawi ʻia.

Pono ka hana hoʻomākaukau i ka 5 GB o ka hoʻomanaʻo a me 1 miliona inodes manuahi e hana. Hana ʻia ka hoʻohana ʻana ma ke kāhea ʻana iā mkdir() e hana i kahi hierarchy o kahi miliona mau subdirectories e hoʻokō i ka nui o ka faila ma mua o 1 GB. Hoʻokomo ʻia kēia papa kuhikuhi ma o bind-mount i kahi inoa inoa hoʻohana ʻokoʻa, a laila holo ka hana rmdir () e wehe iā ia. Ma ka like, hana ʻia kahi kaula e hoʻouka i kahi papahana eBPF liʻiliʻi, i kāohi ʻia ma ke kahua ma hope o ka nānā ʻana i ka pseudocode eBPF, akā ma mua o kāna hōʻuluʻulu JIT.

I ka unprivileged userid namespace, ua wehe ʻia ka faila /proc/self/mountinfo a heluhelu ʻia ka inoa ala lōʻihi o ka papa kuhikuhi hoʻopaʻa paʻa ʻia, ka hopena o ke kaula "//deleted" i kākau ʻia i kahi ma mua o ka hoʻomaka ʻana o ka buffer. Ua koho ʻia ke kūlana no ke kākau ʻana i ka laina i mea e kākau ai i ke aʻo ʻana i ka papahana eBPF i hoʻāʻo ʻia akā ʻaʻole i hoʻohui ʻia.

A laila, ma ka papahana eBPF, hoʻololi ʻia ke kākau ʻana i waho o ka buffer i hiki ke heluhelu a kākau i nā hale kernel ʻē aʻe ma o ka hoʻopunipuni ʻana i nā hale btf a me map_push_elem. Ma muli o ka hopena, hoʻoholo ka hoʻohana i ka wahi o ka modprobe_path [] buffer i ka hoʻomanaʻo kernel a hoʻopaʻa i ke ala "/ sbin / modprobe" i loko, e hiki ai iā ʻoe ke hoʻomaka i ka hoʻomaka ʻana o kahi faila me nā kuleana kumu i ka wā o kahi. request_module() kelepona, i hoʻokō ʻia, no ka laʻana, i ka wā e hana ana i ke kumu netlink.

Hāʻawi nā mea noiʻi i kekahi mau workarounds i kūpono wale no ka hoʻohana pono ʻana, akā ʻaʻole e hoʻopau i ka pilikia ponoʻī. Manaʻo ʻia e hoʻonoho i "/proc/sys/kernel/unprivileged_userns_clone" i ka 0 e hoʻopau i nā papa kuhikuhi kau ʻana ma kahi inoa inoa ID mea hoʻohana ʻokoʻa, a me "/proc/sys/kernel/unprivileged_bpf_disabled" i ka 1 e hoʻopau i ka hoʻouka ʻana i nā polokalamu eBPF i loko o ka kernel.

He mea koʻikoʻi ia i ka nānā ʻana i kahi hoʻouka kaua ʻē aʻe e pili ana i ka hoʻohana ʻana i ka mīkini FUSE ma mua o ka hoʻopaʻa ʻana i kahi papa kuhikuhi nui, ua ʻike nā mea noiʻi i kahi nāwaliwali ʻē aʻe (CVE-2021-33910) e pili ana i ka luna ʻōnaehana systemd. Ua ʻike ʻia i ka wā e hoʻāʻo ai e kau i kahi papa kuhikuhi me ka nui o ke ala i ʻoi aku ma mua o 8 MB ma o FUSE, ʻo ke kaʻina hana hoʻomaka (PID1) e holo i waho o ka hoʻomanaʻo hoʻomanaʻo a me ka hāʻule ʻana, e waiho ana i ka ʻōnaehana i kahi kūlana "panic".

ʻO ka pilikia, ʻo ka systemd tracks a parses i nā ʻike o /proc/self/mountinfo, a hana i kēlā me kēia wahi mauna i ka hana unit_name_path_escape(), e hana ana i kahi hana strdupa () e kau ana i ka ʻikepili ma ka waihona ma mua o ka hoʻomanaʻo i hoʻokaʻawale ʻia. . No ka mea, ua kaupalena ʻia ka nui o ka hoʻopaʻa ʻana ma o RLIMIT_STACK, ʻo ka hoʻoili ʻana i kahi ala nui loa i ka lae mauna e hāʻule ai ke kaʻina PID1 a hoʻōki i ka ʻōnaehana. No ka hoʻouka ʻana, hiki iā ʻoe ke hoʻohana i ka module FUSE maʻalahi loa i hui pū me ka hoʻohana ʻana i kahi papa kuhikuhi nui loa ma ke ʻano he wahi mauna, ʻoi aku ka nui o ke ala ma mua o 8 MB.

Ua ʻike ʻia ka pilikia mai ka systemd 220 (ʻApelila 2015), ua hoʻopaʻa ʻia i loko o ka waihona systemd nui a hoʻopaʻa ʻia i nā māhele (Debian, Ubuntu, Fedora, RHEL, SUSE, Arch). ʻO ka mea nui, i ka hoʻokuʻu ʻana i ka systemd 248 ʻaʻole hana ka hoʻohana ma muli o kahi pahu i loko o ka code systemd e hoʻopau ʻole ai ka hana ʻana o /proc/self/mountinfo. He mea hoihoi nō hoʻi i ka makahiki 2018, ua kū mai kahi kūlana like a i ka wā e hoʻāʻo ai e kākau i kahi hoʻohana no ka vulnerability CVE-2018-14634 i ka Linux kernel, ua ʻike nā mea noiʻi Qualys i ʻekolu mau koʻikoʻi koʻikoʻi ma systemd.

Source: opennet.ru

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