Une vulnérabilité Linux qui affecte tous les noyaux depuis le 5.8, y compris Android, a été révélée par le chercheur en sécurité Max Kellerman. Connu sous le nom de Dirty Pipe, il permet l’écrasement de données dans des fichiers en lecture seule et peut conduire à une élévation de privilèges via l’injection de code dans les processus racine.
The Dirty Pipe Vulnerability : Allows Write Access with Root Privileges (affecte toutes les machines Linux exécutant la version du noyau depuis la 5.8) : https://t.co/lsQhB0Zifs PoC : https://t.co/3zVlNRYpHW8 mars 2022
Correctement appelé CVE-2022-0847, Dirty Pipe est similaire à la vulnérabilité Dirty COW de 2016 qui ciblait le mécanisme de copie sur écriture (COW) dans le sous-système de mémoire du noyau Linux. Il transformait un mappage en lecture seule en un mappage inscriptible et pouvait être combiné avec d’autres exploits pour obtenir un accès root.
Dirty Pipe, en revanche, est plus facile à exploiter, avec des preuves de concept comme celle du développeur du noyau Binni Shah rapidement concocté et posté sur Twitter, alors que le chercheur en sécurité Phith0n amélioré le processus pour quitter le compte root sans mot de passe.
La partie ‘pipe’ du nom fait référence à un outil de communication unidirectionnelle inter-processus, dont la première écriture lui alloue une page (4ko) de mémoire. Si vous utilisez splice() pour ajouter des données d’un fichier au tube, elles sont écrites dans un cache de page, et à partir de là, vous pouvez écraser le cache simplement en écrivant de nouvelles données, correctement préparées, dans le tube.
Sous Linux, « sale » signifie qu’une page attend une écriture sur le disque et que le cache de la page n’écrit pas sur le disque à moins qu’une page ne soit sale. L’écrasement de ses données ne rend pas une page sale, elle reste donc dans le cache mémoire et vos données d’exploit correctement préparées peuvent y être redirigées. L’écriture dans un tube ne vérifie pas les autorisations, donc n’importe qui peut le faire, permettant potentiellement une élévation des privilèges qui disparaît au redémarrage, car il n’a jamais été écrit sur le disque.
« Pour rendre cette vulnérabilité plus intéressante », écrit Kellerman, « 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 la page est toujours accessible en écriture (par le noyau) et l’écriture dans un canal ne vérifie jamais les autorisations.
Kellerman a découvert la vulnérabilité après avoir enquêté sur un bogue qui corrompait les journaux d’accès au serveur Web d’un client. Bien que simple à exploiter, la vulnérabilité nécessite un accès physique à la machine enracinée, ce qui la rend plus difficile à déployer que celles diffusées sur les réseaux ou via des logiciels malveillants.
Kellerman a envoyé un rapport de bogue (et un correctif) à l’équipe de sécurité du noyau Linux en février, et des correctifs ont été publiés trois jours plus tard. Google a ajouté le correctif au noyau Android à peu près au même moment. La vulnérabilité a été corrigée dans Linux 5.16.11, 5.15.25 et 5.10.102.