Vulnérabilité dans le sous-système du noyau Linux Netfilter

Une vulnérabilité (CVE-2021-22555) a été identifiée dans Netfilter, un sous-système du noyau Linux utilisé pour filtrer et modifier les paquets réseau, qui permet à un utilisateur local d'obtenir les privilèges root sur le système, y compris dans un conteneur isolé. Un prototype fonctionnel d'un exploit qui contourne les mécanismes de protection KASLR, SMAP et SMEP a été préparé pour les tests. Le chercheur qui a découvert la vulnérabilité a reçu une récompense de 20 XNUMX $ de Google pour avoir identifié une méthode permettant de contourner l'isolement des conteneurs Kubernetes dans un cluster kCTF.

Le problème existe depuis le noyau 2.6.19, publié il y a 15 ans, et est dû à un bug dans les gestionnaires IPT_SO_SET_REPLACE et IP6T_SO_SET_REPLACE qui provoque un débordement de tampon lors de l'envoi de paramètres spécialement formatés via un appel setsockopt en mode compat. Dans des circonstances normales, seul l'utilisateur root peut appeler compat_setsockopt(), mais les privilèges requis pour effectuer l'attaque peuvent également être obtenus par un utilisateur non privilégié sur des systèmes avec la prise en charge des espaces de noms utilisateur activée.

Un utilisateur peut créer un conteneur avec un utilisateur root distinct et exploiter la vulnérabilité à partir de là. Par exemple, les « espaces de noms utilisateur » sont activés par défaut sur Ubuntu et Fedora, mais pas sur Debian et RHEL. Le correctif corrigeant la vulnérabilité a été adopté dans le noyau Linux le 13 avril. Des mises à jour de packages ont déjà été générées par les projets Debian, Arch Linux et Fedora. Sous Ubuntu, RHEL et SUSE, des mises à jour sont en préparation.

Le problème se produit dans la fonction xt_compat_target_from_user() en raison d'un calcul incorrect de la taille de la mémoire lors de l'enregistrement des structures du noyau après la conversion d'une représentation 32 bits à une représentation 64 bits. Le bogue permet d'écrire quatre octets nuls à n'importe quelle position au-delà du tampon alloué délimité par le décalage 0x4C. Cette fonctionnalité s'est avérée suffisante pour créer un exploit permettant d'obtenir les droits root - en effaçant le pointeur m_list->next dans la structure msg_msg, des conditions ont été créées pour accéder aux données après avoir libéré de la mémoire (use-after-free), ce qui a ensuite été utilisé pour obtenir des informations sur les adresses et les modifications apportées à d'autres structures via la manipulation de l'appel système msgsnd().

Source: opennet.ru

Ajouter un commentaire