A swhkd (Simple Wayland HotKey Daemon) séríja sérűnkék kerülnek bemutása miatt Fájlok, parancssori paramétekkel és Unix socketekkel kapcsolatos problémákat az ideiglenes fájlokkal kapcsolatban. A program Rust nyelven van írva, és a Wayland protokollal kompatibilis környezetekben a billentyűparancsok kezelését végzi (a konfigurációs fájlok szintjén megfelel a szxhkdnak, amely az X11 alapú környezetekben alkalmazzák).
A csomag tartalmaz egy nem privilégizált swhks folyamatot, amely a billentyűparancsokat hajtja végre, és egy háttérswhkd folyamatot, amely root jogosultságokkal fut, és az uinput API szintjén lévő bemeneti eszközökkel lép kapcsolatba. Az swhks és swhkd közötti kommunikáció Unix socketen keresztül történik. A Polkit szabályok segítségével bármely helyi felhasználó számára lehetővé válik a /usr/bin/swhkd root jogosultságú folyamat indítása és tetszőleges paraméterek átadása.
Feltárt sebezhetőségek:
- CVE-2022-27815 - A PID folyamat fájlba történő írása előre megjósolható néven és egy más felhasználók számára írásra elérhető könyvtárban ( /tmp/swhkd.pid). Bármely felhasználó létrehozhat egy /tmp/swhkd.pid fájlt, és beírhatja egy létező folyamat PID-jét, ami megakadályozza a swhkd indítását. A /tmp-ban lévő szimbolikus linkek létrehozásának védelme nélkül a sebezhetőség fájlok létrehozására vagy felülírására használható bármely rendszerkönyvtárban (a fájlba a PID kerül írásra), vagy bármilyen fájl tartalmának meghatározására a rendszerben (a swhkd a stdout-ra kiírja a PID fájl teljes tartalmát). Érdekes, hogy a kiadott javításban a PID fájl nem a /run könyvtárba került, hanem a /etc könyvtárba (/etc/swhkd/runtime/swhkd_{uid}.pid), ahol szintén nem lenne helyénvaló.
- CVE-2022-27814 - A parancssori paraméter manipulálásával, amely a konfigurációs fájl megadására szolgál („-c”), lehetőség nyílik arra, hogy bármely fájl létezését ellenőrizze a rendszerben. Például a /root/.somefile ellenőrzésére a „pkexec /usr/bin/swhkd -d -c /root/.somefile” indítható, és ha a fájl nem létezik, a hibaüzenet a következő lesz: „/root/.somefile doesn’t exist”. Mint az első sebezhetőség esetében, a probléma kijavítása zűrzavart kelt - a probléma megoldása csupán annyit jelent, hogy a konfigurációs fájl olvasásához most már egy külső eszköz, a „cat” használatos (‘Command::new(“/bin/cat”).arg(path).output()’).
- CVE-2022-27819 — a problem is also related to the usage of the option "-c", through which the entire configuration file is loaded and parsed without checking the size and type of the file. For instance, to trigger a denial of service by exhausting free memory and creating parasitic input/output, a block device can be specified at startup ("pkexec /usr/bin/swhkd -d -c /dev/sda") or a character device that provides an infinite stream of data. The issue has been resolved by dropping privileges before opening the file, but the fix was incomplete as only the user ID (UID) is reset, while the group ID (GID) remains unchanged.
- CVE-2022-27818 — a Unix socket is created using the file /tmp/swhkd.sock, which is created in a publicly writable directory, leading to similar problems as the first vulnerability (any user can create /tmp/swhkd.sock and generate or intercept key press events).
- CVE-2022-27817 — input events are accepted from all devices and in all sessions, meaning that a user from another Wayland session or from the console can intercept events when other users press hotkeys.
- CVE-2022-27816 — the swhks process, like swhkd, uses a PID file /tmp/swhks.pid in a publicly writable directory /tmp. The problem is similar to the first vulnerability but is not as dangerous, since swhks runs under an unprivileged user.
Forrás: opennet.ru
