La vulnérabilité "Dirty Pipe" affecte le noyau Linux

Lundi, Max Kellermann, un chercheur en cybersécurité a publié les détails d'une vulnérabilité Linux qui permettrait à un attaquant d'écraser des données dans des fichiers arbitraires en lecture seule.

La vulnérabilité – CVE-2022-0847 – a été découverte en avril 2021, mais il lui a fallu plusieurs mois pour comprendre ce qui se passait réellement.

Max Kellermann explique que la vulnérabilité affecte le noyau Linux 5.8 et les versions ultérieures. Elle a néanmoins été corrigée dans les versions 5.16.11, 5.15.25 et 5.10.102.

« Tout a commencé il y a un an avec un ticket de support concernant des fichiers corrompus. Un client se plaignait que les journaux d'accès qu'il téléchargeait ne pouvaient pas être décompressés. Et effectivement, il y avait un fichier journal corrompu sur l'un des serveurs de journaux ; il pouvait être décompressé, mais gzip signalait une erreur CRC (Contrôle de redondance cyclique). Je ne pouvais pas expliquer pourquoi il était corrompu, mais j'ai supposé que le processus de fractionnement nocturne avait planté et avait laissé un fichier corrompu derrière lui. J'ai corrigé le CRC du fichier manuellement, j'ai fermé le ticket et j'ai vite oublié le problème », raconte Max Kellermann.

« Des mois plus tard, cela s'est reproduit, encore et encore. À chaque fois, le contenu du fichier semblait correct, seul le CRC à la fin du fichier était erroné. Maintenant, avec plusieurs fichiers corrompus, j'ai pu creuser plus profondément et j'ai trouvé un type de corruption surprenant. Un modèle est apparu. »

Une vulnérabilité exploitable

Max Kellermann poursuit en montrant comment il a découvert le problème et comment quelqu'un pourrait potentiellement l'exploiter. Il a d'abord supposé que le bug n'était exploitable que lorsqu'un processus privilégié écrivait le fichier, et que cela dépendait du timing. Mais il a découvert par la suite qu'il était possible d'écraser le cache de la page même en l'absence de rédacteurs, sans contrainte de timing, « à des positions (presque) arbitraires avec des données arbitraires ».

Pour exploiter la vulnérabilité, l'attaquant doit avoir les droits de lecture, le décalage ne doit pas être sur une limite de page, l'écriture ne peut pas traverser une limite de page et le fichier ne peut pas être redimensionné.

« Pour exploiter cette vulnérabilité, il faut : créer un tube, le remplir de données arbitraires (pour activer l'indicateur PIPE_BUF_FLAG_CAN_MERGE dans toutes les entrées de l'anneau), vider le tube (en laissant l'indicateur activé dans toutes les instances de struct pipe_buffer sur l'anneau struct pipe_inode_info), insérer les données du fichier cible (ouvert avec O_RDONLY) dans le tube juste avant le décalage cible et écrire des données arbitraires dans le tube », explique-t-il.

« Ces données écraseront la page du fichier en cache au lieu de créer une nouvelle structure anonyme pipe_buffer, car PIPE_BUF_FLAG_CAN_MERGE est défini. Pour rendre cette vulnérabilité plus intéressante, elle ne fonctionne pas seulement sans droits d'écriture, mais aussi avec des fichiers immuables, sur des snapshots btrfs en lecture seule et sur des montages en lecture seule (y compris les montages de CD-ROM). Cela est dû au fait que le cache de pages est toujours accessible en écriture (par le noyau), et que l'écriture sur un tube ne vérifie jamais les permissions. »

Similaire à Dirty Cow, mais plus facile à exploiter

Max Kellermann a également partagé son propre exploit de preuve de concept. Le rapport de bug, l'exploit et le correctif ont été envoyés à la Linux kernel security team par Max Kellermann le 20 février. Le bug a été reproduit sur le Google Pixel 6 et un rapport de bug a été envoyé à l'équipe de sécurité Android.

Linux a publié des correctifs (5.16.11, 5.15.25, 5.10.102) le 23 février et Google a intégré le correctif du bug dans le noyau Android le 24 février.

Max Kellermann et d'autres experts ont comparé la vulnérabilité à la CVE-2016-5195 "Dirty Cow". Précisant tout de même que la nouvelle est encore plus facile à exploiter.

Le danger de l'accès au root

Pour Mike Parkin, de Vulcan Cyber, tout exploit qui donne un accès de niveau root à un système Linux est problématique.

« Un attaquant qui obtient le niveau root prend le contrôle total du système cible et peut être en mesure de tirer parti de ce contrôle pour atteindre d'autres systèmes. Le facteur atténuant de cette vulnérabilité est qu'elle nécessite un accès local, ce qui réduit légèrement le risque », prévient Mike Parkin.

« L'escalade des privilèges jusqu'au root (famille POSIX) ou Admin (Windows) est souvent la première priorité d'un attaquant lorsqu'il accède à un système, car elle lui donne le contrôle total de la cible et peut l'aider à étendre son emprise à d'autres victimes. Cela n'a pas changé depuis des lustres et il est peu probable que cela change dans un avenir prévisible. »

Source : ZDNet.com