Hi Web, création de sites internet en Suisse
à Yverdon-les-Bains
Téléphone
078 914 86 22
E-mail
info@hiweb.ch

Hack CVE-2022-0847 sur le noyau Linux

Hack CVE-2022-0847 sur le noyau Linux

Une énième vulnérabilité critique affectant le noyau Linux a été découverte récemment, par un chercheur en sécurité. Cette vulnérabilité nommée “DirtyPipe” référencé “CVE-2022-0847”, presque similaire à “DirtyCow”, permet à un attaquant possédant des permissions de lecture, de compromettre l’intégrité du système.


Un autre bogue critique du noyau “Dirty Pipe” a été découvert et affecte toutes les machines Linux exécutant la version du noyau depuis la 5.8. Cette vulnérabilité permet d’écraser des données dans des fichiers en lecture seule arbitraires, ce qui entraîne une élévation des privilèges car des processus non privilégiés peuvent injecter du code dans les processus racine.

La  vulnérabilité Dirty Pipe , qui a été suivie sous le nom de  CVE-2022-0847, est en quelque sorte similaire au méchant bogue populaire de Linux appelé “Dirty Cow”, mais est plus facile à exploiter. La vulnérabilité a été découverte par un chercheur en sécurité nommé  Max Kellermann , de l’hébergement CM4all.

Lorsque Kellermann reçoit les tickets d’assistance concernant les fichiers corrompus de l’un de ses clients d’hébergement, il a commencé à résoudre ce problème. En examinant le problème, il a découvert qu’il y avait un fichier journal corrompu sur l’un des serveurs de journalisation, il pouvait être décompressé, mais gzip a signalé une erreur CRC. “Je ne pouvais pas expliquer pourquoi il était corrompu, mais j’ai supposé que le processus de division nocturne s’était écrasé et avait laissé un fichier corrompu. J’ai corrigé le CRC du fichier manuellement, fermé le ticket et rapidement oublié le problème.” Kellermann a écrit sur blogpost.

Plus tard, il a trouvé plusieurs problèmes similaires sur leur serveur. A chaque fois, le contenu du fichier semblait correct, seul le CRC à la fin du fichier était erroné. Après avoir approfondi le problème, il a tiré une conclusion : il doit s’agir d’un bogue du noyau.

En examinant le code du noyau et quelques vérifications rapides, il a confirmé que le bogue réside dans les tuyaux du noyau qui affecte Linux 5.10 (Debian Bullseye) mais pas Linux 4.19 (Debian Buster).

Un tube est un outil de communication unidirectionnelle inter-processus. Une extrémité sert à y insérer des données, l’autre extrémité peut extraire ces données. Le noyau Linux implémente cela par un anneau de struct pipe_buffer, chacun faisant référence à une page. La première écriture dans un tube alloue une page (espace pour 4 Ko de données). Si l’écriture la plus récente ne remplit pas complètement la page, l’écriture suivante peut s’ajouter à cette page existante au lieu d’en allouer une nouvelle. C’est ainsi que fonctionnent les tampons de canal “anonymes” (anon_pipe_buf_ops).

Exploitation de  la vulnérabilité de Dirty Pipe ( CVE-2022-0847)

Dans ses recherches, Kellermann a appris qu’il est possible d’écraser le cache de pages même en l’absence d’écrivains (écrivains utilisés pour la bissectrice), sans contraintes de temps, à des positions (presque) arbitraires avec des données arbitraires. Mais il y a quelques limitations qui sont :

  • l’attaquant doit avoir les permissions de lecture (car il a besoin de splice() une page dans un tube)
  • le décalage ne doit pas être sur une limite de page (car au moins un octet de cette page doit avoir été épissé dans le tube)
  • l’écriture ne peut pas franchir une limite de page (car un nouveau tampon anonyme serait créé pour le reste)
  • le fichier ne peut pas être redimensionné (car le tube a sa propre gestion du remplissage de page et n’indique pas au cache de page la quantité de données ajoutées)
Pour exploiter cette vulnérabilité, vous devez :
  1. Créez un tuyau.
  2. Remplissez le tube avec des données arbitraires (pour définir l’indicateur PIPE_BUF_FLAG_CAN_MERGE dans toutes les entrées de l’anneau).
  3. Videz le tuyau (en laissant l’indicateur défini dans toutes les instances de struct pipe_buffer sur l’anneau de struct pipe_inode_info).
  4. Épisser les données du fichier cible (ouvert avec O_RDONLY) dans le tuyau juste avant le décalage cible.
  5. Écrivez des données arbitraires dans le tube ; ces données écraseront la page du fichier mis 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 fonctionne non seulement sans autorisations d’écriture, mais également avec des fichiers immuables, sur des instantanés btrfs en lecture seule et sur des montages en lecture seule (y compris les montages sur CD-ROM). En effet, le cache de page est toujours accessible en écriture (par le noyau) et l’écriture dans un canal ne vérifie jamais les autorisations.
L’ exploit de preuve de concept pour la vulnérabilité Dirty Pipe (CVE-2022-0847) causée par une variable “pipe_buffer.flags” non initialisée a également été publié. Il montre comment écraser tout contenu de fichier dans le cache de page, même si le fichier n’est pas autorisé à être écrit, immuable ou sur un montage en lecture seule.
La vulnérabilité a été corrigée dans Linux 5.16.11, 5.15.25 et 5.10.102. Comme la vulnérabilité est facile à exploiter et que PoC a déjà été publié, nous recommandons fortement à tout le monde (en particulier à tous les administrateurs de serveur Web Linux) de mettre à jour le serveur Linux.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *