Un nouvel exploit du noyau Linux baptisé Dirty Cred a été révélé lors de la conférence de sécurité Black Hat de la semaine dernière.
Zhenpeng Lin, doctorant, et une équipe de chercheurs ont travaillé sur une approche alternative à la célèbre vulnérabilité Dirty Pipe qui affectait les versions 8 et ultérieures du noyau Linux.
Dirty Pipe est une faille majeure qui permet aux attaquants d’élever les comptes disposant des privilèges les plus faibles au niveau maximal (root), en exploitant la manière dont le noyau utilise les tubes pour transmettre des données. Les attaquants peuvent s’en servir pour modifier des fichiers système et injecter du code arbitraire qui sera exécuté avec les privilèges root sur les machines vulnérables.
L’équipe de Lin a découvert une méthode permettant de remplacer les identifiants Linux sur les systèmes vulnérables à une vulnérabilité déjà signalée (CVE-2021-4154) et à une nouvelle vulnérabilité (CVE-2022-2588), et elle prévoit d’ajouter d’autres CVE compatibles à l’avenir. Une POC publique (preuve de concept) est disponible sur GitHub et offre une défense efficace contre l’attaque.
Les chercheurs ont décrit leur approche comme une méthode générique applicable aux conteneurs (contrairement à Dirty Pipe) et à Android, qui « permettrait à différentes failles de se comporter comme Dirty Pipe ». En effet, l’exploit généré « peut fonctionner sur différents noyaux et architectures sans modification du code ».
À lire également : Le pipeline CI/CD, un risque majeur pour la chaîne d’approvisionnement logicielle : les chercheurs du Black Hat
Fonctionnement de Dirty Cred
Lin a publié une démonstration sur Twitter montrant comment cette approche peut servir à élever les privilèges d’un utilisateur peu privilégié sur deux systèmes différents, tels que Centos 8 et Ubuntu, en utilisant le même code d’exploit :
En coulisses, l’attaque repose sur une corruption du tas du noyau. Comme les identifiants privilégiés ne sont pas isolés des identifiants non privilégiés, un attaquant peut tenter de les échanger.
Il existe deux grands types d’identifiants :
- identifiants de tâche
- identifiants de fichiers ouverts
Pour simplifier, disons que le noyau utilise deux types d’objets : « struct cred » et « struct file ». Ces objets sont stockés dans des caches dédiés. Le premier contient les identifiants de tâche, c’est-à-dire les informations relatives aux privilèges, aux capacités et aux autorisations des processus.
Toute attaque parvenant à modifier ces données peut entraîner une élévation de privilèges. Dirty Cred libère un identifiant non privilégié en cours d’utilisation afin d’allouer un identifiant privilégié dans l’emplacement mémoire libéré, puis de fonctionner en tant qu’utilisateur privilégié :
L’attaque n’est toutefois pas parfaite, car elle doit attendre qu’un utilisateur privilégié alloue des identifiants de tâche, mais il devrait par exemple être possible de déclencher des processus dotés de SUID root.
L’approche est sensiblement la même avec les identifiants de fichiers ouverts et les objets struct file. L’attaque libère un fichier après les vérifications d’autorisation, mais avant l’écriture du fichier sur le disque, ce qui devrait permettre à l’attaquant d’allouer un objet fichier en lecture seule dans l’emplacement mémoire et de fonctionner en tant qu’utilisateur privilégié :
La dernière étape visant à stabiliser l’exploit de fichier n’est pas la plus facile à réaliser. L’échange doit s’effectuer entre les vérifications d’autorisation et l’écriture sur le disque, ce qui représente une fenêtre temporelle très étroite.
Les chercheurs ont mis en avant plusieurs solutions consistant à suspendre l’exécution du noyau (par exemple avec FUSE ou un verrouillage de fichier) afin d’élargir cette fenêtre temporelle.
Découvrez les meilleurs logiciels de gestion des accès privilégiés (PAM)
Comment se protéger contre les attaques Dirty Cred
Il convient de noter que la POC est toujours en cours de développement, même si elle fonctionne déjà dans certaines conditions, notamment avec une vulnérabilité spécifique. CVE-2021-4154 a été corrigée dans le noyau Linux, mais les chercheurs indiquent que « l’exploit fonctionne sur la plupart des noyaux Centos 8 ultérieurs à linux-4.18.0-305.el8, ainsi que sur la plupart des noyaux Ubuntu 20 ultérieurs à 5.4.0-87.98 et 5.11.0-37.41 ».
Comme les objets sont isolés en fonction de leur type et non de leurs privilèges, les chercheurs recommandent d’isoler les identifiants privilégiés des identifiants non privilégiés au moyen de la mémoire virtuelle afin d’empêcher les attaques inter-caches.
Le correctif est disponible sur GitHub et consiste à isoler les identifiants de tâche à l’aide de vmalloc (mémoire virtuellement contiguë).
À lire ensuite : les meilleures solutions de sécurité Zero Trust





