Une vulnérabilité a été découverte dans le composant Polkit, utilisé dans les distributions pour permettre aux utilisateurs non privilégiés d'effectuer des actions nécessitant des privilèges accrus (comme le montage de clés USB). Cette vulnérabilité (CVE-2021-3560) permet à un utilisateur local d'obtenir des droits root dans le système. Le problème a été corrigé dans la version Polkit 0.119.
Le problème est apparu à partir de la version 0.113, mais de nombreuses distributions, y compris RHEL, Ubuntu, Debian et SUSE, ont rétroporté la fonctionnalité vulnérable dans les paquets basés sur des versions plus anciennes de Polkit (des correctifs sont déjà disponibles dans les distributions).
Le problème se manifeste dans la fonction polkit_system_bus_name_get_creds_sync(), qui obtient les identifiants (uid et pid) du processus demandant une élévation de privilèges. Le processus est identifié par Polkit grâce à l'attribution d'un nom unique dans DBus, qui est ensuite utilisé pour vérifier les privilèges. Si le processus se déconnecte du dbus-daemon juste avant le lancement du gestionnaire polkit_system_bus_name_get_creds_sync, le gestionnaire reçoit un code d'erreur au lieu du nom unique.
La vulnérabilité est due au fait que le code d'erreur retourné n'est pas traité correctement et que la fonction polkit_system_bus_name_get_creds_sync() renvoie TRUE au lieu de FALSE, même si elle n'a pas réussi à associer le processus avec le uid/pid et à vérifier les privilèges demandés pour le processus. Le code à partir duquel la fonction polkit_system_bus_name_get_creds_sync() a été appelée suppose que la vérification a été effectuée avec succès et que la demande d'élévation de privilèges provient de root, et non d'un utilisateur non privilégié, ce qui permet d'exécuter des actions privilégiées sans authentification et confirmation supplémentaires.
Source : opennet.ru
