ClickCease Encore une autre vulnérabilité Futex trouvée dans le noyau (CVE-2021-3347) - TuxCare

Rejoignez notre populaire bulletin d'information

Rejoignez 4 500+ professionnels de Linux et de l'Open Source !

2 fois par mois. Pas de spam.

Encore une autre vulnérabilité Futex trouvée dans le noyau (CVE-2021-3347)

Le 4 février 2021 - L'équipe de relations publiques de TuxCare

Encore une autre vulnérabilité Futex trouvée dans le noyau (CVE-2021-3347)

Les vulnérabilités de Linux s'accumulent. D'année en année. On pourrait dire que c'est inévitable, étant donné la complexité de l'environnement informatique actuel. Il est néanmoins frustrant de constater que les mêmes éléments critiques du noyau du système d'exploitation Linux continuent de faire surface en tant que zone vulnérable.

Jusqu'en 2020 inclus, il y a quatorze CVEs listés qui couvrent l'implémentation de Linux futex. Il est vrai que les futex sont formidablement complexes. Bien que les futex fournissent des fonctionnalités essentielles, les futex ne sont souvent pas clairement compris, et certains pourraient dire que les vulnérabilités sont inévitables étant donné la complexité de l'implémentation des futex.

Malheureusement, à la fin du mois de janvier 2021, une autre vulnérabilité du noyau Linux impliquant une mauvaise manipulation des futex est apparue. Pire encore, elle implique une dangereuse vulnérabilité de type "use-after-free".

 

Dans cet article, nous expliquons pourquoi le noyau Linux possède un appel système futex et pourquoi la complexité des implémentations futex peut conduire à des vulnérabilités. Vous en saurez également plus sur les vulnérabilités de type "use-after-free" et sur les raisons pour lesquelles elles sont si dangereuses.

Nous aborderons ce que nous savons des caractéristiques uniques de cette nouvelle vulnérabilité - et ce que votre organisation peut faire pour s'en protéger, ainsi que des vulnérabilités du noyau Linux en général.

 

Contenu

  1. Introduction aux futex

  2. Alors, qu'est-ce qu'un futex ?

  3. Le PI-Futex

  4. Une longue histoire d'exploits futex

  5. Comprendre les vulnérabilités de type "use-after-free

  6. Ce que nous savons de la nouvelle vulnérabilité du futex

  7. L'impact potentiel de la dernière vulnérabilité de futex

  8. Se protéger contre les exploits de futex - et autres vulnérabilités du noyau

  9. Conclusion

 

 

Introduction aux futex

Introduction aux futex

 

Pour comprendre pourquoi la dernière vulnérabilité de Linux est si critique, nous devons d'abord comprendre comment fonctionnent les futex.

L'utilisation d'un futex, et la vulnérabilité créée par l'utilisation abusive d'un futex, implique des capacités de bas niveau du système d'exploitation qui sont utilisées pour aider à coordonner les processus dans une application, en particulier lorsqu'une application doit coordonner des tâches interdépendantes qui ont des priorités différentes.

 

Alors, qu'est-ce qu'un futex ?

Alors, qu'est-ce qu'un futex ?

 

Les tâches simultanées nécessitent souvent le contrôle des mêmes ressources, telles que les variables, mais elles le font à des moments différents et à un rythme différent. Le système d'exploitation doit coordonner ce contrôle sur les ressources. Avant l'introduction des futex dans le noyau Linux en 2003, des appels système étaient nécessaires pour verrouiller et déverrouiller les ressources partagées.

Cependant, les appels système sont relativement gourmands en ressources processeur. Un futex (abréviation de "fast userspace mutex") offre une alternative au verrouillage et au déverrouillage constants d'une ressource via les appels système. Au lieu de cela, un futex fournit un moyen efficace en termes de ressources pour les processus de partager un verrou sur une variable. Les futex sont complexes, et une explication exacte dépasse le cadre de cet article. Vous pouvez en lire un peu plus dans l'article de Wikipedia ici.

 

Le Pi-Futex

Le PI-futex

 

Les Futex ont évolué avec le temps pour s'adapter à un environnement informatique changeant. L'une de ces évolutions est l'introduction de ce que l'on appelle un héritage de priorité ou PI-futex.

Pourquoi avons-nous besoin d'un PI-futex ? Dans l'architecture futex standard, le système d'exploitation peut avoir du mal à garantir qu'une tâche à haute priorité bénéficie d'une exécution déterministe lorsque cette tâche à haute priorité partage un verrou avec une tâche à basse priorité.

