Kritesch Schwachstelle am PolKit erlaabt Root Zougang op de meeschte Linux Verdeelungen

Qualys huet eng Schwachstelle (CVE-2021-4034) an der Polkit (fréier PolicyKit) Systemkomponent identifizéiert, déi a Verdeelungen benotzt gëtt fir onprivilegéiert Benotzer z'erméiglechen Handlungen auszeféieren déi erhiefte Zougangsrechter erfuerderen. D'Schwachheet erlaabt en onprivilegéierte lokale Benotzer hir Privilegien ze eskaléieren fir ze root a voll Kontroll vum System ze kréien. De Problem war Codenumm PwnKit an ass bemierkenswäert fir en Aarbechtsexploit ze produzéieren deen an der Standardkonfiguratioun op de meeschte Linux Verdeelungen leeft.

De Problem ass präsent am PolKit's pkexec Utility, deen mam SUID Root Fändel kënnt an ass entwéckelt fir Kommandoen mat de Privilegien vun engem anere Benotzer no de spezifizéierte PolKit Reegelen auszeféieren. Wéinst der falscher Handhabung vu Kommandozeilargumenter, déi un pkexec passéiert sinn, kéint en onprivilegéierte Benotzer d'Authentifikatioun ëmgoen an hire Code als Root lafen, onofhängeg vun den Accèsregelen, déi gesat goufen. Fir en Attack ass et egal wéi eng Astellungen a Restriktiounen am PolKit spezifizéiert sinn, et ass genuch datt d'SUID Root Attribut fir d'ausführbar Datei mat dem pkexec Utility gesat gëtt.

Pkexec iwwerpréift net d'Gëltegkeet vun der Kommandozeil Argumentzuel (argc) iwwerholl wann e Prozess starten. D'Entwéckler vu pkexec hunn ugeholl datt déi éischt Entrée an der argv-Array ëmmer den Numm vum Prozess (pkexec) enthält, an déi zweet entweder en NULL Wäert oder den Numm vum Kommando deen iwwer pkexec gestart gëtt. Zënter datt d'Argumentzuel net géint den aktuellen Inhalt vun der Array gepréift gouf an ugeholl gouf ëmmer méi wéi 1 ze sinn, wann e Prozess eng eidel argv Array passéiert gouf, wéi d'Linux Execve Funktioun et erlaabt, géif pkexec NULL als éischt Argument behandelen ( de Prozessnumm) an deen nächste wéi ausserhalb vum Puffer Memory, wéi déi spéider Inhalter vun der Array. |———+———+——+—————|———+———+——+————| | argv[0] | argv[1] | ... | argv[argc] | envp[0] | envp[1] | ... | envp[envc] | |—-|—-+—-|—-+——+——|——|—-|—-+—-|—-+——+——|——| VVVVVV "Programm" "-Optioun" NULL "Wäert" "PATH=Numm" NULL

De Problem ass datt nom argv Array et en Envp Array an der Erënnerung ass mat Ëmfeldvariablen. Also, wann d'argv-Array eidel ass, extrahéiert pkexec Daten iwwer de Kommando mat erhéngte Privilegien aus dem éischten Element vun der Array mat Ëmfeldvariablen (argv[1] gouf identesch mat envp[0]), den Inhalt vun deem kann kontrolléiert ginn vum Ugräifer.

Nodeems de Wäert vun argv[1] kritt huet, probéiert de pkexec, andeems d'Dateiweeër am PATH berücksichtegt ginn, de komplette Wee op d'ausführbar Datei ze bestëmmen a schreift e Pointer op d'String mam ganze Wee zréck op argv[1], wat féiert zum Iwwerschreiwe vum Wäert vun der éischter Ëmfeldvariabel, well argv[1] ass identesch mat envp[0]. Andeems Dir den Numm vun der éischter Ëmfeldvariabel manipuléiert, kann en Ugräifer eng aner Ëmfeldvariabel an pkexec ersetzen, zum Beispill d'"LD_PRELOAD" Ëmfeldvariabel ersetzen, déi net an suid Programmer erlaabt ass, an arrangéieren fir hir gemeinsame Bibliothéik an de Prozess.

Den Aarbechtsexploit beinhalt d'Ersatz vun der GCONV_PATH Variabel, déi benotzt gëtt fir de Wee op d'Symboltranskodéierungsbibliothéik ze bestëmmen, dynamesch gelueden wann Dir d'g_printerr () Funktioun rufft, de Code vun deem iconv_open () benotzt. Andeems Dir de Wee am GCONV_PATH nei definéiert, kann en Ugräifer suergen datt et net d'Standard iconv Bibliothéik ass déi gelueden ass, awer seng eege Bibliothéik, d'Handler aus deenen ausgefouert ginn wann e Fehlermeldung op der Bühn ugewise gëtt wou pkexec nach ëmmer leeft mat root Rechter a virum Start Permissiounen iwwerpréift.

Et gëtt bemierkt datt trotz der Tatsaach datt de Problem duerch Erënnerungskorruptioun verursaacht gëtt, kann et zouverlässeg a widderholl exploitéiert ginn onofhängeg vun der Hardwarearchitektur déi benotzt gëtt. De preparéierten Exploit gouf erfollegräich op Ubuntu, Debian, Fedora an CentOS getest, awer kann och op aner Verdeelunge benotzt ginn. Den ursprénglechen Exploit ass nach net ëffentlech verfügbar, wat beweist datt et trivial ass a ka ganz einfach vun anere Fuerscher erstallt ginn, sou datt et wichteg ass de Patch Update sou séier wéi méiglech op Multi-User Systemer z'installéieren. Polkit ass och verfügbar fir BSD Systemer a Solaris, awer ass net studéiert fir se ze benotzen. Wat bekannt ass, ass datt d'Attack net op OpenBSD duerchgefouert ka ginn, well den OpenBSD Kernel net erlaabt datt en null argc Wäert passéiert wann execve () genannt gëtt.

De Problem ass zënter Mee 2009 präsent, zënter dem Zousatz vum pkexec Kommando. De Fix fir d'PolKit Schwachstelle ass de Moment als Patch verfügbar (keng Patch Verëffentlechung gouf verëffentlecht), awer well d'Verdeelungsentwéckler am Viraus vum Problem informéiert goufen, hunn déi meescht Distributiounen d'Aktualiséierung gläichzäiteg mat der Verëffentlechung vun Informatioun iwwer d'Schwachheet verëffentlecht. D'Thema ass fixéiert an RHEL 6/7/8, Debian, Ubuntu, openSUSE, SUSE, Fedora, ALT Linux, ROSA, Gentoo, Void Linux, Arch Linux a Manjaro. Als temporär Moossnam fir d'Schwachheet ze blockéieren, kënnt Dir den SUID Root Fändel aus dem /usr/bin/pkexec Programm ("chmod 0755 /usr/bin/pkexec") ewechhuelen.



Source: opennet.ru

Setzt e Commentaire