Уразливості у swhkd, менеджері гарячих клавіш для Wayland

У swhkd (Simple Wayland HotKey Daemon) виявлено серію вразливостей, викликаних некоректною роботою з часовими файлами, параметрами командного рядка та unix-сокетами. Програма написана мовою Rust і виконує обробку натискання гарячих клавіш в оточеннях на базі протоколу Wayland (сумісний на рівні файлів конфігурації аналог процесу sxhkd, що використовується в оточеннях на базі X11).

До складу пакета входить непривілейований процес swhks, що виконує дії для гарячих клавіш, і фоновий процес swhkd, що виконується з правами root і взаємодіє з пристроями введення на рівні API uinput. Для організації взаємодії swhks та swhkd застосовується Unix-сокет. За допомогою правил Polkit будь-якому локальному користувачеві надається можливість запуску з правами root процесу /usr/bin/swhkd та передачі довільних параметрів.

Виявлені вразливості:

  • CVE-2022-27815 — збереження PID процесу у файл із передбачуваним ім'ям та в каталозі, доступному на запис іншим користувачам (/tmp/swhkd.pid). Будь-який користувач може створити файл /tmp/swhkd.pid та помістити в нього pid існуючого процесу, що призведе до неможливості запустити swhkd. За відсутності захисту від створення символічних посилань /tmp, вразливість може застосовуватися для створення або перезапису файлів у будь-якому системному каталозі (у файл записується PID) або визначення вмісту будь-якого файлу в системі (swhkd виводить в stdout весь вміст PID-файлу). Примітно, що у випущеному виправленні PID-файл перенесений не каталог /run, а каталог /etc (/etc/swhkd/runtime/swhkd_{uid}.pid), де йому теж не місце.
  • CVE-2022-27814 — маніпулюючи параметром командного рядка «-c», що застосовується для вказівки конфігураційного файлу, можна визначити існування в системі будь-якого файлу. Наприклад, для перевірки /root/.somefile можна запустити "pkexec /usr/bin/swhkd -d -c /root/.somefile" і якщо файл відсутній буде виведена помилка "/root/.somefile doesn't exist". Як і у випадку з першою вразливістю, виправлення проблеми викликає здивування — усунення проблеми зводиться до того, що для читання файлу конфігурації тепер запускається зовнішня утиліта cat ('Command::new(/bin/cat)).arg(path). output()').
  • CVE-2022-27819 — проблема також пов'язана з використанням опції «-c», вказаний через яку конфігураційний файл повністю завантажується і розбирається без перевірки розміру і типу файлу. Наприклад, для виклику відмови в обслуговуванні через вичерпання вільної пам'яті та створення паразитного вводу/виводу можна вказати при запуску блоковий пристрій (pkexec /usr/bin/swhkd-d-c/dev/sda) або символьне пристрої, що видає нескінченний потік даних . Проблема вирішена скиданням привілеїв перед відкриттям файлу, але виправлення виявилося не повним, оскільки скидається лише ідентифікатор користувача (UID), але ідентифікатор групи (GID) залишається незмінним.
  • CVE-2022-27818 - для створення Unix-сокету використовується файл /tmp/swhkd.sock, створюваний у загальнодоступному на запис каталозі, що призводить до схожих проблем, що і перша вразливість (будь-який користувач може створити /tmp/swhkd.sock і генерувати або перехоплювати події натискання клавіш).
  • CVE-2022-27817 - події введення приймаються від усіх пристроїв та у всіх сеансах, тобто. користувач з іншого сеансу Wayland або консолі може перехопити події при натисканні гарячих клавіш іншими користувачами.
  • CVE-2022-27816 - процес swhks, як і swhkd, використовує PID-файл /tmp/swhks.pid у загальнодоступному на запис каталозі /tmp. Проблема аналогічна першій вразливості, але не така небезпечна, оскільки swhks виконується під непривілейованим користувачем.

Джерело: opennet.ru

Додати коментар або відгук