PwnKit : Découverte d'une vulnérabilité d'escalade de privilèges locaux dans pkexec de polkit (CVE-2021-4034)

L'équipe de recherche Qualys a découvert une vulnérabilité - faille de corruption de mémoire dans pkexec de polkit identifié sous le nom de CVE-2021-4034.
C'est un programme SUID-root qui est installé par défaut sur toutes les principales distributions Linux. Cette vulnérabilité facilement exploitable permet à tout utilisateur non privilégié d'obtenir les privilèges complets de root sur un hôte vulnérable en exploitant cette vulnérabilité dans sa configuration par défaut.

À propos de Polkit pkexec pour Linux

Polkit (anciennement PolicyKit) est un composant permettant de contrôler les privilèges à l'échelle du système dans les systèmes d'exploitation de type Unix. Il fournit un moyen organisé pour les processus non privilégiés de communiquer avec les processus privilégiés. Il est également possible d'utiliser polkit pour exécuter des commandes avec des privilèges élevés en utilisant la commande pkexec suivie de la commande destinée à être exécutée (avec la permission de root).

Impact potentiel de la vulnérabilité PwnKit

Une exploitation réussie de cette vulnérabilité permet à tout utilisateur non privilégié d'obtenir les privilèges "root" sur l'hôte vulnérable. Les chercheurs en sécurité de Qualys ont pu vérifier indépendamment la vulnérabilité, développer un exploit et obtenir les privilèges root complets sur les installations par défaut d'Ubuntu, Debian, Fedora et CentOS. D'autres distributions Linux - Unix comme par exemple Solaris, RHEL (RedHat) sont probablement vulnérables et probablement exploitables. Cependant nous savons qu'OpenBSD ne peut pas être attaqué par des exploits utilisant cette vulnérabilité.

Cette vulnérabilité se cache au grand jour depuis plus de 12 ans et affecte toutes les versions de pkexec depuis sa première version en mai 2009 (commit c8c3d83, "Add a pkexec(1) command").

Pourquoi est-elle si dangereuse ?

Il y a plusieurs raisons à cela:

  • Pkexec est installé par défaut sur toutes les principales distributions Linux (Ubuntu, Debian, Fedora, CentOS, Arch Linux et d'autres distributions sont
    probablement aussi exploitables).
  • Pkexec est vulnérable depuis sa création, en mai 2009 (commit c8c3d83, "Add a pkexec(1) command").
  • N'importe quel utilisateur local non privilégié peut exploiter cette vulnérabilité pour obtenir des privilèges complets de root.
  • Bien que cette vulnérabilité soit techniquement une corruption de mémoire, elle est exploitable instantanément, de manière fiable et indépendante de l'architecture.
  • Et elle est exploitable même si le démon polkit lui-même n'est pas en cours d'exécution.

Notons également que Red Hat évalue le PwnKit comme ayant un score CVSS (Common Vulnerability Scoring System) de 7.8. Ce score est élevé.

Comment corriger / atténuer la vulnérabilité ?

Si aucun correctifs ne sont disponibles pour votre système d'exploitation et donc qu'il vous est impossible d'appliquer une mise à jour qui viendrait corriger cette vulnérabilités (ce qui est probablement le cas au moment de publication de cet article), vous pouvez supprimer le bit SUID-bit de pkexec comme mesure d'atténuation temporaire ; par exemple :

chmod 0755 /usr/bin/pkexec

Restez prudent et attentif aux traces dans les journaux de vos systèmes. En général, il s'agira d'un message du type "The value for the SHELL variable was not found in the /etc/shells file" ou "The value for environment variable […] contains suspicious content.".

Mais attention un attaquant expérimenté peut réaliser un assaut PwnKit sans laisser de traces dans les journaux.

Démonstration de Qualys

Voici une vidéo, montrant l'exploitation de la vulnérabilité:


À vos patchs !