Kerentanan PolKit memungkinkan akses root diperoleh di sebagian besar distribusi Linux

Baru-baru ini kualifikasi merilis berita bahwa telah mengidentifikasi kerentanan (CVE-2021-4034) en komponen sistem polkit (sebelumnya PolicyKit), yang digunakan dalam distribusi untuk memungkinkan pengguna yang tidak memiliki hak istimewa melakukan tindakan yang memerlukan hak akses yang lebih tinggi.

Kerentanan memungkinkan pengguna lokal yang tidak memiliki hak untuk meningkatkan hak istimewa mereka ke pengguna root dan mendapatkan kontrol penuh atas sistem. Masalah ini diberi nama kode PwnKit dan terkenal karena menghasilkan exploit yang berfungsi yang berjalan dalam pengaturan default pada sebagian besar distribusi Linux.

Disebutkan itu masalahnya ada di utilitas pkexec yang disertakan dengan PolKit, yang dilengkapi dengan flag root SUID dan dirancang untuk menjalankan perintah dengan hak istimewa pengguna lain sesuai dengan aturan PolKit.

Karena penanganan argumen yang salah dari baris perintah diteruskan ke pkexec, a pengguna yang tidak memiliki hak istimewa dapat melewati otentikasi dan menjalankan kode Anda sebagai root, terlepas dari aturan akses yang ditetapkan. Untuk serangan, apa pun pengaturan dan batasan yang ditetapkan di PolKit, atribut root SUID untuk file yang dapat dieksekusi sudah cukup diatur dengan utilitas pkexec.

Pkexec tidak memeriksa kebenaran jumlah argumen baris perintah (argc) yang dilewatkan saat memulai proses. Pengembang pkexec berasumsi bahwa entri pertama dalam array argv selalu berisi nama proses (pkexec), dan entri kedua adalah NULL atau nama perintah yang dijalankan melalui pkexec.

Karena jumlah argumen tidak dibandingkan dengan isi sebenarnya dari array dan diasumsikan selalu lebih besar dari 1, jika array argv kosong diteruskan ke proses, yang diizinkan oleh fungsi execve Linux, pkexec memperlakukan NULL sebagai argumen pertama ( proses name), dan yang berikutnya setelah kehabisan memori buffer, sebagai konten array berikutnya.

Masalahnya adalah setelah array argv di memori adalah array envp yang berisi variabel lingkungan. Jadi, dengan larik argv kosong, pkexec mengekstrak data tentang perintah yang dieksekusi dengan hak istimewa yang lebih tinggi dari elemen pertama larik dengan variabel lingkungan (argv[1] menjadi identik dengan envp[0]), yang isinya dapat dikontrol oleh penyerang.

Setelah menerima nilai argv[1], pkexec mencoba menentukan path lengkap ke file yang dapat dieksekusi menggunakan path file di PATH dan menulis pointer ke string dengan path lengkap kembali ke argv[1], yang mengarah ke penimpaan nilai dari variabel lingkungan pertama juga, karena argv[1] identik dengan envp[0]. Dengan memanipulasi nama variabel lingkungan pertama, penyerang dapat mengganti variabel lingkungan lain di pkexec, misalnya, mengganti variabel lingkungan "LD_PRELOAD", yang tidak diperbolehkan dalam program suid, dan meminta proses memuat pustaka bersamanya dalam proses .

Eksploitasi kerja menggunakan substitusi variabel GCONV_PATH, yang digunakan untuk menentukan jalur ke pustaka transkode simbol yang dimuat secara dinamis saat fungsi g_printerr() dipanggil, yang menggunakan iconv_open() dalam kodenya.

Dengan mendefinisikan ulang jalur di GCONV_PATH, penyerang dapat mengatur untuk memuat bukan pustaka iconv normal, tetapi pustakanya sendiri, yang drivernya akan dieksekusi selama pesan kesalahan pada tahap di mana pkexec masih berjalan sebagai root dan sebelum verifikasi izin startup.

Telah diamati bahwa, meskipun masalahnya adalah karena kerusakan memori, itu dapat dieksploitasi dengan andal dan berulang kali, terlepas dari arsitektur perangkat keras yang digunakan.

Eksploitasi disiapkan berhasil diuji di Ubuntu, Debian, Fedora dan CentOS, tetapi juga dapat digunakan pada distribusi lain. Eksploitasi asli belum tersedia untuk umum, menunjukkan bahwa itu sepele dan dapat dengan mudah dibuat ulang oleh peneliti lain, jadi penting untuk menginstal pembaruan perbaikan terbaru sesegera mungkin pada sistem multi-pengguna.

Polkit juga tersedia untuk sistem BSD dan Solaris, tetapi belum dieksplorasi untuk dieksploitasi. Yang diketahui adalah bahwa serangan tidak dapat dilakukan pada OpenBSD, karena kernel OpenBSD tidak mengizinkan melewatkan nilai argc null saat memanggil execve().

Masalahnya telah ada sejak Mei 2009 ketika perintah pkexec ditambahkan. Perbaikan untuk kerentanan di PolKit masih tersedia sebagai tambalan (versi perbaikan belum terbentuk), tetapi karena pengembang distribusi diberitahu tentang masalah sebelumnya, sebagian besar distribusi merilis pembaruan pada saat yang sama. informasi kerentanan.

Akhirnya jika Anda tertarik untuk mengetahui lebih banyak tentang itu, Anda dapat memeriksa detailnya di link berikut.


tinggalkan Komentar Anda

Alamat email Anda tidak akan dipublikasikan. Bidang yang harus diisi ditandai dengan *

*

*

  1. Penanggung jawab data: Miguel Ángel Gatón
  2. Tujuan data: Mengontrol SPAM, manajemen komentar.
  3. Legitimasi: Persetujuan Anda
  4. Komunikasi data: Data tidak akan dikomunikasikan kepada pihak ketiga kecuali dengan kewajiban hukum.
  5. Penyimpanan data: Basis data dihosting oleh Occentus Networks (UE)
  6. Hak: Anda dapat membatasi, memulihkan, dan menghapus informasi Anda kapan saja.