• Perspective
Publié le 29 avril 2022

Dirty-Pipe : La lumière au bout du tunnel

Introduction

Le 07 mars 2022, le chercheur en sécurité Max Kellermann a révélé une nouvelle vulnérabilité affectant le noyau linux, surnommée « Dirty-Pipe » (CVE-2022-0847). Cette vulnérabilité, par son nom, fait référence à la célèbre vulnérabilité « Dirty Cow » de 2016 qui affectait également le noyau Linux.

Qu’est-ce que Dirty-Pipe

Dirty-Pipe (CVE-2022-0847) est une vulnérabilité d'escalade de privilèges locaux dans le noyau Linux qui permet à un utilisateur local de contourner toutes les autorisations de fichiers. Par conséquent, via cette vulnérabilité, un utilisateur sans privilèges pourrait potentiellement :

  • Modifier et/ou écraser arbitrairement des fichiers en lecture seule
  • Disposer d’un shell à hauts privilèges

La vulnérabilité affecte les noyaux Linux qui sont dans une version supérieure à 5.8.

Comment cela fonctionne

La vulnérabilité provient d’une gestion défaillante du « Pipe » Unix permettant à un attaquant d’écraser les fichiers du système avec des données arbitraires et donc de modifier des fichiers sensibles, notamment ceux contenant des mots de passe.

Pour l’imager, le Pipe « | » est un « tube » avec une extrémité lecture et une extrémité écriture. On peut donc traiter une donnée, puis l'écrire dans le tube afin de la faire lire par un autre processus.

Comme une image vaut mieux que mille mots, voici un exemple dans lequel un message est « pipé » dans une commande qui remplace un mot par un autre :

Le Pipe prend la sortie d’un processus pour l’écrire dans l’entrée d’un autre processus. Mais ce qui importe, c’est qu’il existe un drapeau de Pipe nommé « PIPE_BUF_FLAG_CAN_MERGE ». Lorsqu’il est défini, il notifie au noyau que les changements qui sont écrits dans la page de cache doivent être réécrits dans le fichier source.

Pour pouvoir exploiter Dirty-Pipe, l’utilisateur doit simplement disposer d’une autorisation de lecture sur le fichier qu’il souhaite écraser :

  • L’exploit commence par lire le fichier cible afin qu’il soit mis en cache.
  • Il crée ensuite un tube avec le drapeau PIPE_BUF_FLAG_CAN_MERGE activé.
  • L’exploit utilise l’appel système splice() pour faire pointer le tube vers l’emplacement du cache où sont situées les données souhaitées du fichier.
  • Des données arbitraires sont écrites dans le tube. Ces données écrasent la page du fichier mis en cache et parce que PIPE_BUF_FLAG_CAN_MERGE est défini, ces mêmes données écrasent finalement le fichier sur le disque.

« Méfait accompli. »

Utilisation

Il existe de nombreux exploits publics pour cette vulnérabilité se basant, principalement, sur les 2 méthodologies suivantes :

  • Modifier/écraser des fichiers en lecture seule
  • Détourner les droits d’utilisation d’exécutables

Comment s’en protéger

Il n’y a pas d’autres remédiations que de mettre à jour le noyau.

La vulnérabilité a été patchée pour les noyaux Linux en version :

  • 5.16.11
  • 5.15.25
  • 5.10.102

Conclusion

Sur un noyau Linux faillible, Dirty-Pipe permet d’être root avec une simplicité enfantine. C’est pourquoi, si ce n’est pas déjà fait, il est fortement recommandé de mettre à niveau Linux vers l’une des versions 5.16.11, 5.15.25, 5.10.102 ou ultérieur.

Références

https://dirtypipe.cm4all.com/

https://github.com/AlexisAhmed/CVE-2022-0847-DirtyPipe-Exploits/

https://www.it-connect.fr/dirty-pipe-une-faille-critique-qui-touche-le-noyau-linux/

https://www.silicon.fr/dirty-pipe-faille-linux-critique-433686.html/

https://www.hackthebox.com/blog/Dirty-Pipe-Explained-CVE-2022-0847/

https://github.com/torvalds/linux/commit/f6dd975583bd8ce088400648fd9819e4691c8958

https://www.youtube.com/watch?v=NHcCgPtibw8

Article rédigé par
La Minute Cyber