Rótarveiki í Linux kjarnanum og afneitun á þjónustu í systemd

Öryggisrannsakendur frá Qualys hafa opinberað upplýsingar um tvo veikleika sem hafa áhrif á Linux kjarnann og kerfisstjórann. Varnarleysi í kjarnanum (CVE-2021-33909) gerir staðbundnum notanda kleift að ná fram keyrslu kóða með rótarréttindum með því að nota mjög hreiður möppur.

Hættan á varnarleysinu eykst af þeirri staðreynd að rannsakendur gátu undirbúið vinnubrögð sem virka á Ubuntu 20.04/20.10/21.04, Debian 11 og Fedora 34 í sjálfgefna stillingu. Það er tekið fram að aðrar dreifingar hafa ekki verið prófaðar, en eru fræðilega næmar fyrir vandamálinu og hægt er að ráðast á þær. Lofað er að fullur kóðinn af hetjudáðunum verði birtur eftir að vandamálinu hefur verið útrýmt alls staðar, en í bili er aðeins frumgerð af takmarkaðri virkni tiltæk, sem veldur því að kerfið hrynur. Vandamálið hefur verið til staðar síðan í júlí 2014 og hefur áhrif á kjarnaútgáfur frá og með 3.16. Varnarleysisleiðréttingin var samræmd við samfélagið og samþykkt inn í kjarnann 19. júlí. Helstu dreifingarnar hafa þegar búið til uppfærslur á kjarnapakkana þeirra (Debian, Ubuntu, Fedora, RHEL, SUSE, Arch).

Varnarleysið stafar af því að ekki tókst að athuga niðurstöðu stærð_t í int umbreytingu áður en aðgerðir eru framkvæmdar í seq_file kóðanum, sem býr til skrár úr röð skráa. Ef ekki er athugað getur það leitt til þess að skrif á biðminni eru utan marka þegar verið er að búa til, setja upp og eyða mjög hreiðri möppubyggingu (slóðastærð stærri en 1 GB). Fyrir vikið getur árásarmaður náð í 10 bæta streng "//deleted" sem er skrifaður á móti "-2 GB - 10 bæti" sem bendir á svæðið á undan úthlutaðri biðminni.

Tilbúinn hetjudáð þarf 5 GB af minni og 1 milljón ókeypis inóða til að starfa. Hetjudáðinn virkar með því að kalla mkdir() til að búa til stigveldi upp á um það bil milljón undirmöppur til að ná skráarslóðarstærð yfir 1 GB. Þessi mappa er sett upp með bind-mount í sérstöku notendanafnrými, eftir það er rmdir() aðgerðin keyrð til að fjarlægja hana. Samhliða er búið til þráður sem hleður litlu eBPF forriti, sem er læst á stigi eftir að hafa athugað eBPF gervikóðann, en áður en JIT samantekt hans er.

Í notendanafnsvæðinu sem er óforréttur er skráin /proc/self/mountinfo opnuð og langa slóðanafn bindingarskrárinnar lesið, sem leiðir til þess að strengurinn "//deleted" er skrifaður á svæðið áður en biðminni hefst. Staðsetningin til að skrifa línuna er valin þannig að hún skrifar yfir leiðbeiningarnar í eBPF forritinu sem þegar hefur verið prófað en ekki enn sett saman.

Næst, á eBPF forritastigi, er stjórnlausri ritun utan biðminni umbreytt í stjórnaða hæfileika til að lesa og skrifa í aðrar kjarnabyggingar með því að vinna með btf og map_push_elem uppbyggingu. Þar af leiðandi ákvarðar hagnýtingin staðsetningu modprobe_path[] biðminni í kjarnaminni og skrifar yfir „/sbin/modprobe“ slóðina í honum, sem gerir þér kleift að hefja ræsingu á hvaða keyranlegu skrá sem er með rótarréttindi ef request_module() símtal, sem er keyrt, til dæmis þegar búið er til nettengilinn.

Vísindamenn bjóða upp á nokkrar lausnir sem eru aðeins árangursríkar fyrir tiltekna hagnýtingu, en útrýma ekki vandamálinu sjálfu. Mælt er með því að stilla "/proc/sys/kernel/unprivileged_userns_clone" á 0 til að slökkva á tengingarskrám í sérstöku notendanafnrými og "/proc/sys/kernel/unprivileged_bpf_disabled" á 1 til að slökkva á hleðslu eBPF forrita inn í kjarnann.

Það er athyglisvert að á meðan þeir greina aðra árás sem felur í sér notkun FUSE vélbúnaðar í stað bindingarhaugs til að setja upp stóra möppu, fundu rannsakendur annan varnarleysi (CVE-2021-33910) sem hefur áhrif á kerfisstjórann. Það kom í ljós að þegar reynt er að tengja möppu með slóðarstærð sem er meiri en 8 MB í gegnum FUSE, þá klárast stýrifræsingarferlið (PID1) úr staflaminni og hrynur, sem setur kerfið í „læti“.

Vandamálið er að systemd rekur og greinir innihald /proc/self/mountinfo, og vinnur úr hverjum tengipunkti í unit_name_path_escape() aðgerðinni, sem framkvæmir strdupa() aðgerð sem setur gögnin á staflann frekar en í kvikt úthlutað minni . Þar sem hámarks staflastærð er takmörkuð í gegnum RLIMIT_STACK, veldur vinnsla á of stórri slóð að tengipunkti PID1 ferlið að hrynja og stöðva kerfið. Fyrir árás geturðu notað einfaldasta FUSE-eininguna ásamt því að nota mjög hreiðraða skrá sem tengipunkt, en slóðarstærðin fer yfir 8 MB.

Vandamálið hefur birst síðan systemd 220 (apríl 2015), hefur þegar verið lagað í aðal systemd geymslunni og lagað í dreifingum (Debian, Ubuntu, Fedora, RHEL, SUSE, Arch). Sérstaklega, í systemd útgáfu 248 virkar misnotkunin ekki vegna villu í systemd kóðanum sem veldur því að vinnsla á /proc/self/mountinfo mistakast. Það er líka áhugavert að árið 2018 kom upp svipuð staða og þegar reynt var að skrifa hagnýtingu fyrir CVE-2018-14634 varnarleysið í Linux kjarnanum, komu Qualys vísindamenn að þremur mikilvægum veikleikum í systemd.

Heimild: opennet.ru

Bæta við athugasemd