Уразлівасці ў 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

Дадаць каментар