Ailagbara gbongbo ninu ekuro Linux ati kiko iṣẹ ni systemd

Awọn oniwadi aabo lati Qualys ti ṣafihan awọn alaye ti awọn ailagbara meji ti o kan ekuro Linux ati oluṣakoso eto eto. Ailagbara ninu ekuro (CVE-2021-33909) gba olumulo agbegbe laaye lati ṣaṣeyọri ipaniyan koodu pẹlu awọn ẹtọ gbongbo nipasẹ ifọwọyi ti awọn ilana itẹ-ẹiyẹ giga.

Ewu ti ailagbara jẹ alekun nipasẹ otitọ pe awọn oniwadi ni anfani lati mura awọn iṣẹ ṣiṣe ti o ṣiṣẹ lori Ubuntu 20.04/20.10/21.04, Debian 11 ati Fedora 34 ni iṣeto aiyipada. O ṣe akiyesi pe awọn pinpin miiran ko ti ni idanwo, ṣugbọn imọ-jinlẹ tun ni ifaragba si iṣoro naa ati pe o le kọlu. Awọn koodu kikun ti awọn iṣamulo ti ṣe ileri lati ṣe atẹjade lẹhin ti iṣoro naa ti yọkuro ni gbogbo ibi, ṣugbọn fun bayi nikan apẹrẹ ti iṣẹ ṣiṣe to lopin wa, nfa eto naa jamba. Iṣoro naa ti wa lati Oṣu Keje ọdun 2014 ati pe o kan awọn idasilẹ kernel ti o bẹrẹ lati 3.16. Atunṣe ailagbara naa jẹ iṣọkan pẹlu agbegbe ati gba sinu ekuro ni Oṣu Keje ọjọ 19th. Awọn pinpin akọkọ ti ṣe awọn imudojuiwọn tẹlẹ si awọn idii ekuro wọn (Debian, Ubuntu, Fedora, RHEL, SUSE, Arch).

Ailagbara naa jẹ idi nipasẹ ikuna lati ṣayẹwo abajade ti iwọn_t si iyipada int ṣaaju ṣiṣe awọn iṣẹ ni koodu seq_file, eyiti o ṣẹda awọn faili lati lẹsẹsẹ awọn igbasilẹ. Ikuna lati ṣayẹwo le ja si ni ita-aala kọwe si ifipamọ nigba ṣiṣẹda, iṣagbesori, ati piparẹ ilana ilana itẹle pupọ (iwọn ọna ti o tobi ju 1 GB). Bi abajade, ikọlu le ṣaṣeyọri okun 10-baiti “// paarẹ” ti a kọ ni aiṣedeede ti “-2 GB - 10 awọn baiti” ti o tọka si agbegbe lẹsẹkẹsẹ ṣaaju ifipamọ ti a sọtọ.

Lo nilokulo ti a pese silẹ nilo 5 GB ti iranti ati 1 milionu awọn inodes ọfẹ lati ṣiṣẹ. Iwa nilokulo naa n ṣiṣẹ nipa pipe mkdir() lati ṣẹda ilana-iṣe ti bii awọn iwe-ipamọ miliọnu kan lati ṣaṣeyọri iwọn ọna faili ti o kọja 1 GB. Yi liana ti wa ni agesin nipasẹ dè-òke ni a lọtọ olumulo namespace, lẹhin eyi ni rmdir () iṣẹ ti wa ni ṣiṣe lati yọ kuro. Ni afiwe, okùn kan ti ṣẹda ti o ṣe ẹru eto eBPF kekere kan, eyiti o dina ni ipele lẹhin ṣiṣe ayẹwo pseudocode eBPF, ṣugbọn ṣaaju iṣakojọpọ JIT rẹ.

Ninu aaye orukọ olumulo ti ko ni anfani, faili / proc/self/mountinfo ti ṣii ati pe orukọ gigun ti iwe-ipamọ ti a fi sii dipọ ti wa ni kika, ti o mu ki okun “// paarẹ” ni kikọ si agbegbe ṣaaju ibẹrẹ ti ifipamọ naa. Ipo fun kikọ laini ni a yan ki o tun kọ ẹkọ naa ni idanwo tẹlẹ ṣugbọn ko ti ṣajọ eto eBPF sibẹsibẹ.

