Vulnérabilité dans XFS qui permet de lire les données brutes du périphérique en bloc

Une vulnérabilité (CVE-2021-4155) a été identifiée dans le code du système de fichiers XFS qui permet à un utilisateur local non privilégié de lire les données de bloc inutilisées directement à partir d'un périphérique de bloc. Toutes les versions majeures du noyau Linux antérieures à 5.16 contenant le pilote XFS sont concernées par ce problème. Le correctif a été inclus dans la version 5.16, ainsi que dans les mises à jour du noyau 5.15.14, 5.10.91, 5.4.171, 4.19.225, etc. L'état des mises à jour générées pour résoudre le problème dans les distributions peut être suivi sur ces pages : Debian, RHEL, SUSE, Fedora, Ubuntu, Arch.

La vulnérabilité est due au comportement incorrect de deux ioctl(XFS_IOC_ALLOCSP) et ioctl(XFS_IOC_FREESP) spécifiques à XFS, qui sont un analogue fonctionnel de l'appel système fallocate() à l'échelle du noyau. Lors de l'augmentation de la taille d'un fichier qui n'est pas aligné sur les blocs, les ioctls XFS_IOC_ALLOCSP/XFS_IOC_FREESP ne réinitialisent pas les octets de queue à zéro jusqu'à la limite de bloc suivante. Ainsi, sur XFS avec une taille de bloc standard de 4096 4095 octets, un attaquant peut lire jusqu'à XNUMX XNUMX octets de données précédemment écrites dans chaque bloc. Ces zones peuvent contenir des données provenant de fichiers supprimés, de fichiers défragmentés et de fichiers comportant des blocs dédupliqués.

Vous pouvez tester votre système pour détecter le problème à l'aide d'un simple prototype d'exploit. Si, après avoir exécuté la séquence de commandes proposée, il est possible de lire le texte de Shakespeare, alors le pilote FS est vulnérable. Le montage initial d'une partition XFS à des fins de démonstration nécessite les privilèges root.

Étant donné que ioctl(XFS_IOC_ALLOCSP) et ioctl(XFS_IOC_FREESP) ont pratiquement les mêmes fonctionnalités que le fallocate() standard et que leur seule différence est la fuite de données, leur présence est similaire à une porte dérobée. Malgré la politique générale de ne pas modifier les interfaces existantes dans le noyau, à la suggestion de Linus, il a été décidé de supprimer complètement ces ioctls dans la prochaine version.

Source: opennet.ru

Ajouter un commentaire