Une importante vulnérabilité de Linux a été découverte : Pwnkit

Après qu’un vrai problème Linux – le bug dans le programme fs/fs_context.c du noyau Linux – a été trouvé et corrigé, un nouveau problème de sécurité a été découvert.

Cette fois, la société de sécurité Qualys a découvert une vulnérabilité de corruption de mémoire dans le programme pkexec de polkit, identifié sous le nom de CVE-2021-4034.

Polkit, anciennement connu sous le nom de PolicyKit, est un programme SUID-root systemd. Il est installé par défaut dans toutes les principales distributions Linux.

A quel point ce bug est-il dangereux ?

Il est très dangereux. Cette vulnérabilité est facile à exploiter. Et, avec elle, n’importe quel utilisateur ordinaire peut obtenir les privilèges root sur un ordinateur vulnérable en exploitant cette vulnérabilité dans sa configuration par défaut. Comme Qualys l’a écrit dans sa description du problème, « cette vulnérabilité est le rêve devenu réalité d’un attaquant ».

Pourquoi est-ce si grave ?

Comptons les raisons :

  • Pkexec est installé par défaut sur toutes les principales distributions Linux.
  • Qualys a exploité le bug dans Ubuntu, Debian, Fedora, et CentOS dans ses tests, et ils sont sûrs que d’autres distributions sont également exploitables.
  • Pkexec est vulnérable depuis sa création en mai 2009 (commit c8c3d83, « Add a pkexec(1) command »).
  • Un utilisateur local non privilégié peut exploiter cette vulnérabilité pour obtenir les privilèges complets de root.
  • Bien que cette vulnérabilité soit techniquement une corruption de mémoire, elle est exploitable instantanément et de manière fiable, indépendamment de l’architecture.
  • Et enfin, elle est exploitable même si le démon polkit lui-même n’est pas en cours d’exécution.

Menace pour les systèmes Unix

Si cette vulnérabilité est si dangereuse, c’est parce que le programme lui-même est puissant ; c’est un composant destiné à contrôler les privilèges de l’ensemble du système dans les systèmes d’exploitation de type Unix.

Si on sait que Linux peut être attaqué, Solaris et d’autres systèmes Unix peuvent également être vulnérables. On sait cependant qu’OpenBSD ne peut pas être attaqué par des exploits utilisant cette vulnérabilité.

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

Une vulnérabilité cachée depuis plus de 12 ans

Lorsqu’il est utilisé correctement, Polkit fournit un moyen 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 root.

En d’autres termes, pkexec est assez similaire à la commande sudo. En effet, les développeurs Debian le décrivent comme « le sudo de systemd ».

Cette vulnérabilité, qui se cache à la vue de tous depuis plus de 12 ans, est un problème dans la façon dont pkexec lit les variables environnementales. La version courte, selon Qualys, est la suivante : « si notre PATH est « PATH=nom=. », et si le répertoire « nom=. » existe et contient un fichier exécutable nommé « valeur », alors un pointeur vers la chaîne « nom=./valeur » est écrit hors limites dans envp[0] ».

Une faille facile à exploiter

Bien que Qualys ne publie pas de programme de démonstration, la société est certaine que des exploits ne tarderont pas à voir le jour. Franchement, il n’est pas si difficile de créer une attaque PwnKit.

C’est pourquoi vous devriez obtenir et appliquer un correctif aussi rapidement que possible auprès de votre distributeur Linux. Si aucun correctif n’est disponible pour votre système d’exploitation, vous pouvez supprimer le bit SUID de pkexec comme mesure d’atténuation temporaire. Par exemple, cette commande shell en mode root permet de limiter les attaques : # chmod 0755 /usr/bin/pkexec.

Si votre système a fait l’objet d’une attaque, voyez s’il y a des traces dans les journaux. En général, il s’agira d’un message du type « la valeur de la variable SHELL n’a pas été trouvée dans le fichier /etc/shells » ou « la valeur de la variable d’environnement […] contient un contenu suspect ».

Mais un attaquant sophistiqué peut réaliser une attaque sur PwnKit sans laisser de traces dans les journaux.

Source : ZDNet.com