Des chercheurs ont découvert une vulnérabilité facile à exploiter dans le système universel de packaging et de distribution d'applications Snap, développé pour Ubuntu, mais disponible sur de multiples distributions Linux. La faille permet à un utilisateur disposant de peu de privilèges d'exécuter un code malveillant avec des privilèges root, autrement dit, ceux du compte d’administration le plus élevé sous Linux. Cette vulnérabilité qui porte la référence CVE-2021-44731, est l’une des nombreuses failles découvertes dans divers composants Linux par les chercheurs de l’entreprise de sécurité Qualys lors de leurs recherches sur la sécurité de Snap. Cette dernière vulnérabilité, tout comme une autre vulnérabilité portant la référence CVE-2021-44730, se situe dans snap-confine, l'outil qui sert à mettre en place les bacs à sable dans lesquels s’exécutent les applications Snap.

Snap est donc un gestionnaire de paquets pour les systèmes Linux développé par Canonical, l’éditeur à l'origine de la distribution desktop et serveur Ubuntu. Il permet l'empaquetage et la distribution d'applications autonomes appelées « snaps » qui s'exécutent dans un conteneur restreint, offrant un niveau de sécurité configurable. Parce qu’elles sont autonomes, les applications Snap n'ont pas de dépendances externes, ce qui leur permet de fonctionner sur plusieurs plates-formes ou distributions. En général, chaque distribution Linux majeure maintient son propre référentiel de logiciels pré-packagés et son propre gestionnaire de logiciels, par exemple DEB pour Debian, PPA pour Ubuntu, RPM pour Fedora et Red Hat, Pacman pour Arch Linux, et ainsi de suite. Tous ces systèmes récupèrent le paquetage souhaité et toutes les autres dépendances sous forme de paquets séparés. Par contre, les applications snaps sont livrées avec toutes les dépendances nécessaires, ce qui les rend universellement déployables sur tous les systèmes Linux qui disposent du service Snap.

Un audit de sécurité approfondi déjà mené

Le gestionnaire Snap est livré par défaut sur Ubuntu et plusieurs distributions Linux et il est disponible en option dans beaucoup d'autres, y compris les principales. Il est utilisé pour distribuer non seulement des applications desktop, mais aussi des applications cloud et IoT. Le confinement Snap - la fonction d'isolation - possède trois niveaux de sécurité, le mode Strict étant utilisé par la plupart des applications. Dans ce mode, les applications doivent demander une autorisation pour accéder aux fichiers, aux autres processus ou au réseau. Ce mode de fonctionnement n'est pas sans rappeler le modèle de sandboxing et de permissions des applications des systèmes d'exploitation mobiles comme Android. Le sandboxing des applications étant l'une des principales fonctionnalités de Snap, toute vulnérabilité d'élévation de privilèges permettant d'échapper à cette isolation et de prendre le contrôle du système hôte est donc considérée comme critique.

Les chercheurs de Qualys ont baptisé leurs deux vulnérabilités snap-confine « Oh Snap ! More Lemmings », car elles ont été découvertes après une autre faille d'élévation de privilèges identifiée en 2019 et baptisée Dirty Sock. Depuis Dirty Sock, Snap a fait l'objet d'un audit de sécurité approfondi de la part de l'équipe de sécurité de SuSE, et en général, le gestionnaire est programmé de manière très défensive, en utilisant de nombreuses fonctionnalités de sécurité du noyau comme les profils AppArmor, les filtres seccomp et les espaces de noms des points de montage. « Nous avons presque renoncé à notre audit après quelques jours », ont déclaré les chercheurs de Qualys dans leur avis, ajoutant que « la découverte et l'exploitation d'une vulnérabilité dans snap-confine ont été extrêmement difficiles (surtout dans une installation par défaut d'Ubuntu) ».

D'autres bugs aussi découverts

Néanmoins, l'équipe a décidé de poursuivre son audit après avoir repéré quelques bugs mineurs. C’est ainsi qu’ils ont abouti à la découverte aux deux vulnérabilités d'escalade de privilèges CVE-2021-44730 et CVE-2021-44731. CVE-2021-44730 permet une attaque dite « hardlink attack », exploitable uniquement dans les configurations par défaut, quand le paramètre fs.protected_hardlinks du noyau est égal à 0. Quant à la vulnérabilité CVE-2021-44731, elle crée une situation de compétition (race condition) exploitable dans les installations par défaut d'Ubuntu Desktop et les installations par défaut d'Ubuntu Server. Et cette situation de compétition ouvre un tas de possibilités : À l'intérieur de l'espace de noms de montage de snap (auquel on peut accéder par snap-confine lui-même), il devient possible de monter un répertoire non collant (« non-sticky ») et dans lequel tout le monde peut écrire sur /tmp, ou monter n'importe quelle autre partie du système de fichiers sur /tmp », ont expliqué les chercheurs de Qualys. « Il est possible de renverser de manière fiable cette situation de compétition en surveillant /tmp/snap.lxd avec inotify, en plaçant l’exploit et snap-confine sur le même processeur avec sched_setaffinity(), et en abaissant la priorité d'ordonnancement de snap-confine avec setpriority() et sched_setscheduler() », ont encore expliqué les chercheurs.

Lors de leur examen de ces failles, les chercheurs de Qualys ont également découvert des bogues dans d'autres bibliothèques et composants connexes utilisés par Snap : notamment des démontages non autorisés dans libmount de util-linux (CVE-2021-3996 et CVE-2021-3995) ; une valeur de retour inattendue de realpath() de glibc (CVE-2021-3998) ; un débordement/sous-débordement avancé de tampon off-by-one dans getcwd() de glibc (CVE-2021-3999) ; une récursion non contrôlée dans systemd-tmpfiles de systemd (CVE-2021-3997). Ces failles ont été corrigées dans ces composants respectifs plus tôt cette année. Ubuntu a publié des correctifs pour CVE-2021-44731 et CVE-2021-44730 pour la plupart de ses éditions Linux, à l'exception de la faille 16.04 ESM (Extended Security Maintenance) toujours en attente d’un correctif. La gravité de ces deux vulnérabilités est considérée comme très critique.