Une vulnérabilité (CVE-2022-0435) a été identifiée dans le module noyau Linux, responsable du fonctionnement du protocole réseau TIPC (Transparent Inter-process Communication), qui pourrait potentiellement permettre l'exécution de code à niveau noyau via l'envoi d'un paquet réseau spécialement conçu. Ce problème concerne uniquement les systèmes avec le module noyau tipc.ko chargé et une pile TIPC configurée, généralement utilisée dans des clusters et qui n'est pas activée par défaut dans les distributions Linux non spécialisées.
Il est à noter qu'en construisant le noyau en mode « CONFIG_FORTIFY_SRC=y » (utilisé dans RHEL), qui ajoute des vérifications supplémentaires des limites dans la fonction memcpy(), l'exploitation se limite à un arrêt d'urgence (le noyau entre dans un état de panique). Lorsqu'elle est effectuée sans vérifications supplémentaires et en cas de fuite d'informations sur les étiquettes de canaries utilisées pour protéger la pile, le problème peut être utilisé pour exécuter du code à distance avec les privilèges du noyau. Les chercheurs ayant identifié le problème déclarent que la technique d'exploitation est triviale et sera révélée après l'élimination universelle de la vulnérabilité dans les distributions.
La vulnérabilité est causée par un dépassement de pile lors du traitement des paquets, lorsque la valeur du champ contenant le nombre de nœuds participants de domaine, excède 64. Pour stocker les paramètres des nœuds dans le module tipc.ko, un tableau fixe « u32 members[64] » est utilisé, mais lors du traitement du numéro de nœud spécifié dans le paquet, aucune vérification de la valeur « member_cnt » n'est effectuée, ce qui permet d'utiliser des valeurs supérieures à 64 pour réécrire de manière contrôlée des données dans la zone mémoire suivante de la pile après la structure « dom_bef ».
L'erreur à l'origine de la vulnérabilité a été introduite le 15 juin 2016 et a été intégrée dans le noyau Linux 4.8. La vulnérabilité a été corrigée dans les versions du noyau Linux 5.16.9, 5.15.23, 5.10.100, 5.4.179, 4.19.229, 4.14.266 et 4.9.301. Dans les noyaux de la plupart des distributions, le problème reste actuellement non corrigé : RHEL, Debian, Ubuntu, SUSE, Fedora, Gentoo, Arch Linux.
Le protocole TIPC a été initialement développé par Ericsson et est conçu pour organiser l'interaction entre processus dans un cluster. Il s'active principalement sur les nœuds des clusters. TIPC peut fonctionner à la fois sur Ethernet et sur UDP (port réseau 6118). En cas de fonctionnement sur Ethernet, une attaque peut être effectuée depuis le réseau local, tandis qu'avec UDP, cela peut être fait depuis le réseau global, si le port n'est pas protégé par un pare-feu. Une attaque peut également être réalisée par un utilisateur local non privilégié de l'hôte. Pour activer TIPC, le module du noyau tipc.ko doit être chargé et la liaison avec l'interface réseau doit être configurée à l'aide de netlink ou de l'outil tipc.
Source : opennet.ru
