Kerentanan kritis ing PolKit ngidini akses root ing umume distribusi Linux

Qualys wis nemtokake kerentanan (CVE-2021-4034) ing komponen sistem Polkit (biyen PolicyKit) sing digunakake ing distribusi kanggo ngidini pangguna sing ora duwe hak kanggo nindakake tumindak sing mbutuhake hak akses sing luwih dhuwur. Kerentanan kasebut ngidini pangguna lokal sing ora duwe hak kanggo nggedhekake hak istimewa kanggo ROOT lan entuk kontrol lengkap sistem kasebut. Masalah kasebut kanthi jeneng kode PwnKit lan misuwur amarga ngasilake eksploitasi kerja sing mlaku ing konfigurasi standar ing umume distribusi Linux.

Masalah kasebut ana ing utilitas pkexec PolKit, sing dilengkapi karo gendéra ROOT SUID lan dirancang kanggo mbukak perintah kanthi hak istimewa pangguna liya miturut aturan PolKit sing ditemtokake. Amarga salah nangani argumen baris perintah sing dikirim menyang pkexec, pangguna sing ora duwe hak bisa ngliwati otentikasi lan nyebabake kode kasebut dadi ROOT, preduli saka aturan akses sing disetel. Kanggo serangan, ora preduli apa setelan lan watesan sing ditemtokake ing PolKit, cukup yen atribut ROOT SUID disetel kanggo file eksekusi kanthi sarana pkexec.

Pkexec ora mriksa validitas count argumen baris perintah (argc) sing dilewati nalika miwiti proses. Pangembang pkexec nganggep yen entri pisanan ing array argv tansah ngemot jeneng proses (pkexec), lan nomer loro minangka nilai NULL utawa jeneng perintah sing diluncurake liwat pkexec. Wiwit count argumen ora dicenthang marang isi nyata array lan dianggep tansah luwih saka 1, yen proses dilewati array argv kosong, minangka fungsi execve Linux ngidini, pkexec bakal nganggep NULL minangka argumen pisanan ( jeneng proses) lan sabanjuré minangka njaba memori buffer, kaya isi sakteruse saka Uploaded. |———+———+——+—————|———+———+——+—————| | argv[0] | argv[1] | ... | argv[argc] | envp[0] | envp[1] | ... | envp[envc] | |—-|—-+—-|—-+——+——|——|—-|—-+—-|—-+——+——|——| VVVVVV "program" "-option" NULL "value" "PATH=name" NULL

Masalahe yaiku sawise array argv ana array envp ing memori sing ngemot variabel lingkungan. Mangkono, yen array argv kosong, pkexec ngekstrak data babagan command run kanthi hak istimewa sing luwih dhuwur saka unsur pisanan array kanthi variabel lingkungan (argv[1] dadi identik karo envp[0]), isine bisa dikontrol. dening penyerang.

Sawise nampa nilai argv [1], pkexec nyoba, njupuk path file ing PATH, kanggo nemtokake path lengkap menyang file eksekusi lan nulis pointer menyang string kanthi path lengkap bali menyang argv [1], sing ndadékaké kanggo nimpa nilai variabel lingkungan pisanan, amarga argv [1] identik karo envp [0]. Kanthi manipulasi jeneng variabel lingkungan pisanan, panyerang bisa ngganti variabel lingkungan liyane ing pkexec, contone, ngganti variabel lingkungan "LD_PRELOAD", sing ora diidini ing program suid, lan ngatur perpustakaan sing dienggo bareng bakal dimuat menyang proses.

Eksploitasi kerja kalebu ngganti variabel GCONV_PATH, sing digunakake kanggo nemtokake path menyang perpustakaan transcoding simbol, dimuat kanthi dinamis nalika nelpon fungsi g_printerr (), kode sing nggunakake iconv_open (). Dening redefining path ing GCONV_PATH, panyerang bisa mesthekake yen iku ora perpustakaan iconv standar sing dimuat, nanging perpustakaan dhewe, handler saka kang bakal kaleksanan nalika pesen kesalahan ditampilake ing tataran nalika pkexec isih mlaku karo hak ROOT lan sadurunge ijin Bukak dicenthang.

Punika nyatet sing senadyan kasunyatan sing masalah disebabake korupsi memori, iku bisa andal lan repeatably eksploitasi preduli saka arsitektur hardware digunakake. Eksploitasi sing disiapake wis sukses diuji ing Ubuntu, Debian, Fedora lan CentOS, nanging uga bisa digunakake ing distribusi liyane. Eksploitasi asli durung kasedhiya kanggo umum, nuduhake yen ora pati penting lan bisa gampang digawe maneh dening peneliti liyane, mula penting kanggo nginstal nganyari patch sanalika bisa ing sistem multi-user. Polkit uga kasedhiya kanggo sistem BSD lan Solaris, nanging durung sinau kanggo nggunakake ing. Sing dingerteni yaiku serangan kasebut ora bisa ditindakake ing OpenBSD, amarga kernel OpenBSD ora ngidini nilai argc null dilewati nalika execve () diarani.

Masalah wis ana wiwit Mei 2009, wiwit ditambahake perintah pkexec. Ndandani kerentanan PolKit saiki kasedhiya minangka tembelan (ora ana release tembelan sing wis dirilis), nanging wiwit pangembang distribusi diwenehi kabar babagan masalah kasebut, umume distribusi nerbitake nganyari kasebut bebarengan karo pambocoran informasi babagan kerentanan kasebut. Masalah kasebut diatasi ing RHEL 6/7/8, Debian, Ubuntu, openSUSE, SUSE, Fedora, ALT Linux, ROSA, Gentoo, Void Linux, Arch Linux lan Manjaro. Minangka langkah sementara kanggo mblokir kerentanan, sampeyan bisa mbusak gendéra ROOT SUID saka program /usr/bin/pkexec ("chmod 0755 /usr/bin/pkexec").



Source: opennet.ru

Add a comment