Kerentanan dalam swhkd, pengurus pintasan untuk Wayland

Satu siri kelemahan telah dikenal pasti dalam swhkd (Simple Wayland HotKey Daemon) yang disebabkan oleh kerja yang salah dengan fail sementara, parameter baris arahan dan soket Unix. Program ini ditulis dalam Rust dan mengendalikan penekanan kekunci pintas dalam persekitaran berdasarkan protokol Wayland (analog serasi fail konfigurasi bagi proses sxhkd yang digunakan dalam persekitaran berasaskan X11).

Pakej ini termasuk proses swhk tanpa hak yang melakukan tindakan hotkey dan proses swhkd latar belakang yang berjalan sebagai akar dan berinteraksi dengan peranti input pada peringkat API uinput. Soket Unix digunakan untuk mengatur interaksi antara swhks dan swhkd. Menggunakan peraturan Polkit, mana-mana pengguna tempatan boleh menjalankan proses /usr/bin/swhkd sebagai akar dan menghantar parameter sewenang-wenangnya kepadanya.

Kelemahan yang dikenal pasti:

  • CVE-2022-27815 – Menyimpan proses PID ke fail dengan nama yang boleh diramal dan dalam direktori yang boleh ditulis oleh pengguna lain (/tmp/swhkd.pid). Mana-mana pengguna boleh mencipta fail /tmp/swhkd.pid dan meletakkan pid proses sedia ada di dalamnya, yang akan menjadikan swhkd tidak dapat dimulakan. Jika tiada perlindungan daripada mencipta pautan simbolik dalam /tmp, kerentanan boleh digunakan untuk mencipta atau menulis ganti fail dalam mana-mana direktori sistem (PID ditulis pada fail) atau menentukan kandungan mana-mana fail pada sistem (swhkd mencetak keseluruhan kandungan fail PID ke stdout). Perlu diperhatikan bahawa dalam pembetulan yang dikeluarkan, fail PID dialihkan bukan ke direktori /run, tetapi ke direktori /etc (/etc/swhkd/runtime/swhkd_{uid}.pid), di mana ia juga bukan miliknya.
  • CVE-2022-27814 – Dengan memanipulasi pilihan baris arahan β€œ-c” yang digunakan untuk menentukan fail konfigurasi, adalah mungkin untuk menentukan kewujudan mana-mana fail pada sistem. Sebagai contoh, untuk menyemak /root/.somefile anda boleh menjalankan β€œpkexec /usr/bin/swhkd -d -c /root/.somefile” dan jika fail itu tiada, ralat β€œ/root/.somefile tidak wujud ” akan dipaparkan. Seperti dalam kes kelemahan pertama, membetulkan masalah adalah membingungkan - menyelesaikan masalah berpunca daripada fakta bahawa utiliti luaran "kucing" ('Command::new(β€œ/bin/cat”)).arg(path) kini dilancarkan untuk membaca fail konfigurasi. output()').
  • CVE-2022-27819 – Isu ini juga berkaitan dengan penggunaan pilihan β€œ-c”, yang menyebabkan keseluruhan fail konfigurasi dimuatkan dan dihuraikan tanpa menyemak saiz dan jenis fail. Sebagai contoh, untuk menyebabkan penafian perkhidmatan dengan kehabisan memori percuma dan mencipta I/O palsu, anda boleh menentukan peranti blok semasa permulaan ("pkexec /usr/bin/swhkd -d -c /dev/sda") atau peranti aksara yang menghasilkan aliran data yang tidak terhingga . Masalah telah diselesaikan dengan menetapkan semula keistimewaan sebelum membuka fail, tetapi pembetulan tidak lengkap, kerana hanya ID pengguna (UID) ditetapkan semula, tetapi ID kumpulan (GID) kekal sama.
  • CVE-2022-27818 – Soket Unix dicipta menggunakan fail /tmp/swhkd.sock yang dicipta dalam direktori boleh tulis, yang membawa kepada isu yang serupa sebagai kelemahan pertama (mana-mana pengguna boleh mencipta /tmp/swhkd.sock dan menjana atau memintas peristiwa tekan kekunci).
  • CVE-2022-27817 - Acara input diterima daripada semua peranti dan dalam semua sesi, i.e. pengguna dari sesi Wayland lain atau dari konsol boleh memintas acara apabila kekunci pintas ditekan oleh pengguna lain.
  • CVE-2022-27816 Proses swhks, seperti swhkd, menggunakan fail PID /tmp/swhks.pid dalam direktori /tmp boleh tulis. Masalahnya serupa dengan kelemahan pertama, tetapi tidak begitu berbahaya kerana swhks berjalan di bawah pengguna yang tidak mempunyai hak istimewa.

Sumber: opennet.ru

Tambah komen