Skip to main content

Analyse de l’exploit d’élévation de privilèges locale PwnKit

Écrit par

Kyle Suero

blog feature security alert purple

29 janvier 2022

0 minutes de lecture

Quel est le point commun entre les vulnérabilités Linux et les catastrophes naturelles ? Un phénomène apparemment dormant peut soudain se réveiller et révéler ce qui se passe sous la surface. Il y a quelques jours, un chercheur en sécurité a publié une vulnérabilité de gravité élevée baptisée PwnKit, qui touche la plupart des grandes distributions Linux. Le plus inquiétant ? Elle existe depuis mai 2009.

Polkit est un composant qui contrôle les privilèges dans les systèmes d’exploitation de type Unix. Il est inclus par défaut dans la plupart des grandes distributions Linux. La commande pkexec, fournie avec Polkit, permet d’exécuter des commandes avec des privilèges élevés. Elle a été surnommée le sudo de systemd.

Dans ce cas, la vulnérabilité de Polkit n’est plus une menace dormante. Ce composant courant des systèmes d’exploitation basés sur Linux est affecté par cette vulnérabilité persistante depuis sa création, en 2009. D’abord utilisé dans le système d’exploitation Fedora, ce mécanisme de contrôle des stratégies s’est depuis largement répandu dans divers systèmes d’exploitation.

Cette vulnérabilité permet à un attaquant opérant en local avec un compte sans privilèges de corrompre la mémoire à l’aide d’un dépassement de tampon. Comme l’équipe de Qualys l’a démontré, ce dépassement peut ensuite être exploité pour obtenir tous les privilèges root. En 2013, Ryan Mallon a signalé cette vulnérabilité et soumis un correctif aux responsables de la maintenance. Mallon n’a pas réussi à trouver de moyen d’exploiter la vulnérabilité et le correctif n’a jamais été appliqué.

L’origine de ce défaut se trouve dans le traitement des arguments de ligne de commande. Dans les programmes C sous Linux, le premier argument (argv[0]) correspond généralement au nom de l’exécutable. Mais il est possible de spécifier une liste vide, sans le nom de l’exécutable, en appelant la fonction execve. Dans ce cas, si le code part du principe que argv[0] existe toujours, cela peut entraîner des vulnérabilités de corruption de la mémoire. Ce problème sous-jacent de traitement des arguments existe dans d’autres binaires, mais pkexec est un cas particulier puisqu’il est SUID et dispose d’un ensemble spécial d’autorisations de fichier qui lui permet de s’exécuter en tant que propriétaire initial du fichier, et non en tant qu’utilisateur qui l’a lancé.  

Nous n’entrerons pas dans tous les détails ici — ils sont bien documentés dans la divulgation d’origine — mais lorsque la commande pkexec ne reçoit aucun argument, la liste d’arguments est vide, ce qui entraîne une corruption de la mémoire et permet aux attaquants d’obtenir tous les privilèges root sur l’hôte cible.

Corrigez votre système pour vous protéger contre PwnKit

Les exploits de pwnkit sont extrêmement simples et sont désormais utilisés dans la nature. Heureusement, les correctifs ont été mis à disposition très rapidement. Veillez donc à installer immédiatement toutes les mises à jour de votre système d’exploitation !

Si vous ne pouvez pas installer les mises à jour du système d’exploitation, vous pouvez appliquer une solution de contournement adaptée en supprimant manuellement le bit SUID de pkexec à l’aide de la commande chmod :

chmod 0755 /usr/bin/pkexec

Cet exploit nous rappelle utilement que des vulnérabilités graves peuvent passer inaperçues pendant très longtemps, même dans des applications open source largement utilisées dont le code source a été examiné par de nombreuses personnes pendant de longues années.

Maintenir vos systèmes à jour avec les correctifs de sécurité est une pratique essentielle pour atténuer les menaces. Si vous utilisez des conteneurs pour déployer vos logiciels, pensez à déployer des images mises à jour intégrant ces correctifs du système d’exploitation. Si vous utilisez Snyk Container, vous pouvez facilement détecter (et corriger) des vulnérabilités comme PwnKit dans vos conteneurs. Snyk vous orientera vers des images de base mises à jour qui corrigent le problème, ou vers un correctif que vous pourrez ajouter vous-même.

La sécurité des conteneurs, pensée pour les développeurs

Snyk détecte et corrige automatiquement les vulnérabilités dans les images de conteneurs et les workloads Kubernetes.

Systèmes d’exploitation vulnérables

RedHat

  • Red Hat Enterprise Linux 6

  • Red Hat Enterprise Linux 7

  • Red Hat Enterprise Linux 8

  • Red Hat Virtualization 4

Ubuntu :

  • Ubuntu 21.10

  • Ubuntu 20.04

  • Ubuntu 18.04

  • Ubuntu 16.04

  • Ubuntu 14.04

Suse :

  • HPE Helion Openstack 8

  • SUSE CaaS Platform 4.0

  • SUSE Enterprise Storage 6

  • SUSE Enterprise Storage 7

  • SUSE Linux Enterprise High Performance Computing 15

  • SUSE Linux Enterprise Micro 5

  • SUSE Linux Enterprise Module for Basesystem 15

  • SUSE Linux Enterprise Server 12

  • SUSE Linux Enterprise Server 15

  • SUSE Linux Enterprise Server for SAP Applications 12

  • SUSE Linux Enterprise Server for SAP Applications 15

  • SUSE Linux Enterprise Software Development Kit 12

  • SUSE Manager Proxy 4

  • SUSE OpenStack Cloud 8

  • SUSE OpenStack Cloud 9

  • SUSE OpenStack Cloud Crowbar 8

  • SUSE OpenStack Cloud Crowbar 9

  • openSUSE Leap 15

Remarque : SUSE Linux Enterprise 11 n’est pas concerné, car il utilise l’ancienne génération de PolicyKit-1.

Avis de sécurité