Prenons l'exemple concret d'un lecteur multimédia. Tout d'abord, le lecteur multimédia doit veiller à ce que les médias audio ou vidéo soient acheminés par votre ordinateur en temps réel, sans hoquet ni perturbation. Il s'agit d'une tâche hautement prioritaire. Les utilisateurs seront rapidement frustrés si les médias ne sont pas lus sans heurts.

Dans le même temps, le lecteur multimédia doit gérer d'autres tâches dont la priorité est moyenne ou faible : pensez aux commandes du lecteur, aux pochettes d'album et aux recommandations, par exemple. Jongler avec ces opérations sans affecter l'expérience de l'utilisateur peut être un défi pour les programmeurs, car il y a des éléments communs impliqués - tous progressant à des vitesses différentes.

Il existe d'innombrables autres situations où une application doit gérer une variété de tâches avec des priorités différentes, mais impliquant souvent les mêmes données. Par exemple, un serveur web qui traite des requêtes simultanées d'utilisateurs du monde entier.

Un PI-futex est donc un futex spécialement conçu qui permet au système d'exploitation de mettre en œuvre des verrous partagés, tout en garantissant simultanément que les instructions ayant des priorités différentes sont exécutées en temps voulu.

 

Une longue histoire d'exploits futex

Une longue histoire d'exploits futex

 

La complexité des PI-futexes devrait vous donner un aperçu de la raison pour laquelle la manipulation des futexes peut relativement facilement conduire à des problèmes de sécurité. Dans l'ensemble, les systèmes à noyaux multiples exacerbent les problèmes liés aux futex, car les programmeurs peuvent avoir du mal à gérer la complexité des futex, et donc appliquer une programmation concurrente mal implémentée qui ouvre la porte aux exploits.

Il n'est donc pas surprenant qu'il existe déjà 14 vulnérabilités futex connues dans le noyau Linux. La première, CVE-2005-0937a été signalée en 2005. L'une de ces vulnérabilités a fait l'objet d'une grande couverture médiatique car elle a conduit à la possibilité d'une attaque par escalade de privilèges dans Android qui permettait aux utilisateurs de créer un compte root sur les téléphones Android en utilisant simplement un navigateur web..

Appelée l'exploit Towelroot, la vulnérabilité a été attribuée à CVE-2014-3153. L'exploit tourne autour d'un bogue dans l'implémentation des futex, et plus précisément dans la fonctionnalité de mise en file d'attente des futex. Tout comme la dernière vulnérabilité, Towelroot implique également des PI-futex.

En surchargeant la file d'attente futex, un pirate peut surcharger Android, le laissant dans un état où il pense que l'application active doit être root. Cela ouvre la porte à d'autres exploits. La vulnérabilité s'applique au-delà d'Android pour inclure de nombreux systèmes d'exploitation basés sur Linux.

 

Comprendre les vulnérabilités de type "use-after-free

Comprendre les vulnérabilités de type "use-after-free

 

Au cœur du dernier exploit Linux futex se trouve une vulnérabilité appelée use-after-free ou UAF. Avant d'examiner l'exploit lui-même, voyons en quoi consiste une vulnérabilité UAF.

Le scénario "user-after-free" se produit lorsqu'une application tente d'accéder à un élément de la mémoire alors que cet élément a déjà été libéré.

Les scénarios de l'UAF varient, mais un exemple peut être celui où un pointeur dans un programme pointe vers un ensemble de données dans la mémoire dynamique qui a déjà été supprimé. Normalement, le pointeur devrait être effacé pour refléter les données supprimées. Cependant, il arrive qu'en raison d'erreurs de programmation, le pointeur continue d'exister et renvoie à une mémoire de programmation vide. C'est ce qu'on appelle un pointeur flottant.

Un pointeur qui pendouille peut entraîner la corruption de données et le plantage du programme. Les pointeurs qui pendent et les UAFs dans le large peuvent être exploités par des pirates pour exécuter un code arbitraire et malveillant.

Les vulnérabilités de type "Use-after-free" sont relativement courantes et existent dans tout l'espace de développement. Les exploitations d'UAF sont courantes en partie parce qu'il est assez difficile d'identifier une UAF manuellement : Les UAF ont tendance à exister en raison d'actions combinées dans différentes parties d'une application, de sorte que la détection d'une UAF nécessite d'inspecter l'ensemble de la base de code plutôt que des segments de code individuels.

Il est donc essentiel que la dernière vulnérabilité Linux futex crée un espace pour les exploits UAF qui peuvent être extrêmement difficiles à détecter.

 

Ce que nous savons de la nouvelle vulnérabilité du futex

Ce que nous savons de la nouvelle vulnérabilité du futex

 

