Ho ba kotsing ea metso ho Linux kernel le ho haneloa ha ts'ebeletso ho systemd

Bafuputsi ba ts'ireletso ba tsoang Qualys ba senotse lintlha tsa likotsi tse peli tse amang kernel ea Linux le molaoli oa sistimi ea systemd. Ho ba kotsing ho kernel (CVE-2021-33909) ho lumella mosebelisi oa lehae ho fihlela ts'ebetso ea khoutu ka litokelo tsa metso ka ho thetsa li-directory tse fumanehang haholo.

Kotsi ea ho ba kotsing e mpefatsoa ke taba ea hore bafuputsi ba khonne ho lokisa mesebetsi e sebetsang e sebetsang ho Ubuntu 20.04 / 20.10 / 21.04, Debian 11 le Fedora 34 tlhophisong ea kamehla. Hoa hlokomeloa hore liphaello tse ling ha li e-so hlahlojoe, empa ho ea ka maikutlo a hore li ka ba le bothata 'me li ka hlaseloa. Khoutu e felletseng ea ts'ebetso e ts'episitsoe hore e tla phatlalatsoa ka mor'a hore bothata bo felisoe hohle, empa hajoale ke mohlala feela oa ts'ebetso e fokolang e fumanehang, e etsang hore sistimi e senyehe. Bothata bo bile teng ho tloha ka Phupu 2014 mme bo ama ho lokolloa ha kernel ho tloha ho 3.16. Tokiso ea ho ba kotsing e hokahantsoe le sechaba mme ea amoheloa ka har'a kernel ka la 19 Phupu. Likabelo tsa mantlha li se li hlahisitse lintlafatso ho liphutheloana tsa kernel (Debian, Ubuntu, Fedora, RHEL, SUSE, Arch).

Kotsi e bakoa ke ho hloleha ho hlahloba sephetho sa size_t to int conversion pele o etsa ts'ebetso ka khoutu ea seq_file, e hlahisang lifaele ho tsoa tatellanong ea lirekoto. Ho hloleha ho lekola ho ka etsa hore ho ngolla buffer ka ntle ho meeli ha ho theoa, ho hlophisoa, le ho hlakola sebopeho sa li-directory tse behiloeng haholo (boholo ba tsela bo fetang 1 GB). Ka lebaka leo, mohlaseli a ka finyella khoele ea 10-byte "// hlakotsoe" e ngotsoeng ka lehlakoreng la "-2 GB - 10 bytes" e supang sebaka hang-hang pele ho buffer e fanoeng.

Ts'ebetso e lokiselitsoeng e hloka 5 GB ea memori le li-inode tsa mahala tsa 1 ho sebetsa. The exploit e sebetsa ka ho letsetsa mkdir() ho theha bolaoli ba li-subdirectories tse ka bang milione ho fihlela boholo ba tsela ea faele bo fetang 1 GB. Bukana ena e kenngoa ka bind-mount sebakeng se arohaneng sa lebitso la mosebedisi, ka mor'a moo rmdir() function e tsamaisoa ho e tlosa. Ka mokhoa o ts'oanang, ho entsoe khoele e jarang lenaneo le lenyenyane la eBPF, le koetsoeng sethaleng ka mor'a ho hlahloba pseudocode ea eBPF, empa pele ho ho hlophisoa ha JIT.

Sebakeng sa mabitso sa mosebelisi ea se nang tokelo, faele /proc/self/mountinfo e buloa 'me ho baloa lebitso le lelelele la bukana e kentsoeng, e leng se etsang hore khoele "// hlakoloe" e ngoloe sebakeng seo pele buffer e qala. Boemo ba ho ngola mohala bo khethiloe e le hore bo tlose taelo ea lenaneo la eBPF le seng le ntse le lekoa empa le e-so bokelloe.

Ka mor'a moo, boemong ba lenaneo la eBPF, mongolo o sa laoleheng o tsoang ho buffer o fetoloa bokhoni bo laoloang ba ho bala le ho ngolla likarolo tse ling tsa kernel ka ho qhekella ha btf le map_push_elem. Ka lebaka leo, ts'ebeliso e khetholla sebaka sa modprobe_path[] buffer mohopolong oa kernel mme e hlakola tsela ea "/ sbin/modprobe" ho eona, e u lumellang ho qala ho qalisoa ha faele efe kapa efe e ka sebetsoang e nang le litokelo tsa motso ha ho ka etsahala request_module() call, e etsoang, mohlala, ha ho etsoa netlink socket.

Bafuputsi ba fana ka li-workaround tse 'maloa tse sebetsang hantle feela bakeng sa tšebeliso e itseng, empa ha li felise bothata ka bobona. Ho khothaletsoa ho beha "/proc/sys/kernel/unprivileged_userns_clone" ho 0 ho tima li-directory tse ntseng li hola sebakeng se arohaneng sa mabitso sa mosebelisi, le "/proc/sys/kernel/unprivileged_bpf_disabled" ho 1 ho thibela ho kenya mananeo a eBPF ka har'a kernel.

Hoa hlokomeleha hore ha ba ntse ba sekaseka tlhaselo e 'ngoe e kenyelletsang ts'ebeliso ea mochini oa FUSE sebakeng sa ho tlama-mounta ho beha bukana e kholo, bafuputsi ba ile ba kopana le ts'oaetso e' ngoe (CVE-2021-33910) e amang mookameli oa sistimi. Ho ile ha fumaneha hore ha u leka ho kenya mohala o nang le boholo ba tsela e fetang 8 MB ka FUSE, ts'ebetso ea ho qala taolo (PID1) e felloa ke mohopolo oa "stack" le likotsi, tse behang sistimi "ho tšoha".

Bothata ke hore systemd e latela le ho fetisa litaba tsa /proc/self/mountinfo,' me e sebetsana le ntlha e 'ngoe le e' ngoe ea mount_name_path_escape () ts'ebetso, e etsang ts'ebetso ea strdupa () e behang data ho stack ho fapana le mohopolong o fanoeng ka matla. . Kaha boholo ba boholo ba stack bo lekantsoe ka RLIMIT_STACK, ho sebetsa ka tsela e kholo haholo ho ea sebakeng sa thaba ho etsa hore ts'ebetso ea PID1 e senyehe ebe e emisa sistimi. Bakeng sa tlhaselo, o ka sebelisa mojule o bonolo oa FUSE hammoho le ho sebelisa bukana e nang le sehlaha se phahameng haholo joalo ka sebaka sa thaba, boholo ba tsela e fetang 8 MB.

Bothata bo 'nile ba hlaha ho tloha ha systemd 220 (April 2015), e se e ntse e hlophisitsoe sebakeng sa polokelo ea tsamaiso' me e tsitsitsoe ka liphallelo (Debian, Ubuntu, Fedora, RHEL, SUSE, Arch). Haholo-holo, tokollong ea systemd 248 ts'ebeliso ha e sebetse ka lebaka la phoso ea khoutu ea systemd e etsang hore ts'ebetso ea /proc/self/mountinfo e hlolehe. Hoa thahasellisa hape hore ka selemo sa 2018, ho ile ha hlaha boemo bo ts'oanang le ha ba leka ho ngola tlatsetso bakeng sa ts'oaetso ea CVE-2018-14634 ho Linux kernel, bafuputsi ba Qualys ba ile ba fumana bofokoli bo bong bo boholo ho systemd.

Source: opennet.ru

Eketsa ka tlhaloso