V swhkd (Simple Wayland HotKey Daemon) bola zistená séria zraniteľností spôsobených nesprávnym spracovaním dočasných súborov, parametrov príkazového riadku a unixových soketov. Program je napísaný v jazyku Rust a vykonáva spracovanie stlačenia klávesových skratiek v prostrediach založených na protokole Wayland (kompatibilný na úrovni konfiguračných súborov analóg procesu sxhkd, používaného v prostrediach na báze X11).
Súčasťou balíka je neoprávnený proces swhks, ktorý vykonáva činnosti pre klávesové skratky, a na pozadí bežiaci proces swhkd, ktorý sa spúšťa s právami root a interaguje so vstupnými zariadeniami na úrovni API uinput. Na organizáciu interakcie medzi swhks a swhkd sa používa Unix soket. Pomocou pravidiel Polkit má ktorýkoľvek lokálny používateľ možnosť spustiť proces /usr/bin/swhkd s právami root a odovzdať mu ľubovoľné parametre.
Odhalené zraniteľnosti:
- CVE-2022-27815 — uloženie PID procesu do súboru s predvídateľným názvom a v adresári, ktorý je prístupný na zápis iným používateľom (/tmp/swhkd.pid). Ktorýkoľvek používateľ môže vytvoriť súbor /tmp/swhkd.pid a umiestniť do neho pid existujúceho procesu, čo spôsobí, že spustenie swhkd nebude možné. Pri absencii ochrany pred vytváraním symbolických odkazov v /tmp môže byť zraniteľnosť použitá na vytvorenie alebo prepísanie súborov v akomkoľvek systémovom adresári (do súboru sa zapisuje PID) alebo na určenie obsahu akéhokoľvek súboru v systéme (swhkd vypisuje do stdout celý obsah PID súboru). Zaujímavé je, že v vydanom opravnom patchi bol PID súbor presunutý nie do adresára /run, ale do adresára /etc (/etc/swhkd/runtime/swhkd_{uid}.pid), kde mu tiež nie je miesto.
- CVE-2022-27814 — manipulovaním s parametrom príkazového riadku „-c“, ktorý sa používa na určenie konfiguračného súboru, je možné určiť existenciu akéhokoľvek súboru v systéme. Napríklad na kontrolu /root/.somefile môžete spustiť „pkexec /usr/bin/swhkd -d -c /root/.somefile“ a ak súbor neexistuje, bude vyhodená chyba „/root/.somefile doesn’t exist“. Rovnako ako v prípade prvej zraniteľnosti, oprava problému vyvoláva pochybnosti — odstránenie problému spočíva v tom, že na čítanie konfiguračného súboru sa teraz spúšťa vonkajšia utilita „cat“ (‘Command::new(‘/bin/cat’).arg(path).output()’).
- CVE-2022-27819 — problém je tiež spojený s použitím voľby „-c“, cez ktorú sa celý konfiguračný súbor načíta a analyzuje bez kontroly veľkosti a typu súboru. Napríklad, na vyvolanie odmietnutia služby prostredníctvom vyčerpania voľnej pamäte a vytvorenia parazitného vstupu/výstupu je možné pri spustení špecifikovať blokové zariadenie („pkexec /usr/bin/swhkd -d -c /dev/sda“) alebo symbolické zariadenie, ktoré prijíma nekonečný prúd dát. Problém bol vyriešený znížením privilégií pred otvorením súboru, avšak oprava sa ukázala byť neúplná, pretože sa zníži iba identifikátor používateľa (UID), ale identifikátor skupiny (GID) zostáva nezmenený.
- CVE-2022-27818 — na vytvorenie Unix-socketu sa používa súbor /tmp/swhkd.sock, ktorý je vytváraný v verejne zapisovateľnom adresári, čo vedie k podobným problémom ako prvá zraniteľnosť (ktorýkoľvek používateľ môže vytvoriť /tmp/swhkd.sock a generovať alebo zachytávať udalosti stlačenia klávesov).
- CVE-2022-27817 — vstupné udalosti sú prijímané zo všetkých zariadení a vo všetkých reláciách, t.j. používateľ z inej relácie Wayland alebo z konzoly môže zachytiť udalosti pri stlačení horúcich klávesov inými používateľmi.
- CVE-2022-27816 — proces swhks, rovnako ako swhkd, používa PID-súbor /tmp/swhks.pid v verejne zapisovateľnom adresári /tmp. Problém je podobný prvej zraniteľnosti, ale nie je taký nebezpečný, pretože swhks je spustený pod neprivilegovaným používateľom.
Zdroj: opennet.ru
