Kerentanan PolKit membolehkan akses root diperoleh pada kebanyakan pengedaran Linux

Baru-baru ini Qualy's mengeluarkan berita bahawa telah mengenal pasti kelemahan (CVE-2021-4034) en komponen sistem polkit (dahulunya PolicyKit), yang digunakan dalam pengedaran untuk membenarkan pengguna yang tidak mempunyai keistimewaan melakukan tindakan yang memerlukan hak akses yang tinggi.

Kerentanan membenarkan pengguna tempatan yang tidak mempunyai hak untuk meningkatkan keistimewaan mereka kepada pengguna root dan mendapat kawalan penuh ke atas sistem. Isu ini diberi nama kod PwnKit dan terkenal kerana menghasilkan eksploitasi kerja yang berjalan dalam tetapan lalai pada kebanyakan pengedaran Linux.

Disebutkan bahawa masalah wujud dalam utiliti pkexec yang disertakan dengan PolKit, yang disertakan dengan bendera akar SUID dan direka bentuk untuk menjalankan arahan dengan keistimewaan pengguna lain mengikut peraturan PolKit.

Kerana pengendalian hujah yang salah daripada baris arahan yang dihantar ke pkexec, a pengguna bukan istimewa boleh memintas pengesahan dan kod anda dijalankan sebagai root, tanpa mengira peraturan akses yang ditetapkan. Untuk serangan, tidak kira apa tetapan dan sekatan yang ditetapkan dalam PolKit, cukup atribut akar SUID untuk fail boleh laku ditetapkan dengan utiliti pkexec.

Pkexec tidak menyemak ketepatan daripada kiraan argumen baris arahan (argc) yang diluluskan semasa memulakan proses. Pembangun pkexec menganggap bahawa entri pertama dalam tatasusunan argv sentiasa mengandungi nama proses (pkexec), dan entri kedua sama ada NULL atau nama arahan yang dilaksanakan melalui pkexec.

Memandangkan kiraan argumen tidak dibandingkan dengan kandungan sebenar tatasusunan dan diandaikan sentiasa lebih besar daripada 1, jika tatasusunan argv kosong dihantar ke proses, yang dibenarkan oleh fungsi execve Linux, pkexec menganggap NULL sebagai argumen pertama ( proses nama), dan seterusnya selepas daripada memori penimbal, sebagai kandungan tatasusunan seterusnya.

Masalahnya ialah selepas tatasusunan argv dalam ingatan ialah tatasusunan envp yang mengandungi pembolehubah persekitaran. Oleh itu, dengan tatasusunan argv kosong, pkexec mengekstrak data tentang arahan yang dilaksanakan dengan keistimewaan yang tinggi daripada elemen pertama tatasusunan dengan pembolehubah persekitaran (argv[1] menjadi sama dengan envp[0]), yang kandungannya boleh dikawal oleh penyerang.

Setelah menerima nilai argv[1], pkexec cuba menentukan laluan penuh ke fail boleh laku menggunakan laluan fail dalam PATH dan menulis penuding pada rentetan dengan laluan penuh kembali ke argv[1], yang membawa kepada menulis ganti nilai pembolehubah persekitaran pertama juga, kerana argv[1] adalah sama dengan envp[0]. Dengan memanipulasi nama pembolehubah persekitaran pertama, penyerang boleh menggantikan pembolehubah persekitaran lain dalam pkexec, contohnya, menggantikan pembolehubah persekitaran "LD_PRELOAD", yang tidak dibenarkan dalam program suid dan meminta proses memuatkan perpustakaan kongsinya dalam proses .

Eksploitasi kerja menggunakan penggantian pembolehubah GCONV_PATH, yang digunakan untuk menentukan laluan ke perpustakaan transcoding simbol yang dimuatkan secara dinamik apabila fungsi g_printerr() dipanggil, yang menggunakan iconv_open() dalam kodnya.

Dengan mentakrifkan semula laluan dalam GCONV_PATH, penyerang boleh menguruskan untuk memuatkan bukan pustaka iconv biasa, tetapi pustakanya sendiri, pemacunya akan dilaksanakan semasa mesej ralat pada peringkat di mana pkexec masih berjalan sebagai akar dan sebelum pengesahan permulaan kebenaran.

Diperhatikan bahawa, walaupun masalahnya adalah disebabkan oleh kerosakan ingatan, ia boleh dieksploitasi dengan pasti dan berulang kali, tanpa mengira seni bina perkakasan yang digunakan.

Eksploitasi disiapkan berjaya diuji pada Ubuntu, Debian, Fedora dan CentOS, tetapi juga boleh digunakan pada pengedaran lain. Eksploitasi asal belum lagi tersedia secara umum, menunjukkan bahawa ia adalah remeh dan boleh dibuat semula dengan mudah oleh penyelidik lain, jadi adalah penting untuk memasang kemas kini pembaikan terbaru secepat mungkin pada sistem berbilang pengguna.

Polkit juga tersedia untuk sistem BSD dan Solaris, tetapi belum diterokai untuk eksploitasi. Apa yang diketahui ialah serangan itu tidak boleh dilakukan pada OpenBSD, kerana kernel OpenBSD tidak membenarkan menghantar nilai argc null apabila memanggil execve().

Masalahnya telah wujud sejak Mei 2009 apabila arahan pkexec telah ditambahkan. Pembaikan untuk kelemahan dalam PolKit masih tersedia sebagai tampung (versi pembaikan belum dibentuk), tetapi memandangkan pembangun pengedaran telah dimaklumkan tentang masalah itu terlebih dahulu, kebanyakan pengedaran mengeluarkan kemas kini pada masa yang sama. daripada pendedahan maklumat kelemahan.

Akhirnya sekiranya anda berminat untuk mengetahui lebih lanjut mengenainya, anda boleh menyemak butirannya di pautan berikut.


Tinggalkan komen anda

Alamat email anda tidak akan disiarkan. Ruangan yang diperlukan ditanda dengan *

*

*

  1. Bertanggungjawab atas data: Miguel Ángel Gatón
  2. Tujuan data: Mengendalikan SPAM, pengurusan komen.
  3. Perundangan: Persetujuan anda
  4. Komunikasi data: Data tidak akan disampaikan kepada pihak ketiga kecuali dengan kewajiban hukum.
  5. Penyimpanan data: Pangkalan data yang dihoskan oleh Occentus Networks (EU)
  6. Hak: Pada bila-bila masa anda boleh menghadkan, memulihkan dan menghapus maklumat anda.