Nigbamii ti, ni ipele eto eBPF, kikọ aibikita ti ko ni iṣakoso ti yipada si agbara iṣakoso lati ka ati kọ si awọn ẹya kernel miiran nipasẹ ifọwọyi ti btf ati awọn ẹya map_push_elem. Bi abajade, nilokulo naa pinnu ipo ti modprobe_path[] ifipamọ ni iranti ekuro ati atunkọ ọna “/ sbin/modprobe” ninu rẹ, eyiti o fun ọ laaye lati bẹrẹ ifilọlẹ eyikeyi faili ti o ṣiṣẹ pẹlu awọn ẹtọ gbongbo ni iṣẹlẹ ti a request_module () ipe, eyi ti o ti ṣiṣẹ, fun apẹẹrẹ, nigba ṣiṣẹda netlink iho .

Awọn oniwadi pese ọpọlọpọ awọn adaṣe ti o munadoko nikan fun ilokulo kan pato, ṣugbọn ko ṣe imukuro iṣoro naa funrararẹ. A ṣe iṣeduro lati ṣeto "/ proc/sys/kernel/unprivileged_userns_clone" si 0 lati mu awọn ilana fifi sori ẹrọ ni aaye ID olumulo ọtọtọ, ati "/proc/sys/kernel/unprivileged_bpf_disabled" si 1 lati mu awọn eto eBPF ṣiṣẹ sinu ekuro.

O jẹ akiyesi pe lakoko ti o n ṣe itupalẹ ikọlu yiyan miiran ti o kan lilo ẹrọ FUSE dipo dipọ-mound lati gbe liana nla kan, awọn oniwadi wa kọja ailagbara miiran (CVE-2021-33910) ti o kan oluṣakoso eto eto. O wa ni pe nigbati o n gbiyanju lati gbe itọsọna kan pẹlu iwọn ọna ti o kọja 8 MB nipasẹ FUSE, ilana ibẹrẹ iṣakoso (PID1) nṣiṣẹ kuro ni iranti akopọ ati awọn ipadanu, eyi ti o fi eto naa sinu ipo "ijaaya".

Iṣoro naa ni pe awọn orin ti eto ati ṣe itupalẹ awọn akoonu ti / proc / ara / mountinfo, ati awọn ilana aaye oke kọọkan ni iṣẹ unit_name_path_escape (), eyiti o ṣe iṣẹ strdupa () kan ti o gbe data naa sori akopọ kuku ju ni iranti iyasọtọ ti agbara. . Niwọn igba ti iwọn akopọ ti o pọ julọ ti ni opin nipasẹ RLIMIT_STACK, sisẹ ọna ti o tobi pupọ si aaye oke nfa ilana PID1 jamba ati da eto naa duro. Fun ikọlu kan, o le lo module FUSE ti o rọrun julọ ni apapo pẹlu lilo itọsọna itẹ-ẹiyẹ giga bi aaye oke, iwọn ọna eyiti o kọja 8 MB.

Iṣoro naa ti han lati igba eto 220 (Kẹrin 2015), ti tẹlẹ ti wa titi ni ibi ipamọ eto akọkọ ati ti o wa titi ni awọn pinpin (Debian, Ubuntu, Fedora, RHEL, SUSE, Arch). Ni pataki, ninu itusilẹ ti eto 248 nilokulo ko ṣiṣẹ nitori kokoro kan ninu koodu eto ti o fa ṣiṣe ti /proc/self/mountinfo lati kuna. O tun jẹ iyanilenu pe ni ọdun 2018, ipo iru kan dide ati nigbati o n gbiyanju lati kọ ilokulo fun ailagbara CVE-2018-14634 ninu ekuro Linux, awọn oniwadi Qualys wa awọn ailagbara pataki mẹta ni eto eto.

orisun: opennet.ru

Fi ọrọìwòye kun