Te whakaraeraetanga pakiaka i roto i te kernel Linux me te whakakore i te ratonga i roto i te systemd

Kua whakaatuhia e nga kairangahau haumarutanga mai i Qualys nga korero mo nga whakaraeraetanga e rua e pa ana ki te kernel Linux me te kaiwhakahaere punaha systemd. Ko te whakaraeraetanga i roto i te kernel (CVE-2021-33909) ka taea e te kaiwhakamahi o te rohe te whakatutuki i te mahi waehere me nga mana pakiaka ma te raweke i nga raarangi tino kohanga.

Ko te kino o te whakaraeraetanga ka kaha ake na te mea i taea e nga kairangahau te whakarite i nga mahi mahi e mahi ana i runga i te Ubuntu 20.04/20.10/21.04, Debian 11 me Fedora 34 i roto i te whirihoranga taunoa. E tohuhia ana ko etahi atu tohatoha kaore ano kia whakamatauria, engari he mea whakaraerae ano ki te raru ka taea te whakaeke. Ko te katoa o nga tohu o nga mahi ka oatihia ka whakaputahia i muri i te whakakorenga o te raru ki nga waahi katoa, engari mo naianei he tauira iti noa te mahi e waatea ana, ka pakaru te punaha. Ko te raruraru mai i te marama o Hurae 2014 ka pa ki nga whakaputanga kernel mai i te 3.16. Ko te whakatika whakaraeraetanga i rurukuhia me te hapori me te whakaae ki te kakano i te 19 o Hurae. Ko nga tohatoha matua kua oti kee nga whakahou ki o raatau kete kakano (Debian, Ubuntu, Fedora, RHEL, SUSE, Arch).

Ko te whakaraeraetanga na te kore e tirotiro i te hua o te rahi_t ki te huringa int i mua i te mahi i roto i te waehere seq_file, e hanga ana i nga konae mai i te raupapa rekoata. Ki te kore e tirohia, tera pea ka puta nga tuhi ki waho o te rohe ki te parepare i te wa e hanga ana, e whakapuru ana, e whakakore ana i te hanganga whaiaronga tino kohanga (te rahi o te ara nui ake i te 1 GB). Ko te mutunga, ka taea e te kaiwhaiwhai te whakatutuki i te aho 10-paita "//kua mukua" kua tuhia ki te taapiri "-2 GB - 10 paita" e tohu ana ki te waahi i mua tonu i te parepare kua tohaina.

Ko te mahi kua whakaritea me 5 GB o te mahara me te 1 miriona inodes kore utu hei whakahaere. Ka mahi te mahi ma te waea mkdir() ki te hanga naakapa mo te neke atu i te kotahi miriona nga raarangi-roto hei whakatutuki i te rahi o te ara konae neke atu i te 1 GB. Ka whakairihia tenei whaiaronga ma te bind-mount i roto i te mokowāingoa kaiwhakamahi motuhake, muri iho ka whakahaerehia te mahi rmdir() ki te tango. I roto i te whakarara, ka hangaia he miro e utaina ana he kaupapa eBPF iti, ka aukatihia i te atamira i muri i te tirotiro i te pseudocode eBPF, engari i mua i tana whakahiato JIT.

I roto i te mokowāingoa ingoa kaiwhakamahi kore, ka whakatuwherahia te konae /proc/self/mountinfo ka panuihia te ingoa ara roa o te raarangi kua herea, ka mutu ka tuhia te aho "// mukua" ki te waahi i mua i te tiimata o te papa. Ko te tuunga mo te tuhi i te raina ka tohua kia tuhirua i nga tohutohu i roto i te kaupapa eBPF kua whakamatauria engari kaore ano kia whakahiato.

I muri mai, i te taumata o te kaupapa eBPF, ka huri te tuhi-waho-buffer kaore i te whakahaeretia ki te kaha whakahaere ki te panui me te tuhi ki etahi atu hanganga kernel ma te raweke i nga hanganga btf me te map_push_elem. Ko te mutunga, ka whakatauhia e te mahi te waahi o te modprobe_path [] buffer i roto i te mahara kernel me te tuhi i te ara "/ sbin / modprobe" ki roto, ka taea e koe te timata i te whakarewatanga o tetahi konae ka taea te whakahaere me nga mana pakiaka mena ka puta he request_module() karanga, ka mahia, hei tauira, i te wa e hanga ana i te turanga netlink.

Ka whakaratohia e nga Kairangahau etahi huarahi mahi e whai hua ana mo tetahi mahi motuhake, engari kaua e whakakore i te raru. E taunaki ana kia tautuhia te "/proc/sys/kernel/unprivileged_userns_clone" ki te 0 ki te whakakore i nga raarangi whakaurunga i roto i te mokowāingoa ID kaiwhakamahi motuhake, me te "/proc/sys/kernel/unprivileged_bpf_disabled" ki te 1 hei whakakore i te uta i nga kaupapa eBPF ki roto i te kernel.

Ko te mea nui i te wa e tarai ana i tetahi whakaeke rereke e pa ana ki te whakamahi i te miihini FUSE hei utu mo te here-puke ki te whakairi i tetahi raarangi nui, ka kitea e nga kairangahau tetahi atu whakaraeraetanga (CVE-2021-33910) e pa ana ki te kaiwhakahaere punaha systemd. I puta mai i te wa e ngana ana ki te whakairi i tetahi raarangi me te rahi o te ara neke atu i te 8 MB ma te FUSE, ka rere te tukanga arawhitinga mana (PID1) i te putunga mahara me nga tukinga, ka waiho te punaha ki te ahua "panic".

Ko te raruraru ko te systemd e whai ana me te poroporoaki i nga ihirangi o /proc/self/mountinfo, me te tukatuka i ia waahi maunga i roto i te mahi wae_name_path_escape(), e mahi ana i te mahi strdupa() ka tuu i nga raraunga ki runga i te puranga, kaua ki te mahara kua tohatohahia. . I te mea he iti te rahi o te puranga nui ma te RLIMIT_STACK, he nui rawa te tukatuka i tetahi ara ki te waahi maunga ka pakaru te tukanga PID1 ka mutu te punaha. Mo te whakaeke, ka taea e koe te whakamahi i te waahanga FUSE ngawari rawa atu me te whakamahi i te raarangi tino kohanga hei tohu maunga, ko te rahi o te ara ka neke atu i te 8 MB.

Kua puta mai te raru mai i te systemd 220 (Aperira 2015), kua oti te whakarite i roto i te punaha punaha matua me te whakatika i nga tohatoha (Debian, Ubuntu, Fedora, RHEL, SUSE, Arch). Ko te mea nui, i roto i te tukunga punaha 248 kare te mahi e mahi na te mea he pepeke i roto i te waehere systemd e kore ai te tukatuka o /proc/self/mountinfo. He mea whakamere hoki i te tau 2018, i puta mai he ahuatanga rite, a, i te wa e ngana ana ki te tuhi i tetahi mahi mo te whakaraeraetanga CVE-2018-14634 i roto i te kernel Linux, ka kitea e nga kairangahau Qualys nga whakaraeraetanga e toru i roto i te systemd.

Source: opennet.ru

Tāpiri i te kōrero