Une vulnérabilité critique (CVE-2021-43267) a été détectée dans l'implémentation du protocole réseau TIPC (Transparent Inter-process Communication) intégrée dans le noyau Linux, permettant l'exécution de code malveillant à distance avec des privilÚges de noyau via l'envoi d'un paquet réseau spécialement conçu. Le danger de ce problÚme est atténué par le fait qu'une activation explicite du support TIPC dans le systÚme (chargement et configuration du module noyau tipc.ko) est nécessaire, ce qui n'est pas fait par défaut dans les distributions Linux non spécialisées.
Le protocole TIPC est supporté depuis le noyau Linux 3.19, mais le code vulnérable a été intégré dans la version 5.10 du noyau. La vulnérabilité a été corrigée dans les noyaux 5.15.0, 5.10.77 et 5.14.16. Le problÚme est toujours présent et non résolu dans Debian 11, Ubuntu 21.04/21.10, SUSE (dans la branche non encore publiée SLE15-SP4), RHEL (il n'a pas été précisé si la correction vulnérable a été rétroportée) et Fedora. Une mise à jour du noyau a déjà été publiée pour Arch Linux. Les distributions avec un noyau supérieur à 5.10, comme Debian 10 et Ubuntu 20.04, ne sont pas affectées par ce problÚme.
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.
La vulnĂ©rabilitĂ© se manifeste dans la fonction tipc_crypto_key_rc et est causĂ©e par l'absence d'une vĂ©rification adĂ©quate de la correspondance entre la taille des donnĂ©es spĂ©cifiĂ©es dans l'en-tĂȘte et la taille rĂ©elle lors du traitement des paquets de type MSG_CRYPTO, utilisĂ©s pour obtenir des clĂ©s de cryptage d'autres nĆuds dans le cluster, en vue de dĂ©chiffrer des messages envoyĂ©s depuis ces nĆuds. La taille des donnĂ©es copiĂ©es en mĂ©moire est calculĂ©e comme la diffĂ©rence entre la taille des champs de message et de l'en-tĂȘte, sans tenir compte de la taille rĂ©elle du nom de l'algorithme de cryptage et du contenu de la clĂ© transmis dans le message. Il est supposĂ© que la taille du nom de l'algorithme est fixe, et qu'un attribut sĂ©parĂ© pour la taille de la clĂ© est fourni, permettant Ă un attaquant de spĂ©cifier une valeur diffĂ©rente de la taille rĂ©elle, ce qui peut entraĂźner l'Ă©criture des donnĂ©es au-delĂ du tampon allouĂ©. struct tipc_aead_key { char alg_name[TIPC_AEAD_ALG_NAME]; unsigned int keylen; /* en octets */ char key[]; };

Source : opennet.ru
