Une vulnérabilité critique a été identifiée dans le module ksmbd, qui inclut une implémentation de serveur de fichiers basée sur le protocole SMB intégrée au noyau Linux, permettant une exécution de code à distance avec des privilèges noyau. L'attaque peut être réalisée sans authentification, il suffit que le module ksmbd soit activé sur le système. Le problème apparaît à partir du noyau 5.15, publié en novembre 2021, et a été corrigé discrètement dans les mises à jour 5.15.61, 5.18.18 et 5.19.2, qui ont été publiées en août 2022. Comme l'identifiant CVE n'a pas encore été attribué au problème, les informations précises sur la correction dans les distributions ne sont pas encore disponibles.
Les détails de l'exploitation de la vulnérabilité ne sont pas encore divulgués, il est seulement connu que la vulnérabilité est causée par l'accès à une zone mémoire déjà libérée (Use-After-Free) en raison de l'absence de vérification de l'existence de l'objet avant d'effectuer des opérations avec. Le problème est lié au fait que dans la fonction smb2_tree_disconnect(), la mémoire allouée à la structure ksmbd_tree_connect était libérée, mais un pointeur demeurait, utilisé lors du traitement de certaines requêtes externes contenant des commandes SMB2_TREE_DISCONNECT.
En plus de la vulnérabilité mentionnée dans ksmbd, quatre autres problèmes moins graves ont également été corrigés :
- ZDI-22-1688 — exécution de code à distance avec des privilèges noyau en raison de l'absence de gestion des attributs de fichiers lors de la vérification de la taille réelle des données externes avant leur copie dans le tampon alloué. Le danger de cette vulnérabilité est atténué par le fait que l'attaque ne peut être réalisée que par un utilisateur authentifié.
- ZDI-22-1691 — fuite d'informations à distance depuis la mémoire du noyau en raison d'une vérification incorrecte des paramètres d'entrée dans le gestionnaire de commande SMB2_WRITE (l'attaque ne peut être réalisée que par un utilisateur authentifié).
- ZDI-22-1687 — appel à distance à un déni de service par épuisement de la mémoire disponible dans le système en raison d'une libération incorrecte des ressources dans le gestionnaire de commande SMB2_NEGOTIATE (l'attaque peut être réalisée sans authentification).
- ZDI-22-1689 — appel à distance à l'échec du noyau en raison d'une vérification insuffisante des paramètres de la commande SMB2_TREE_CONNECT, entraînant une lecture hors du tampon (l'attaque ne peut être réalisée que par un utilisateur authentifié).
Le support du fonctionnement d'un serveur SMB à l'aide du module ksmbd est présent dans le paquet Samba à partir de la version 4.16.0. Contrairement à un serveur SMB fonctionnant dans l'espace utilisateur, ksmbd est plus performant en termes de performances, de consommation de mémoire et d'intégration avec les fonctionnalités avancées du noyau. Ksmbd se présente comme une extension hautes performances et prête à être utilisée sur des dispositifs embarqués, intégrable au besoin avec les outils et bibliothèques de Samba. Les auteurs du code ksmbd sont Namjae Jeon de Samsung et Hyunchul Lee de LG, et le soutien au sein du noyau est assuré par Steve French de Microsoft, mainteneur de la sous-système CIFS/SMB2/SMB3 dans le noyau Linux et participant de longue date à l'équipe de développement de Samba, ayant apporté une contribution significative à la mise en œuvre du support des protocoles SMB/CIFS dans Samba et Linux.
Source : opennet.ru