Comme nous l'avons indiqué précédemment, la dernière vulnérabilité concerne également les PI-futex. Tous les détails sont encore en train d'émerger, mais essentiellement, cette vulnérabilité particulière des futex crée le risque d'un exploit de type "user-after-free".

Ce que nous savons jusqu'à présent, c'est que, essentiellement, lorsqu'une application manipule mal un PI-futex, le noyau Linux peut renvoyer un état incohérent. Dans certains cas, cet état incohérent peut donner lieu à une opportunité d'utilisation après libération dans la pile du noyau des tâches Linux.

Les détails complets de cette dernière vulnérabilité n'ont pas encore été publiés, mais nous nous attendons à ce qu'ils apparaissent bientôt. Les investigations menées par notre équipe suggèrent que le problème affecte toutes les distributions Linux utilisant un noyau à partir de 2008 - couvrant essentiellement toutes les implémentations Linux dans la nature.

 

L'impact potentiel de la dernière vulnérabilité de futex

L'impact potentiel de la dernière vulnérabilité de futex

 

Il y a une inquiétude particulière autour du fait que cette vulnérabilité particulière de futex ouvre la porte à l'abus de use-after-free. Et, clairement, le nombre de systèmes Linux affectés est très déconcertant.

Bien sûr, le problème des vulnérabilités futex et des vulnérabilités UAF en général est qu'elles peuvent conduire à une grande variété d'exploits si un programmeur fait preuve de créativité. Actuellement, il n'existe pas d'exploit pour la dernière vulnérabilité, mais le risque est élevé qu'un code d'exploitation émerge.

Nous nous attendons à ce que les risques de cette vulnérabilité tournent autour des risques typiques des exploits UAF. Pensez aux attaques DoS, par exemple. Il existe un risque que la nouvelle vulnérabilité futex puisse être utilisée pour faire planter des systèmes dans le but de perturber les opérations - ou de refuser le service à vos clients. En effet, les vulnérabilités UAF peuvent souvent être utilisées pour faire planter des applications en cours d'exécution.

Les FAU permettent aussi couramment aux pirates d'exécuter des codes malveillants, ce qui peut conduire à toute une série de problèmes de cybercriminalité courants tels que le vol de données. Les lecteurs comprendront les conséquences potentielles - pertes financières, atteinte à la réputation, etc.

 

Se protéger contre les exploits de futex - et autres vulnérabilités du noyau

Se protéger contre les exploits de futex - et autres vulnérabilités du noyau

 

Lorsqu'il s'agit de vulnérabilités du noyau Linux, l'application de correctifs est, et a toujours été, la réponse. Les vulnérabilités de Futex ont toujours conduit à des modifications du noyau - et à des correctifs correspondants. Ce qui est moins constant, cependant, c'est l'application de ces correctifs.

Si votre entreprise applique systématiquement des correctifs, elle bénéficiera probablement d'une protection contre la dernière vulnérabilité de Futex avant que les exploits ne commencent à apparaître dans la nature. Cependant, l'application systématique de correctifs n'est pas aussi simple qu'il n'y paraît.

L'application de correctifs prend du temps et nécessite souvent des redémarrages, ce qui implique des temps d'arrêt - et soit des clients mécontents, soit une perte de revenus. C'est pourquoi de nombreuses entreprises négligent les correctifs, ce qui peut signifier que des vulnérabilités connues restent exploitables.

Les correctifs automatisés, sans redémarrage, sont une alternative. KernelCare, par exemple, peut maintenir sans effort vos distributions Linux corrigées, vous couvrant automatiquement contre les vulnérabilités connues, y compris les derniers exploits liés à Futex.

 

Conclusion

Conclusion

 

À l'heure actuelle, il n'existe pas, à notre connaissance, d'exploit dans la nature qui mettrait vos systèmes en danger en raison de cette vulnérabilité du noyau Linux récemment découverte. Cependant, il y a un risque élevé que des exploits émergent, c'est simplement dans la nature des vulnérabilités UAF.

En tant qu'administrateur système ou expert en sécurité, vous devez traiter cette nouvelle vulnérabilité comme toute autre vulnérabilité. Corrigez-la lorsque le correctif est publié.

Vous ne disposez pas des ressources nécessaires pour appliquer des correctifs ? Vous en avez assez des temps d'arrêt liés aux correctifs ? Essayez KernelCare.

Vous cherchez à automatiser la correction des vulnérabilités sans redémarrage du noyau, temps d'arrêt du système ou fenêtres de maintenance programmées ?

Découvrez le Live Patching avec TuxCare

Devenez rédacteur invité de TuxCare

Commencer

Courrier

Rejoindre

4,500

Professionnels de Linux et de l'Open Source
!

S'abonner à
notre lettre d'information