Vulnerabilità critica in PolKit chì permette l'accessu root in a maiò parte di e distribuzioni Linux

Qualys hà identificatu una vulnerabilità (CVE-2021-4034) in u cumpunente di u sistema Polkit (antica PolicyKit) utilizatu in distribuzioni per permette à l'utilizatori senza privilegi di realizà azioni chì necessitanu diritti d'accessu elevati. A vulnerabilità permette à un utilizatore lucale senza privilegiu di scalate i so privileggi à root è acquistà u cuntrollu tutale di u sistema. U prublema hè statu codificatu PwnKit è hè notu per pruduce un sfruttamentu di travagliu chì corre in a cunfigurazione predeterminata in a maiò parte di e distribuzioni Linux.

U prublema hè presente in l'utilità pkexec di PolKit, chì vene cù a bandiera di root SUID è hè designatu per eseguisce cumandamenti cù i privilegi di un altru utilizatore secondu e regule PolKit specificate. A causa di una manipulazione incorrecta di l'argumenti di a linea di cummanda passati à pkexec, un utilizatore senza privilegiu puderia scaccià l'autentificazione è eseguisce u so codice cum'è root, indipendentemente da e regule d'accessu stabilite. Per un attaccu, ùn importa micca i paràmetri è e restrizioni sò specificati in PolKit, hè abbastanza chì l'attributu root SUID hè stabilitu per u schedariu eseguibile cù l'utilità pkexec.

Pkexec ùn verifica micca a validità di l'argumentu di a linea di cummanda (argc) passatu quandu principia un prucessu. I sviluppatori di pkexec supponenu chì a prima entrata in l'array argv cuntene sempre u nome di u prucessu (pkexec), è a seconda sia un valore NULL o u nome di u cumandamentu lanciatu via pkexec. Siccomu u numeru di l'argumenti ùn hè micca verificatu cù u cuntenutu attuale di l'array è era presumitu chì era sempre più grande di 1, se un prucessu hè passatu un array argv vacu, cum'è a funzione execve Linux permette, pkexec trattava NULL cum'è u primu argumentu ( u nome di u prucessu) è u prossimu cum'è fora di a memoria di buffer, cum'è u cuntenutu sussegwente di l'array. |———+———+——+————|———+———+——+————| | argv[0] | argv[1] | ... | argv[argc] | envp[0] | envp[1] | ... | envp[envc] | |—-|—-+—-|—-+——+——|——|—-|—-+—-|—-+——+——|——| VVVVVV "programma" "-opzione" NULL "valore" "PATH=name" NULL

U prublema hè chì dopu à l'array argv ci hè un array envp in memoria chì cuntene variabili ambientali. Cusì, se l'argv array hè viotu, pkexec extracts data about the command run with elevated privileges from the first element of the array with environment variables (argv[1] diventò identicu à envp[0]), u cuntenutu di quale pò esse cuntrullatu. da l'attaccante.

Dopu avè ricivutu u valore di argv[1], pkexec prova, tenendu in contu i percorsi di u schedariu in PATH, per determinà u percorsu sanu à u schedariu eseguibile è scrive un puntatore à a stringa cù u percorsu sanu torna à argv [1], chì porta à sovrascrive u valore di a prima variabile d'ambiente, postu chì argv[1] hè identicu à envp[0]. Manipulendu u nome di a prima variabile di l'ambiente, un attaccu pò rimpiazzà una altra variabile d'ambiente in pkexec, per esempiu, rimpiazzà a variabile d'ambiente "LD_PRELOAD", chì ùn hè micca permessa in i prugrammi suid, è organizà a so libreria cumuna per esse caricata in u prucessu.

U sfruttamentu di travagliu implica a sostituzione di a variabile GCONV_PATH, chì hè aduprata per determinà u percorsu à a libreria di transcodificazione di simboli, caricata dinamicamente quandu si chjama a funzione g_printerr (), u codice di quale usa iconv_open (). Ridefinisce u percorsu in GCONV_PATH, un attaccu pò assicurà chì ùn hè micca a libreria standard iconv chì hè caricata, ma a so propria libreria, i gestori da quale saranu eseguiti quandu un missaghju d'errore hè visualizatu in u stadiu quandu pkexec hè sempre in esecuzione cù i diritti di root è prima di lancià i permessi sò verificati.

Hè nutatu chì malgradu u fattu chì u prublema hè causatu da a corruzzione di a memoria, pò esse sfruttatu in modu affidabile è ripetutu, indipendentemente da l'architettura hardware utilizata. U sfruttamentu preparatu hè statu pruvatu cù successu in Ubuntu, Debian, Fedora è CentOS, ma pò ancu esse usatu in altre distribuzioni. U sfruttamentu uriginale ùn hè ancu dispunibule publicamente, chì indica chì hè triviale è pò esse facilmente ricreatu da altri circadori, per quessa, hè impurtante installà l'aghjurnamentu di patch u più prestu pussibule in sistemi multi-utilizatori. Polkit hè ancu dispunibule per i sistemi BSD è Solaris, ma ùn hè statu studiatu per l'usu nantu à elli. Ciò chì hè cunnisciutu hè chì l'attaccu ùn pò esse realizatu nantu à OpenBSD, postu chì u kernel OpenBSD ùn permette micca un valore argc nulu per esse passatu quandu execve () hè chjamatu.

U prublema hè stata prisente da maghju 2009, dapoi l'aghjuntu di u cumandamentu pkexec. A correzione per a vulnerabilità PolKit hè attualmente dispunibule cum'è un patch (senza liberazione di patch hè stata liberata), ma postu chì i sviluppatori di distribuzione sò stati avvisati di u prublema in anticipu, a maiò parte di e distribuzioni anu publicatu l'aghjurnamentu simultaneamente cù a divulgazione di l'infurmazioni nantu à a vulnerabilità. U prublema hè risoltu in RHEL 6/7/8, Debian, Ubuntu, openSUSE, SUSE, Fedora, ALT Linux, ROSA, Gentoo, Void Linux, Arch Linux è Manjaro. Cum'è una misura temporanea per bluccà a vulnerabilità, pudete eliminà a bandiera di root SUID da u prugramma /usr/bin/pkexec ("chmod 0755 /usr/bin/pkexec").



Source: opennet.ru

Add a comment