AccueilActualités informatiqueLinux : Dirty Pipe donne des droits root

Linux : Dirty Pipe donne des droits root

Une erreur dans le noyau permet aux pirates de modifier dans un système Linux des fichiers auxquels ils ne devraient pas avoir accès. Ils pourraient ainsi obtenir des droits d’accès root et mettre ensuite le système sur écoute de manière durable. Le problème concerne tous les systèmes utilisant Linux à partir de la version 5.8, y compris les smartphones Android. Entre-temps, il existe des versions du noyau qui éliminent le défaut appelé Dirty Pipe.

Ce bug a été découvert par le hacker et développeur de logiciels Max Kellermann, qui recevait régulièrement des tickets de support concernant des fichiers d’archive cassés. Il s’est penché sur la question et a découvert qu’il s’agissait en fait d’une erreur dans la gestion des « pipes » du noyau Linux. Dans des situations particulières, les sorties de différentes sources étaient alors mélangées. Pour simplifier, un processus non privilégié d’un utilisateur normal peut ainsi introduire des données dans la sortie d’un processus disposant de droits plus élevés.

Les pipes sont un mécanisme de communication unidirectionnelle entre processus, particulièrement populaire sur les systèmes Unix. La particularité est que lors de l’utilisation de splice() (en français « boucler »), il n’est pas nécessaire de copier des données en mémoire, ce qui prendrait du temps. Au lieu de cela, le destinataire reçoit directement des références aux zones de mémoire déjà créées pour l’expéditeur (« zero copy »).

Le problème se pose lorsque plusieurs expéditeurs alimentent un pipe avec des données ; la gestion de ces références et zones de mémoire et des droits qui y sont liés est du ressort du noyau. Si les données épissées ne correspondent pas exactement à des pages de mémoire entières (une page de mémoire a une taille de 4 ko), il arrive que celui-ci soit tellement désorganisé que des données erronées finissent par arriver dans le canal de sortie.

Kellermann démontre cette faille appelée Dirty Pipe (CVE-2022-0847) avec un petit programme de démonstration. Elle permettrait par exemple à un utilisateur normal d’écraser l’entrée de l’utilisateur root dans /etc/passwd et d’obtenir ainsi l’accès à ses droits. Dirty Pipe contourne également la protection des systèmes de fichiers en lecture seule, par exemple pour les instantanés BTRFS ou les CD-ROM montés (c’est-à-dire leur image dans le cache du noyau), explique Kellermann dans son analyse détaillée The Dirty Pipe Vulnerability.

Après avoir découvert la cause du bogue, Kellermann a informé l’équipe du noyau Linux ainsi que les distributeurs. En accord avec Linus Torvalds, il a ensuite présenté le 12 février, sans autre commentaire, un correctif minimal qui a éliminé le bogue. Les noyaux Linux 5.16.11, 5.15.25 et 5.10.102 publiés en février éliminent ainsi le problème et Google a également intégré le correctif dans le noyau Android. C’est maintenant aux distributeurs et aux fabricants de matériel de veiller à ce que les systèmes vulnérables soient mis à jour.

Mise à jour 7 mars 2022, 19:20: Suite à une remarque de Max Kellermann, correction du fonctionnement des pipes et de splice(), ajout de la remarque sur les images de CD-ROM et précision sur l’exploit root.

Plus d'articles