12 ans. C’est le temps pendant lequel une vulnérabilité dans PolKit (anciennement Policykit), un système de gestion des autorisations largement utilisé par les distributions Linux les plus populaires, a été cachée. La faille se trouve dans le composant ‘pkexec’, qui permet une fonctionnalité similaire à ‘sudo’, c’est-à-dire l’exécution d’une commande avec les privilèges d’un autre compte ou utilisateur. Par conséquent, lorsqu’il est exploité, il permet l’élévation des privilèges de l’utilisateur root, puisque ‘pkexec’ est un binaire SUID root.
En plus d’être présent dans presque toutes les distributions Linux, l’exploitation est triviale. Grosso modo, il suffit de manipuler uniquement les variables d’environnement pour l’effectuer. En d’autres termes, il ne s’agit pas d’un exploit typique, dans lequel il faut échapper à la protection et disposer d’un contexte d’exécution favorable, mais le succès de l’exploit est pratiquement garanti. En fait, un grand nombre d’exploits émergent pour cette vulnérabilité (avec CVE-2021-4043).
Il est intéressant de noter que la base de la faille a été décrite en 2013 dans un billet d’un chercheur australien, Ryan Mallon, qui prévenait que l’injection d’un pointeur nul dans le tableau d’arguments d’un programme pouvait avoir des conséquences désastreuses. Bien qu’il n’ait pas été en mesure à l’époque d’identifier un vecteur sur lequel appliquer son constat. Elle s’est finalement matérialisée par cette élévation de privilège, triviale à exploiter, rappelons-le.
Un article récemment publié par le chercheur en sécurité du GitHub Security Lab, Kevin Backhouse, détaille la procédure qui permet l’escalade des privilèges sur les systèmes Linux qui utilisent le service polkit.
Un attaquant non privilégié peut obtenir un shell avec l’utilisateur root en utilisant la vulnérabilité de contournement d’authentification dans le service polkit.
Bien que de nombreuses distributions Linux n’aient pas inclus la version vulnérable de polkit jusqu’à récemment, tout système Linux sur lequel est installé polkit 0.113 ou une version ultérieure est exposé à cette attaque.
La liste des distributions actuellement vulnérables partagée par Kevin Backhouse comprend des distributions populaires telles que RHEL 8, Fedora 21 (ou ultérieure), Ubuntu 20.04, ainsi que des versions instables comme Debian testing (« bullseye ») et ses dérivés.
L’exploitation de la vulnérabilité est extrêmement facile, ne nécessitant que quelques commandes de terminal utilisant uniquement des outils standard tels que bash, kill et dbus-send ; une démonstration vidéo fournie par Kevin Backhouse est incluse ci-dessous.
Lorsqu’un processus demandeur se déconnecte du service dbus juste avant que l’appel à polkit_system_bus_name_get_creds_sync soit lancé, le processus ne peut pas obtenir un uid et un pid uniques du processus et ne peut pas vérifier les privilèges du processus qui a fait la demande. La plus grande menace de cette vulnérabilité concerne la confidentialité et l’intégrité des données, ainsi que la disponibilité du système.
Plus d’information:
https://access.redhat.com/security/cve/CVE-2021-3560
https://github.blog/2021-06-10-privilege-escalation-polkit-root-on-linux-with-bug/
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-3560
https://github.com/berdav/CVE-2021-4034/blob/main/cve-2021-4034.c