Im swhkd (Simple Wayland HotKey Daemon) wurde eine Reihe von SicherheitsanfÀlligkeiten entdeckt, die durch den fehlerhaften Umgang mit temporÀren Dateien, Befehlszeilenparametern und Unix-Sockets verursacht werden. Das Programm ist in Rust geschrieben und verarbeitet Tastenkombinationen in Umgebungen, die auf dem Wayland-Protokoll basieren (es handelt sich um einen konfigurationskompatiblen Analogprozess zum sxhkd, der in X11-basierten Umgebungen verwendet wird).
Das Paket enthĂ€lt den nicht privilegierten Prozess swhks, der Aktionen fĂŒr die Hotkeys ausfĂŒhrt, sowie den Hintergrundprozess swhkd, der mit Root-Rechten lĂ€uft und ĂŒber die API uinput mit EingabegerĂ€ten interagiert. Zur Organisation der Kommunikation zwischen swhks und swhkd wird ein Unix-Socket verwendet. Durch Polkit-Regeln kann jedem lokalen Benutzer die AusfĂŒhrung des Prozesses /usr/bin/swhkd mit Root-Rechten und die Ăbergabe beliebiger Parameter an ihn ermöglicht werden.
Identifizierte Schwachstellen:
- CVE-2022-27815 â Speicherung der PID eines Prozesses in eine Datei mit vorhersehbarem Namen in einem fĂŒr andere Benutzer schreibbaren Verzeichnis (/tmp/swhkd.pid). Jeder Benutzer kann die Datei /tmp/swhkd.pid erstellen und die PID eines bestehenden Prozesses darin ablegen, was dazu fĂŒhrt, dass swhkd nicht gestartet werden kann. Bei fehlendem Schutz gegen symbolische Links in /tmp kann die Schwachstelle genutzt werden, um Dateien in jedem Systemverzeichnis zu erstellen oder zu ĂŒberschreiben (die PID wird in die Datei geschrieben) oder den Inhalt beliebiger Dateien im System zu bestimmen (swhkd gibt den gesamten Inhalt der PID-Datei an stdout aus). Bemerkenswert ist, dass im veröffentlichten Patch die PID-Datei nicht in das Verzeichnis /run verschoben wurde, sondern in das Verzeichnis /etc (/etc/swhkd/runtime/swhkd_{uid}.pid), wo sie ebenfalls nicht hingehört.
- CVE-2022-27814 â Durch Manipulation des Befehlszeilenparameters â-câ, der zur Angabe der Konfigurationsdatei verwendet wird, kann die Existenz beliebiger Dateien im System festgestellt werden. Zum Beispiel kann zur ĂberprĂŒfung von /root/.somefile der Befehl âpkexec /usr/bin/swhkd -d -c /root/.somefileâ ausgefĂŒhrt werden. Wenn die Datei nicht vorhanden ist, wird die Fehlermeldung â/root/.somefile gibt es nichtâ ausgegeben. Wie im Falle der ersten Schwachstelle bleibt die Lösung der Problematik unklar â die Behebung des Fehlers erfolgt dadurch, dass nun ein externes Dienstprogramm âcatâ zur Lesung der Konfigurationsdatei gestartet wird (âCommand::new(â/bin/catâ).arg(path).output()â).
- CVE-2022-27819 â Das Problem ist ebenfalls mit der Verwendung der Option â-câ verbunden, ĂŒber die die Konfigurationsdatei vollstĂ€ndig geladen und ohne GröĂen- und TypĂŒberprĂŒfung analysiert wird. Zum Beispiel kann beim Aufruf eines Denial-of-Service-Angriffs durch Erschöpfung des freien Speichers und Erzeugung von parasitĂ€rem Input/Output ein BlockgerĂ€t angegeben werden (z. B. âpkexec /usr/bin/swhkd -d -c /dev/sdaâ) oder ein ZeichengerĂ€t, das einen endlosen Datenstrom ausgibt. Das Problem wurde durch das ZurĂŒcksetzen der Berechtigungen vor dem Ăffnen der Datei behoben, jedoch war die Lösung nicht vollstĂ€ndig, da nur die Benutzer-ID (UID) zurĂŒckgesetzt wird, wĂ€hrend die Gruppen-ID (GID) unverĂ€ndert bleibt.
- CVE-2022-27818 â FĂŒr die Erstellung des Unix-Sockets wird die Datei /tmp/swhkd.sock verwendet, die in einem öffentlich beschreibbaren Verzeichnis erstellt wird, was zu Ă€hnlichen Problemen wie bei der ersten Schwachstelle fĂŒhrt (jeder Benutzer kann /tmp/swhkd.sock erstellen und Tasteneingaben generieren oder abfangen).
- CVE-2022-27817 â Eingaben werden von allen GerĂ€ten und in allen Sitzungen akzeptiert, d. h. ein Benutzer aus einer anderen Wayland-Sitzung oder von der Konsole kann Ereignisse abfangen, wenn andere Benutzer Hotkeys drĂŒcken.
- CVE-2022-27816 â Der Prozess swhks verwendet, Ă€hnlich wie swhkd, eine PID-Datei /tmp/swhks.pid in einem allgemein beschreibbaren Verzeichnis /tmp. Das Problem ist Ă€hnlich wie bei der ersten Schwachstelle, ist jedoch nicht so gravierend, da swhks unter einem nicht privilegierten Benutzer ausgefĂŒhrt wird.
Quelle: opennet.ru
