Vulnerabiliteti i rrënjës në thelbin Linux dhe shërbimi i ndaluar në systemd

Kërkuesit e sigurisë nga kompania Qualys zbuluan detaje mbi dy vulnerabilitete që prekin thelbin Linux dhe menaxherin e sistemit systemd. Vulnerabiliteti në thelb (CVE-2021-33909) i lejon një përdoruesi lokal të arrijë ekzekutimin e kodit me të drejtat e rrënjës përmes manipulimit të katalogëve me nivele të thelluara.

Rreziku i vulnerabilitetit pĂ«rkeqĂ«sohet nga fakti se kĂ«rkuesit arritĂ«n tĂ« pĂ«rgatisin eksploitĂ« funksionale qĂ« punojnĂ« nĂ« Ubuntu 20.04/20.10/21.04, Debian 11 dhe Fedora 34 nĂ« konfigurimin e paracaktuar. ËshtĂ« e rĂ«ndĂ«sishme tĂ« theksohet se distribuimet e tjera nuk janĂ« verifikuar, por teorikisht gjithashtu janĂ« tĂ« ndjeshme ndaj kĂ«saj çështjeje dhe mund tĂ« sulmohen. Kodi i plotĂ« i eksploiteve pritet tĂ« publikohet pas zgjidhjes sĂ« problemit nĂ« tĂ« gjithĂ« botĂ«n, pĂ«r momentin Ă«shtĂ« nĂ« dispozicion vetĂ«m njĂ« prototip i kufizuar nĂ« funksionalitet qĂ« shkakton rĂ«nien e sistemit. Problemi ka shfaqur ndodhi qĂ« nga korriku 2014 dhe preku lĂ«shimet e thelbave duke filluar nga 3.16. Rregullimi i vulnerabilitetit Ă«shtĂ« koordinuar me komunitetin dhe pranuar nĂ« thelb mĂ« 19 korrik. Distribuimet kryesore tashmĂ« kanĂ« formuar pĂ«rditĂ«sime tĂ« pakove me thelb (Debian, Ubuntu, Fedora, RHEL, SUSE, Arch).

Vulnerabiliteti shkaktohet nga mungesa e verifikimit tĂ« rezultatit tĂ« konvertimit nga type_t nĂ« int para se tĂ« ekzekutohen operacionet nĂ« kodin seq_file, i cili krijon skedarĂ« nga njĂ« sĂ«rĂ« shĂ«nimesh. Mungesa e verifikimit mund tĂ« sjellĂ« shkrime jashtĂ« kufijve tĂ« buferit gjatĂ« krijimit, montimit dhe fshirjes sĂ« strukturĂ«s sĂ« katalogĂ«ve me njĂ« nivel shumĂ« tĂ« lartĂ« tĂ« thellĂ«sisĂ« (madhĂ«sia e rrugĂ«s mĂ« shumĂ« se 1 GB). Si rezultat, njĂ« sulmues mund tĂ« arrijĂ« tĂ« shkruajĂ« njĂ« varg 10-byte "//deleted" me njĂ« offset "- 2 GB — 10 byte", qĂ« tregon pĂ«r njĂ« zonĂ« qĂ« e paraprin direkt buferin e alokuar.

Eksploit i përgatitur kërkon 5 GB memorie dhe 1 milion inode të lirë për të funksionuar. Puna e eksploitit përfshin krijimin përmes thirrjes mkdir() të një hierarkie prej rreth një milion katalogësh të brendshëm për të arritur një madhësi të rrugës së skedave që tejkalon 1 GB. Ky katalog montoheshe përmes bind-mount në një hapësirë të veçantë identifikimesh të përdoruesit (user namespace), pas së cilës aktivizohet funksioni rmdir() për ta fshirë atë. Paralelisht krijohet një rrjedhë, e cila ngarkon një program të vogël eBPF, e cila bllokohet në fazën pas verifikimit të pseudokodit eBPF, por para JIT-kompilimit të tij.

Në një hapësirë identifikimesh përdoruesish të paprivilegjuar, hapet skedari /proc/self/mountinfo dhe fillon leximin e rrugës së gjatë të katalogut të montuar me bind-mount, duke shkaktuar shkrimin e vargut «//deleted» në zonën përpara fillimit të tamponit. Pozita për shkrimin e vargut zgjidhet në një mënyrë që tejkalon instruksionin në programin e kontrolluar, por ende të pa-kompiluara eBPF.

