Schwachstellen in swhkd, einem Shortcut-Manager für Wayland

In swhkd (Simple Wayland HotKey Daemon) wurde eine Reihe von Schwachstellen identifiziert, die durch fehlerhafte Arbeit mit temporären Dateien, Befehlszeilenparametern und Unix-Sockets verursacht werden. Das Programm ist in Rust geschrieben und verarbeitet das Drücken von Hotkeys in Umgebungen, die auf dem Wayland-Protokoll basieren (ein mit Konfigurationsdateien kompatibles Analogon des sxhkd-Prozesses, der in X11-basierten Umgebungen verwendet wird).

Das Paket enthält einen unprivilegierten swhks-Prozess, der Hotkey-Aktionen ausführt, und einen swhkd-Hintergrundprozess, der als Root ausgeführt wird und mit Eingabegeräten auf der Ebene der Uinput-API interagiert. Ein Unix-Socket wird verwendet, um die Interaktion zwischen swhks und swhkd zu organisieren. Mithilfe der Polkit-Regeln kann jeder lokale Benutzer den Prozess /usr/bin/swhkd als Root ausführen und ihm beliebige Parameter übergeben.

Identifizierte Schwachstellen:

  • CVE-2022-27815 – Speichern einer Prozess-PID in einer Datei mit einem vorhersehbaren Namen und in einem Verzeichnis, das für andere Benutzer beschreibbar ist (/tmp/swhkd.pid). Jeder Benutzer kann eine Datei /tmp/swhkd.pid erstellen und die PID eines vorhandenen Prozesses darin einfügen, was dazu führt, dass swhkd nicht gestartet werden kann. Wenn es keinen Schutz gegen die Erstellung symbolischer Links in /tmp gibt, kann die Schwachstelle genutzt werden, um Dateien in einem beliebigen Systemverzeichnis zu erstellen oder zu überschreiben (die PID wird in die Datei geschrieben) oder den Inhalt einer beliebigen Datei auf dem System zu ermitteln (swhkd druckt die gesamten Inhalt der PID-Datei auf stdout). Bemerkenswert ist, dass im veröffentlichten Fix die PID-Datei nicht in das Verzeichnis /run, sondern in das Verzeichnis /etc (/etc/swhkd/runtime/swhkd_{uid}.pid) verschoben wurde, wohin sie auch nicht gehört.
  • CVE-2022-27814 – Durch Manipulation der Befehlszeilenoption „-c“, die zur Angabe einer Konfigurationsdatei verwendet wird, ist es möglich, die Existenz einer beliebigen Datei auf dem System festzustellen. Um beispielsweise /root/.somefile zu überprüfen, können Sie „pkexec /usr/bin/swhkd -d -c /root/.somefile“ ausführen. Wenn die Datei fehlt, wird die Fehlermeldung „/root/.somefile existiert nicht“ angezeigt " wird Angezeigt werden. Wie im Fall der ersten Schwachstelle ist die Behebung des Problems rätselhaft – die Behebung des Problems läuft darauf hinaus, dass das externe Dienstprogramm „cat“ („Command::new(“/bin/cat“)).arg(path) wird nun gestartet, um die Konfigurationsdatei zu lesen.output()').
  • CVE-2022-27819 – Das Problem hängt auch mit der Verwendung der Option „-c“ zusammen, die dazu führt, dass die gesamte Konfigurationsdatei geladen und analysiert wird, ohne die Größe und den Typ der Datei zu überprüfen. Um beispielsweise einen Denial-of-Service zu verursachen, indem der freie Speicher knapp wird und unerwünschte E/A-Vorgänge erzeugt werden, können Sie beim Start ein Blockgerät angeben („pkexec /usr/bin/swhkd -d -c /dev/sda“) oder ein Zeichengerät, das einen unendlichen Datenstrom erzeugt. Das Problem wurde durch Zurücksetzen der Berechtigungen vor dem Öffnen der Datei behoben, die Behebung war jedoch nicht vollständig, da nur die Benutzer-ID (UID) zurückgesetzt wird, die Gruppen-ID (GID) jedoch gleich bleibt.
  • CVE-2022-27818 – Ein Unix-Socket wird mithilfe der Datei /tmp/swhkd.sock erstellt, die in einem beschreibbaren Verzeichnis erstellt wird, was zu ähnlichen Problemen wie die erste Schwachstelle führt (jeder Benutzer kann /tmp/swhkd.sock erstellen und generieren oder abfangen Tastendruck-Ereignisse).
  • CVE-2022-27817 – Eingabeereignisse werden von allen Geräten und in allen Sitzungen akzeptiert, d. h. Ein Benutzer aus einer anderen Wayland-Sitzung oder von der Konsole aus kann Ereignisse abfangen, wenn Hotkeys von anderen Benutzern gedrückt werden.
  • CVE-2022-27816 Der swhks-Prozess verwendet wie swhkd die PID-Datei /tmp/swhks.pid im beschreibbaren Verzeichnis /tmp. Das Problem ähnelt der ersten Schwachstelle, ist jedoch nicht so gefährlich, da swhks unter einem unprivilegierten Benutzer ausgeführt wird.

Source: opennet.ru

Kommentar hinzufügen