Des vulnérabilités ont été découvertes dans swhkd (Simple Wayland HotKey Daemon), causées par une mauvaise gestion des fichiers temporaires, des paramètres de ligne de commande et des sockets Unix. Le programme, écrit en Rust, gère les pressions des touches de raccourci dans des environnements basés sur le protocole Wayland (similaire au processus sxhkd utilisé dans les environnements basés sur X11 au niveau des fichiers de configuration).
Le paquet comprend un processus non privilégié swhks, qui exécute des actions pour les touches de raccourci, et un processus en arrière-plan swhkd, exécuté avec des droits root et interagissant avec les dispositifs d'entrée au niveau de l'API uinput. Un socket Unix est utilisé pour organiser l'interaction entre swhks et swhkd. Grâce aux règles de Polkit, tout utilisateur local peut démarrer le processus /usr/bin/swhkd avec des droits root et lui transmettre des paramètres arbitraires.
Vulnérabilités identifiées :
- CVE-2022-27815 — la conservation du PID d'un processus dans un fichier avec un nom prévisible et dans un répertoire accessible en écriture par d'autres utilisateurs (/tmp/swhkd.pid). Tout utilisateur peut créer le fichier /tmp/swhkd.pid et y placer le pid d'un processus existant, ce qui empêchera le démarrage de swhkd. En l'absence de protection contre la création de liens symboliques dans /tmp, la vulnérabilité peut être exploitée pour créer ou écraser des fichiers dans n'importe quel répertoire système (le PID est enregistré dans le fichier) ou pour déterminer le contenu d'un fichier dans le système (swhkd imprime tout le contenu du fichier PID dans stdout). Il est notable que dans le correctif publié, le fichier PID a été déplacé non pas dans le répertoire /run, mais dans le répertoire /etc (/etc/swhkd/runtime/swhkd_{uid}.pid), où il n'a également pas sa place.
- CVE-2022-27814 — en manipulant le paramètre de ligne de commande « -c », utilisé pour spécifier le fichier de configuration, il est possible de déterminer l'existence de n'importe quel fichier sur le système. Par exemple, pour vérifier /root/.somefile, on peut exécuter « pkexec /usr/bin/swhkd -d -c /root/.somefile » et si le fichier est absent, l'erreur « /root/.somefile doesn’t exist » sera affichée. Comme pour la première vulnérabilité, la correction du problème suscite des interrogations — la solution consiste à exécuter maintenant un utilitaire externe « cat » pour lire le fichier de configuration (‘Command::new(« /bin/cat »).arg(path).output()’).
- CVE-2022-27819 — le problème est également lié à l'utilisation de l'option « -c », par laquelle le fichier de configuration est entièrement chargé et analysé sans vérifier la taille et le type de fichier. Par exemple, pour provoquer un déni de service en épuisant la mémoire libre et en générant des entrées/sorties parasites, l'utilisateur peut spécifier un périphérique bloc lors du démarrage ( « pkexec /usr/bin/swhkd -d -c /dev/sda » ) ou un périphérique caractère émettant un flux de données infini. Le problème a été résolu en réinitialisant les privilèges avant d'ouvrir le fichier, mais le correctif s'est avéré incomplet, car seul l'identifiant utilisateur (UID) est réinitialisé, tandis que l'identifiant de groupe (GID) reste inchangé.
- CVE-2022-27818 — un fichier /tmp/swhkd.sock est utilisé pour créer un socket Unix, créant ainsi des problèmes similaires à la première vulnérabilité (tout utilisateur peut créer /tmp/swhkd.sock et générer ou intercepter des événements de touches).
- CVE-2022-27817 — les événements d'entrée sont acceptés de tous les appareils et dans toutes les sessions, c'est-à-dire qu'un utilisateur d'une autre session Wayland ou d'une console peut intercepter les événements de raccourcis clavier exécutés par d'autres utilisateurs.
- CVE-2022-27816 — le processus swhks, tout comme swhkd, utilise un fichier PID /tmp/swhks.pid dans un répertoire /tmp public en écriture. Le problème est similaire à la première vulnérabilité, mais moins dangereux, car swhks s'exécute sous un utilisateur non privilégié.
Source : opennet.ru
