Une vulnérabilité (CVE-2022-0185) a été identifiée dans l'API Filesystem Context fournie par le noyau Linux, permettant à un utilisateur local d'obtenir des droits root sur le système. Le chercheur ayant découvert le problème a publié une démonstration d'un exploit permettant d'exécuter du code avec des droits root sur Ubuntu 20.04 dans une configuration par défaut. Le code de l'exploit devrait être publié sur GitHub dans la semaine suivant la sortie des mises à jour corrigées par les distributions.
La vulnérabilité réside dans la fonction legacy_parse_param() dans VFS et est causée par un manque de vérification adéquate de la taille maximale des paramètres fournis par les systèmes de fichiers ne supportant pas l'API Filesystem Context. Lorsqu'un paramètre trop grand est transmis, cela peut entraîner un dépassement de capacité d'une variable entière utilisée pour calculer la taille des données écrites — dans le code, il existe un contrôle de débordement de tampon « if (len > PAGE_SIZE - 2 - size) », qui ne se déclenche pas si la valeur de size est supérieure à 4094 en raison d'un dépassement d’entier par le bas (integer underflow, lorsque 4096 - 2 - 4095 est converti en unsigned int cela donne 2147483648).
L'erreur spécifiée permet, lorsqu'on accède à une image FS spécialement formatée, de provoquer un débordement de tampon et d'écraser les données du noyau qui se trouvent après la zone de mémoire allouée. Pour exploiter cette vulnérabilité, des privilèges CAP_SYS_ADMIN sont nécessaires, c'est-à-dire des droits d'administrateur. Le problème est qu'un utilisateur non privilégié peut obtenir de tels privilèges dans un conteneur isolé si la prise en charge des espaces de noms d'identifiants utilisateurs (user namespaces) est activée dans le système. Par exemple, les espaces de noms d'utilisateurs sont activés par défaut dans Ubuntu et Fedora, mais ne sont pas activés dans Debian et RHEL (à moins que des plateformes d'isolement de conteneurs ne soient utilisées).
Le problème se manifeste à partir du noyau Linux 5.1 et a été corrigé dans les mises à jour d'hier 5.16.2, 5.15.16, 5.10.93, 5.4.173. Des mises à jour de paquets corrigeant la vulnérabilité ont déjà été publiées pour RHEL, Debian, Fedora et Ubuntu. Le correctif n'est pas encore disponible pour Arch Linux, Gentoo, SUSE et openSUSE. Pour les systèmes ne utilisant pas l'isolement de conteneurs, une solution de contournement pour protéger consiste à définir à 0 la valeur sysctl « user.max_user_namespaces » : echo « user.max_user_namespaces=0 » > /etc/sysctl.d/userns.conf # sysctl -p /etc/sysctl.d/userns.conf
Source : opennet.ru
