Ve swhkd (Simple Wayland HotKey Daemon) byla odhalena řada zranitelností způsobených nesprávným zacházením s dočasnými soubory, parametry příkazového řádku a unixovými sokety. Program je napsán v jazyce Rust a zpracovává stisknutí klávesových zkratek v prostředích založených na protokolu Wayland (kompatibilní na úrovni konfiguračních souborů analog procesu sxhkd, používaného v prostředích založených na X11).
Součástí balíčku je nepřístupný proces swhks, který provádí akce pro klávesové zkratky, a na pozadí běžící proces swhkd, který se spouští s právy root a interaguje se vstupními zařízeními na úrovni API uinput. K zajištění interakce mezi swhks a swhkd se používá unixový soket. Pomocí pravidel Polkit je jakémukoli místnímu uživateli umožněno spouštění procesu /usr/bin/swhkd s právy root a předávání mu libovolných parametrů.
Zjištěné zranitelnosti:
- CVE-2022-27815 — ukládání PID procesu do souboru s předvídatelným názvem a v adresáři, který je přístupný pro zápis jiným uživatelům (/tmp/swhkd.pid). Jakýkoli uživatel může vytvořit soubor /tmp/swhkd.pid a umístit do něj PID existujícího procesu, což povede k neschopnosti spustit swhkd. Při absenci ochrany proti vytváření symbolických odkazů v /tmp může být zranitelnost použita k vytvoření nebo přepsání souborů v jakémkoli systémovém adresáři (do souboru se zapisuje PID) nebo k určení obsahu jakéhokoli souboru v systému (swhkd vypisuje do stdout veškerý obsah PID souboru). Zajímavé je, že v uvolněné opravě byl PID soubor přesunut nikoli do adresáře /run, ale do adresáře /etc (/etc/swhkd/runtime/swhkd_{uid}.pid), kde mu také není místo.
- CVE-2022-27814 — manipulací s parametrem příkazového řádku „-c“, který se používá k určení konfiguračního souboru, lze zjistit existenci jakéhokoli souboru v systému. Například pro kontrolu /root/.somefile lze spustit „pkexec /usr/bin/swhkd -d -c /root/.somefile“ a pokud soubor chybí, zobrazí se chybová zpráva „/root/.somefile doesn’t exist“. Stejně jako v případě první zranitelnosti vyvolává oprava problému zmatek — odstranění problému spočívá v tom, že pro čtení konfiguračního souboru se nyní spouští externí utilita „cat“ (‘Command::new(“/bin/cat”).arg(path).output()’).
- CVE-2022-27819 — problém je také spojen s použitím volby „-c“, přes kterou se načítá a zpracovává celý konfigurační soubor bez ověření velikosti a typu souboru. Například pro vyvolání odmítnutí služby prostřednictvím vyčerpání volné paměti a vytváření parazitního vstupního/výstupního toku lze při spuštění specifikovat blokové zařízení („pkexec /usr/bin/swhkd -d -c /dev/sda“) nebo symbolické zařízení, které generuje nekonečný tok dat. Problém byl vyřešen obnovením privilegií před otevřením souboru, ale oprava nebyla úplná, protože se resetuje pouze identifikátor uživatele (UID), zatímco identifikátor skupiny (GID) zůstává stejný.
- CVE-2022-27818 — pro vytvoření Unixového soketu se používá soubor /tmp/swhkd.sock, který se vytváří ve veřejně zapisovatelném adresáři, což vede k podobným problémům jako první zranitelnost (jakýkoli uživatel může vytvořit /tmp/swhkd.sock a generovat nebo zachycovat události stisknutí kláves).
- CVE-2022-27817 — události vstupu jsou přijímány ze všech zařízení a ve všech relacích, tedy uživatel z jiné relace Wayland nebo z konzole může zachytit události při stisknutí horkých kláves jinými uživateli.
- CVE-2022-27816 — proces swhks, stejně jako swhkd, používá PID soubor /tmp/swhks.pid ve veřejně zapisovatelném adresáři /tmp. Problém je podobný první zranitelnosti, ale není tak nebezpečný, protože swhks běží pod neoprávněným uživatelským účtem.
Zdroj: opennet.ru
