Kerentanan kritis dina PolKit ngamungkinkeun aksés root dina kalolobaan distribusi Linux

Qualys parantos ngaidentipikasi kerentanan (CVE-2021-4034) dina komponén sistem Polkit (baheulana PolicyKit) anu dianggo dina distribusi pikeun ngamungkinkeun para pangguna anu henteu ngagaduhan hak pikeun ngalakukeun tindakan anu peryogi hak aksés anu luhur. Kerentanan ngamungkinkeun hiji pamaké lokal unprivileged mun escalate hak husus maranéhna pikeun root na mangtaun kadali pinuh sistem. Masalahna disandi PwnKit sareng kasohor pikeun ngahasilkeun garapan anu dijalankeun dina konfigurasi standar dina kalolobaan distribusi Linux.

Masalahna aya dina utilitas pkexec PolKit, anu hadir sareng bandéra akar SUID sareng dirarancang pikeun ngajalankeun paréntah kalayan hak istimewa pangguna anu sanés dumasar kana aturan PolKit anu ditangtukeun. Alatan pananganan anu salah pikeun argumen baris paréntah anu dikirimkeun ka pkexec, pangguna anu teu boga hak istimewa tiasa ngalangkungan auténtikasi sareng ngajalankeun kodena salaku akar, henteu paduli aturan aksés anu diatur. Pikeun serangan, henteu masalah naon setelan sareng larangan anu dieusian dina PolKit, cukup yén atribut akar SUID disetel pikeun file anu tiasa dieksekusi sareng utilitas pkexec.

Pkexec henteu mariksa validitas jumlah argumen baris paréntah (argc) anu diliwatan nalika ngamimitian prosés. Pamekar pkexec nganggap yén éntri munggaran dina Array argv salawasna ngandung nami prosésna (pkexec), sareng anu kadua nyaéta nilai NULL atanapi nami paréntah anu diluncurkeun via pkexec. Kusabab jumlah argumen teu dipariksa ngalawan eusi sabenerna Asép Sunandar Sunarya sarta dianggap salawasna leuwih gede ti 1, lamun prosés ieu diliwatan hiji arrays argv kosong, sakumaha fungsi execve Linux Ubuntu ngamungkinkeun, pkexec bakal ngubaran NULL salaku argumen munggaran ( nami prosés) sareng anu salajengna sapertos di luar mémori panyangga, sapertos eusi saterasna tina Asép Sunandar Sunarya. |———+———+——+————|———+———+——+————| | argv[0] | argv[1] | ... | argv[argc] | envp[0] | envp[1] | ... | envp[envc] | |—-|—-+—-|—-+——+——|——|—-|—-+—-|—-+——+——|——| VVVVVV "program" "-option" NULL "nilai" "PATH = ngaran" NULL

Masalahna nyaeta sanggeus argv Asép Sunandar Sunarya aya envp Asép Sunandar Sunarya dina mémori ngandung variabel lingkungan. Ku kituna, lamun arrays argv kosong, pkexec extracts data ngeunaan paréntah ngajalankeun kalawan statusna elevated ti elemen mimiti arrays kalawan variabel lingkungan (argv[1] jadi idéntik jeung envp[0]), eusi nu bisa dikawasa. ku panyerang.

Sanggeus narima nilai argv[1], pkexec nyoba, nyokot kana akun jalur file dina PATH, pikeun nangtukeun jalur pinuh ka file laksana jeung nulis pointer ka string jeung jalur pinuh deui argv[1], nu ngabalukarkeun nimpa nilai variabel lingkungan munggaran, saprak argv [1] idéntik jeung envp [0]. Ku ngamanipulasi nami variabel lingkungan anu munggaran, panyerang tiasa ngagentos variabel lingkungan anu sanés dina pkexec, contona, ngagentos variabel lingkungan "LD_PRELOAD", anu henteu diidinan dina program suid, sareng ngatur perpustakaan anu dibagi kana dimuat kana prosés.

Garapan gawé ngalibatkeun ngaganti variabel GCONV_PATH, nu dipaké pikeun nangtukeun jalur ka perpustakaan transcoding simbol, dinamis dimuat nalika nelepon fungsi g_printerr (), kodeu nu ngagunakeun iconv_open (). Ku ngahartikeun deui jalur dina GCONV_PATH, panyerang tiasa mastikeun yén éta sanés perpustakaan iconv standar anu dimuat, tapi perpustakaan sorangan, panangan anu bakal dieksekusi nalika pesen kasalahan ditampilkeun dina panggung nalika pkexec masih jalan sareng hak akar sareng sateuacan idin peluncuran dipariksa.

Ieu dicatet yén sanajan kanyataan yén masalah disababkeun ku korupsi memori, éta bisa reliably na repeatably dieksploitasi paduli arsitektur hardware dipaké. Eksploitasi anu disiapkeun parantos suksés diuji dina Ubuntu, Debian, Fedora sareng CentOS, tapi ogé tiasa dianggo dina distribusi anu sanés. Eksploitasi aslina teu acan sadia pikeun umum, nunjukkeun yén éta téh trivial sarta bisa gampang recreated ku peneliti séjén, jadi hal anu penting pikeun masang apdet patch pas mungkin dina sistem multi-pamaké. Polkit oge sadia pikeun sistem BSD na Solaris, tapi teu acan ditalungtik keur dipake dina eta. Anu dipikanyaho nyaéta yén serangan éta henteu tiasa dilaksanakeun dina OpenBSD, sabab kernel OpenBSD henteu ngijinkeun nilai argc null anu disalurkeun nalika execve () disebut.

Masalahna parantos aya ti saprak Méi 2009, saprak tambihan paréntah pkexec. Perbaikan pikeun kerentanan PolKit ayeuna sayogi salaku patch (henteu aya pelepasan patch anu dileupaskeun), tapi saprak pamekar distribusi dibéjakeun ngeunaan masalah sateuacanna, kalolobaan distribusi nyebarkeun pembaruan sakaligus sareng panyingkepan inpormasi ngeunaan kerentanan éta. Masalahna dibereskeun dina RHEL 6/7/8, Debian, Ubuntu, openSUSE, SUSE, Fedora, ALT Linux, ROSA, Gentoo, Void Linux, Arch Linux sareng Manjaro. Salaku ukuran samentawis pikeun meungpeuk kerentanan, anjeun tiasa nyabut bandéra akar SUID tina program /usr/bin/pkexec ("chmod 0755 /usr/bin/pkexec").



sumber: opennet.ru

Tambahkeun komentar