Vulnérabilités racine locales dans la boîte à outils de gestion des packages Snap

Qualys a identifié deux vulnérabilités (CVE-2021-44731, CVE-2021-44730) dans l'utilitaire snap-confine, fourni avec l'indicateur racine SUID et appelé par le processus snapd pour créer un environnement exécutable pour les applications fournies dans des packages autonomes. au format instantané. Les vulnérabilités permettent à un utilisateur local non privilégié d'exécuter du code avec les privilèges root sur le système. Les problèmes sont résolus dans la mise à jour du package snapd d'aujourd'hui pour Ubuntu 21.10, 20.04 et 18.04.

La première vulnérabilité (CVE-2021-44730) permet une attaque par manipulation de liens physiques, mais nécessite de désactiver la protection des liens physiques du système (en définissant sysctl fs.protected_hardlinks sur 0). Le problème est dû à une vérification incorrecte de l'emplacement des fichiers exécutables des programmes d'assistance snap-update-ns et snap-discard-ns exécutés en tant que root. Le chemin d'accès à ces fichiers a été calculé dans la fonction sc_open_snapd_tool() en fonction de son propre chemin depuis /proc/self/exe, ce qui vous permet de créer un lien physique à confiner dans votre répertoire et de placer vos propres versions du snap- update-ns et snap-utilitaires dans ce répertoire, throw-ns. Après avoir été exécuté via un lien physique, snap-confine avec les droits root lancera les fichiers snap-update-ns et snap-discard-ns à partir du répertoire courant, remplacés par l'attaquant.

La deuxième vulnérabilité est causée par une condition de concurrence critique et peut être exploitée dans la configuration par défaut d'Ubuntu Desktop. Pour que l'exploit fonctionne correctement sur Ubuntu Server, vous devez sélectionner l'un des packages dans la section « Featured Server Snaps » lors de l'installation. La condition de concurrence critique est évidente dans la fonction setup_private_mount() appelée lors de la préparation de l'espace de noms du point de montage pour le package snap. Cette fonction crée un répertoire temporaire « /tmp/snap.$SNAP_NAME/tmp » ou utilise un répertoire existant pour y lier des répertoires pour un package snap.

Le nom du répertoire temporaire étant prévisible, un attaquant peut remplacer son contenu par un lien symbolique après avoir vérifié le propriétaire, mais avant d'appeler l'appel système mount. Par exemple, vous pouvez créer un lien symbolique "/tmp/snap.lxd/tmp" dans le répertoire /tmp/snap.lxd pointant vers un répertoire arbitraire, et un appel à mount() suivra le lien symbolique et montera le répertoire dans le espace de noms instantané. De la même manière, vous pouvez monter votre contenu dans /var/lib et, en remplaçant /var/lib/snapd/mount/snap.snap-store.user-fstab, organiser le montage de votre répertoire /etc dans l'espace de noms de le package snap pour organiser le chargement de votre bibliothèque avec les droits root en remplaçant /etc/ld.so.preload.

Il est à noter que la création d'un exploit s'est avérée être une tâche non triviale, puisque l'utilitaire snap-confine est écrit en Go à l'aide de techniques de programmation sécurisées, dispose d'une protection basée sur les profils AppArmor, filtre les appels système en fonction du mécanisme seccomp et utilise l'espace de noms de montage pour l'isolation. Cependant, les chercheurs ont pu préparer un exploit fonctionnel pour obtenir les droits root sur le système. Le code d'exploitation sera publié quelques semaines après que les utilisateurs auront installé les mises à jour fournies.

Source: opennet.ru

Ajouter un commentaire