L'équipe TuxCare identifie CVE-2021-38604, une nouvelle vulnérabilité dans glibc
L'équipe TuxCare est chargée d'effectuer des analyses approfondies des nouveaux CVE. Ceci est fait pour chaque nouvelle CVE qui apparaît et qui affecte, directement ou indirectement, l'écosystème Linux. Nous vérifions si les distributions pour lesquelles nous fournissons des services sont affectées. Lorsqu'un tel CVE affecte les distributions prises en charge, les membres de l'équipe retroussent leurs manches et commencent à creuser dans le code.
En effectuant ce travail sur CVE-2021-33574, Nikita Popov, un des membres de notre équipe, a identifié un problème avec la glibc en amont. Il s'avère qu'il est possible de provoquer une situation où une erreur de segmentation pourrait être déclenchée dans un chemin de code spécifique au sein de la bibliothèque. Cela peut, à son tour, conduire à un crash de l'application utilisant la bibliothèque, ce qui entraîne un problème de déni de service.
Gardez à l'esprit que la glibc fournit les principales primitives du système et est liée à la plupart, sinon à toutes les autres applications Linux, y compris les compilateurs et les interpréteurs d'autres langages. Elle est le deuxième composant le plus important d'un système après le noyau lui-même.
Ce problème a été introduit avec le correctif amont original pour CVE-2021-33574, spécifiquement dans le fichier mq_notify.c:
@@ -133,8 +133,11 @@ helper_thread (void *arg) |
Alors que l'appel free() est immunisé contre les pointeurs NULL qui lui sont passés, pthread_attr_destroy() ne l'est pas. Il a été possible d'identifier deux situations où le noyau Linux utiliserait le message NOTIFY_REMOVED tout en passant des attributs de thread copiés en cours de route dans le champ data.attr. Malheureusement, une application hôte peut y passer une valeur NULL si elle souhaite que la glibc génère un thread avec des attributs par défaut. Dans ce cas, la glibc déréférencerait un pointeur NULL dans pthread_attr_destroy, ce qui entraînerait un plantage de l'ensemble du processus.
Conformément aux directives de divulgation responsable, la vulnérabilité et la correction du code ont été soumises à l'équipe responsable de glibc, et un CVE a été demandé à Mitre (CVE-2021-38604). Dans la glibc, elle a été attribuée au bogue 28213. Celui-ci a déjà été incorporé dans la glibc amont.
Un nouveau test a également été soumis à la suite de tests automatisés de la glibc pour détecter cette situation et éviter qu'elle ne se reproduise à l'avenir. Parfois, des changements dans des chemins de code non liés peuvent entraîner des changements de comportement ailleurs dans le code sans que le programmeur en soit conscient. Ce test permet de détecter cette situation.
Pour le contexte, la famille de fonctions "mq_" fournit une fonctionnalité d'API de file d'attente de messages conforme à POSIX et des notifications asynchrones de messages entrants, et est généralement utilisée pour les communications interprocessus.
Liens pertinents :
https://sourceware.org/git/?p=glibc.git;a=commit;h=42d359350510506b87101cf77202fefcbfc790cb