PolKit-en ahultasun larria Linux banaketa gehienetan root sarbidea ahalbidetzen du

Qualys-ek ahultasun bat (CVE-2021-4034) identifikatu du banaketetan erabiltzen den Polkit (lehen PolicyKit) sistemaren osagaian, pribilegiorik gabeko erabiltzaileek sarbide-eskubide handituak behar dituzten ekintzak egin ditzaten. Zaurgarritasunari esker, pribilegiorik gabeko tokiko erabiltzaile bati bere pribilegioak handitu ditzake errotzeko eta sistemaren kontrol osoa lortzeko. Arazoak PwnKit kode izena zuen eta Linux banaketa gehienetan lehenetsitako konfigurazioan exekutatzen den ustiapen bat sortzeagatik nabarmena da.

Arazoa PolKit-en pkexec utilitatean dago, SUID erroko banderarekin datorrena eta beste erabiltzaile baten pribilegioak dituzten komandoak exekutatzeko diseinatuta dago zehaztutako PolKit arauen arabera. pkexec-i emandako komando-lerroko argumentuak oker kudeatzen direla eta, pribilegiorik gabeko erabiltzaile batek autentifikazioa saihestu eta bere kodea root gisa exekutatu lezake, ezarritako sarbide-arauak kontuan hartu gabe. Eraso bat egiteko, berdin du PolKit-en zehazten diren ezarpenak eta murrizketak, nahikoa da SUID root atributua pkexec erabilgarritasunarekin fitxategi exekutagarrirako ezarrita egotea.

Pkexec-ek ez du egiaztatzen prozesu bat abiaraztean emandako komando-lerroko argumentu-zenbaketa (argc) baliozkotasuna. pkexec-en garatzaileek argv array-ko lehen sarrerak beti daukala prozesuaren izena (pkexec), eta bigarrenak NULL balio bat edo pkexec bidez abiarazitako komandoaren izena. Argumentu kopurua matrizearen benetako edukiarekin alderatuta egiaztatu ez zenez eta beti 1 baino handiagoa zela suposatu zenez, prozesu bati argv array huts bat pasatuz gero, Linux execve funtzioak ahalbidetzen duen bezala, pkexec-ek NULL lehen argumentu gisa tratatuko luke ( prozesuaren izena) eta hurrengoa buffer memoriatik kanpo bezala, matrizearen ondorengo edukiak bezala. |———+———+——+————|———+———+——+————| | argv[0] | argv[1] | ... | argv[argc] | envp[0] | envp[1] | ... | envp[envc] | |—-|—-+—-|—-+——+——|——|—-|—-+—-|—-+——+——|——| VVVVVV "programa" "-aukera" NULL "balioa" "PATH=izena" NULL

Arazoa da argv arrayaren ondoren envp array bat dagoela memorian ingurune-aldagaiak dituena. Horrela, argv array hutsik badago, pkexec-ek pribilegio altuekin exekutatzen den komandoari buruzko datuak ateratzen ditu ingurune-aldagaiak dituen arrayko lehen elementutik (argv[1] envp[0]-ren berdina bihurtu zen), eta horien edukia kontrolatu daiteke. erasotzailearen eskutik.

argv[1]-ren balioa jaso ondoren, pkexec-ek PATH-eko fitxategi-bideak kontuan hartuta, fitxategi exekutagarriaren bide osoa zehazten saiatzen da eta katearen erakuslea idazten du argv[1]-rako bide osoa duena, hau da. lehen ingurune-aldagaiaren balioa gainidaztea dakar, argv[1] envp[0]-ren berdina baita. Lehen ingurune-aldagaiaren izena manipulatuz, erasotzaileak beste ingurune-aldagai bat ordezkatu dezake pkexec-en, adibidez, "LD_PRELOAD" ingurune-aldagaia ordezkatu, suid programetan onartzen ez dena, eta bere liburutegi partekatua kargatzeko antolatu. prozesua.

Lan-explotazioak GCONV_PATH aldagaia ordezkatzean datza, sinboloen transkodetze liburutegirako bidea zehazteko erabiltzen dena, dinamikoki kargatutako g_printerr() funtzioa deitzean, zeinaren kodeak iconv_open( erabiltzen du). GCONV_PATH-n bidea birdefinituz, erasotzaileak bermatu dezake ez dela iconv liburutegi estandarra kargatzen dena, baizik eta bere liburutegia, zeinetatik kudeatzaileak exekutatu egingo diren errore-mezu bat bistaratzen denean pkexec oraindik exekutatzen ari den fasean. root eskubideak eta abiarazteko baimenak egiaztatu aurretik.

Kontuan izan da arazoa memoriaren ustelkeriak eragindakoa izan arren, fidagarri eta errepikakor ustiatu daitekeela erabilitako hardware-arkitektura edozein dela ere. Prestatutako exploit-a arrakastaz probatu da Ubuntu, Debian, Fedora eta CentOS-en, baina beste banaketa batzuetan ere erabil daiteke. Jatorrizko ustiapena oraindik ez dago publikoki eskuragarri, eta horrek esan nahi du hutsala dela eta beste ikertzaile batzuek erraz birsor dezaketela, beraz garrantzitsua da adabaki eguneratzea ahalik eta azkarren instalatzea erabiltzaile anitzeko sistemetan. Polkit BSD sistemetarako eta Solarisetarako ere eskuragarri dago, baina ez da aztertu haietan erabiltzeko. Jakina dena da erasoa ezin dela egin OpenBSD-en, OpenBSD nukleoak ez baitu onartzen argc balio nulurik pasatzen execve() deitzen denean.

Arazoa 2009ko maiatzetik dago, pkexec komandoa gehitu zenetik. PolKit ahultasunaren konponketa adabaki gisa eskuragarri dago gaur egun (ez da adabakirik kaleratu), baina banaketa-garatzaileei arazoaren berri aldez aurretik jakinarazi zietenez, banaketa gehienek eguneratzea argitaratu zuten ahultasunari buruzko informazioa aldi berean. Arazoa RHEL 6/7/8, Debian, Ubuntu, openSUSE, SUSE, Fedora, ALT Linux, ROSA, Gentoo, Void Linux, Arch Linux eta Manjaro-n konpondu da. Ahultasuna blokeatzeko aldi baterako neurri gisa, SUID erroko bandera ken dezakezu /usr/bin/pkexec programatik ("chmod 0755 /usr/bin/pkexec").



Iturria: opennet.ru

Gehitu iruzkin berria