Më pas, në nivelin e programit eBPF, shkruajtja e pakontrolluar jashtë buffers transformohet në një mundësi të kontrolluar për lexim dhe shkruarje në struktura të tjera të bërthames nëpërmjet manipulimit me struktura btf dhe map_push_elem. Si rezultat, eksploiti përcakton pozitat e buffers modprobe_path[] në memorien e bërthamës dhe e riprogramon atë me rrugën "/sbin/modprobe", e cila lejon iniciimin e ekzekutimit të çdo skedari ekzekutiv me të drejtat root në rast se bëhet thirrje për request_module(), që ndodh, për shembull, kur krijohet një socket netlink.

Kërkuesit paraqesin disa metoda për rrethimin e mbrojtjes, të cilat janë efektive vetëm për eksploite të caktuara, por nuk përjashtojnë problemin në vetvete. Rekomandohet që të vendoset parametri "/proc/sys/kernel/unprivileged_userns_clone" në vlerën 0 për të ndaluar montimin e katalogëve në një hapësirë identiteti të veçantë, si dhe "/proc/sys/kernel/unprivileged_bpf_disabled" në 1 për të ndaluar ngarkimin e programeve eBPF në bërthamë.

ËshtĂ« interesante se, gjatĂ« shqyrtimit tĂ« njĂ« variante alternative tĂ« sulmit qĂ« lidhet me pĂ«rdorimin e mekanizmit FUSE nĂ« vend tĂ« bind-mount pĂ«r tĂ« montuar njĂ« katalog tĂ« madh, studiuesit hasĂ«n njĂ« tjetĂ«r dobĂ«si (CVE-2021-33910) qĂ« prek menaxherin sistemik systemd. RĂ«ndĂ«sish Ă«shtĂ« se, teksa pĂ«rpiqen tĂ« montojnĂ« njĂ« katalog me njĂ« madhĂ«si rruge qĂ« tejkalon 8 MB, procesi i menaxhimit tĂ« inicializimit (PID1) pĂ«rjeton shterrjen e memories sĂ« stack-ut dhe kolapsin, qĂ« çon sistemin nĂ« njĂ« gjendje "panic".

Problemi lidhet me faktin se systemd ndjek dhe shqyrton përmbajtjen e \/proc\self\mountinfo, dhe përpunon çdo pikë montimi në funksionin unit_name_path_escape(), në të cilin kryhet operacioni strdupa(), që vendos të dhënat në stack dhe jo në memorie të alokuar dinamikisht. Duke qenë se madhësia maksimale e stack-ut është e kufizuar përmes RLIMIT_STACK, përpunimi i një rruge shumë të madhe për pikën e montimit çon në kolapsin e procesit PID1 dhe ndalimin e funksionimit të sistemit. Për sulmin mund të përdoret moduli më i thjeshtë FUSE në kombinim me përdorimin e një katalogu me një nivel të lartë të thellësisë si pikë montimi, ku madhësia e rrugës tejkalon 8 MB.

Problemi shfaqet qĂ« nga versioni systemd 220 (prill 2015), tashmĂ« i zgjidhur nĂ« depozitĂ«n kryesore tĂ« systemd dhe i rregulluar nĂ« distribuimet (Debian, Ubuntu, Fedora, RHEL, SUSE, Arch). ËshtĂ« e rĂ«ndĂ«sishme tĂ« theksohet se nĂ« versionin systemd 248 eksploit nuk funksionon pĂ«r shkak tĂ« njĂ« gabimi nĂ« kodin e systemd, i cili shkakton njĂ« dĂ«shtim gjatĂ« pĂ«rpunimit tĂ« /proc/self/mountinfo. Gjithashtu, Ă«shtĂ« interesante se nĂ« vitin 2018 ndodhi njĂ« situatĂ« e ngjashme dhe gjatĂ« pĂ«rpjekjes pĂ«r tĂ« shkruar njĂ« eksploit pĂ«r dobĂ«sinĂ« CVE-2018-14634 nĂ« bĂ«rthamĂ«n Linux, studiuesit e Qualys u pĂ«rballĂ«n me tri dobĂ«si kritike nĂ« systemd.

Burimi: opennet.ru

Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster