« Microsoft emploie certains des meilleurs chercheurs en sécurité au monde, découvre et corrige régulièrement des vulnérabilités importantes, souvent avant qu'elles ne soient utilisées dans les écosystèmes. Ce que cette découverte démontre en fait, c'est ce que toute personne ayant la moitié d'un indice savait déjà : il n'y a rien dans Linux qui le rende intrinsèquement plus fiable que Windows », déclare un internaute.
« Je peux garantir qu'une grande partie des ingénieurs logiciels, chez Microsoft, travaillent sous Linux. Microsoft a un sous-système Linux intégré dans Windows maintenant. Microsoft possède Github, et Azure, qui utilisent tous deux Linux comme standard pour la majorité de leurs offres. Il y a de nombreuses raisons pour lesquelles ils consacreraient du temps et de la main d'œuvre à la recherche de tout problème potentiel dans Linux »
Les systèmes d'exploitation ayant été renforcés pour résister aux compromissions ces dernières années, les vulnérabilités d'élévation de privilèges (EoP) sont devenues un ingrédient essentiel de la plupart des hacks réussis. Elles peuvent être exploitées de concert avec d'autres vulnérabilités qui, à elles seules, sont souvent considérées comme moins graves, les secondes donnant ce que l'on appelle un accès local et les premières permettant d'accéder à la racine. À partir de là, les adversaires disposant d'un accès physique ou de droits limités sur le système peuvent déployer des portes dérobées ou exécuter le code de leur choix.
Les failles, identifiées sous les noms de CVE-2022-29799 et CVE-2022-29800, combinent des menaces telles que la traversée de répertoires, la course de liens symboliques et la condition de course de temps de vérification du temps d'utilisation (TOCTOU). Après avoir examiné le code source de Networkd -dispatcher, le chercheur Jonathan Bar Or de Microsoft a remarqué qu'un composant connu sous le nom de _run_hooks_for_state met en œuvre la logique suivante :
- Découvre la liste des scripts disponibles en invoquant la méthode get_script_list, qui appelle une méthode séparée scripts_in_path destinée à renvoyer tous les fichiers stockés dans le répertoire "/etc/networkd-dispatcher/.d" ;
- Trie la liste des scripts ;
- Exécute chaque script avec le processus subprocess.Popen et fournit des variables d'environnement personnalisées.
Run_hooks_for_state laisse les systèmes Linux ouverts à la vulnérabilité de traversée de répertoire, désignée sous le nom de CVE-2022-29799, parce qu'aucune des fonctions qu'il utilise ne nettoie correctement les états utilisés pour construire le chemin de script approprié à partir d'une entrée malveillante. Les pirates peuvent exploiter cette faiblesse pour s'échapper du répertoire de base /etc/networkd-dispatcher.
Run-hooks_for_state contient une autre faille, CVE-2022-29800, qui rend les systèmes vulnérables à la condition de course TOCTOU puisqu'il y a un certain temps entre la découverte des scripts et leur exécution.
Les adversaires peuvent exploiter cette dernière vulnérabilité pour remplacer les scripts que networkd-dispatcher croit appartenir à root par des scripts malveillants choisis par les adversaires. Pour s'assurer que Linux exécute le script malveillant fourni par le pirate plutôt que le script légitime, le pirate implante plusieurs scripts jusqu'à ce qu'un seul réussisse finalement.
Un pirate ayant un accès minimal à un ordinateur de bureau vulnérable peut enchaîner des exploits pour ces vulnérabilités qui donnent un accès complet à la racine. Le flux d'exploitation ressemble à ceci :
- Préparez un répertoire /tmp/nimbuspwn et implantez un lien symbolique /tmp/nimbuspwn/poc.d pour pointer vers /sbin. Le répertoire /sbin a été choisi spécifiquement parce qu'il contient de nombreux exécutables appartenant à root qui ne se bloquent pas s'ils sont exécutés sans arguments supplémentaires. Cela permettra d'abuser du problème de course de liens symboliques que nous avons mentionné précédemment.
- Pour chaque nom de fichier exécutable sous /sbin appartenant à root, plantez le même nom de fichier sous/tmp/nimbuspwn. Par exemple, si "/sbin/vgs" est exécutable et appartient à root, implantez un fichier exécutable "/tmp/nimbuspwn/vgs" avec la charge utile désirée. Cela aidera l'attaquant à gagner la condition de course imposée par la vulnérabilité TOCTOU ;
- Envoyer un signal avec l'OperationalState ../../../tmp/nimbuspwn/poc. Ceci abuse de la vulnérabilité de traversée de répertoire et échappe le répertoire du script ;
- Le gestionnaire de signaux de networkd-dispatcher entre en action et construit la liste des scripts à partir du répertoire /etc/networkd-dispatcher/../../../tmp/nimbuspwn/poc.d, qui est en réalité le lien symbolique (/tmp/nimbuspwn/poc.d), qui pointe vers /sbin. Par conséquent, cela crée une liste composée de nombreux exécutables appartenant à root ;
- Changez rapidement le lien symbolique /tmp/nimbuspwn/poc.d pour qu'il pointe vers /tmp/nimbuspwn. Ceci abuse de la vulnérabilité de la condition de course TOCTOU - le chemin du script change sans que networkd-dispatcher en soit conscient ;
- Le répartiteur commence à exécuter des fichiers qui étaient initialement sous "/sbin" mais en réalité sous le répertoire /tmp/nimbuspwn. Puisque le répartiteur "croit" que ces fichiers appartiennent à root, il les exécute aveuglément avec subprocess.Popen en tant que root. Par conséquent, notre attaquant a réussi à exploiter la vulnérabilité.
- Pour obtenir un accès root permanent, le chercheur a utilisé le flux d'exploitation pour créer une porte dérobée. La procédure à suivre est la suivante :
- Copie /bin/sh dans /tmp/sh ;
- Transforme le nouveau /tmp/sh en un binaire Set-UID (SUID) ;
- Exécute /tmp/sh -p. Le drapeau "-p" est nécessaire car les shells modernes abandonnent les privilèges par conception.
L'exploit de preuve de concept ne fonctionne que lorsqu'il peut utiliser le nom de bus "org.freedesktop.network1". Le chercheur a trouvé plusieurs environnements où cela se produit, y compris Linux Mint, dans lequel le systemd-networkd par défaut ne possède pas le nom de bus org.freedodesktop.network1 au démarrage.
Le chercheur a également trouvé plusieurs processus qui s'exécutent sous l'utilisateur systemd-network, qui est autorisé à utiliser le nom de bus nécessaire pour exécuter du code arbitraire à partir d'emplacements inscriptibles dans le monde. Les processus vulnérables comprennent plusieurs plugins gpgv, qui sont lancés lors de l'installation ou de la mise à jour d'apt-get, et le Erlang Port Mapper Daemon, qui permet d'exécuter du code arbitraire dans certains scénarios.
La vulnérabilité a été corrigée dans le networkd-dispatcher, bien qu'il n'ait pas été immédiatement clair quand ou dans quelle version, et les tentatives pour joindre le développeur n'ont pas été immédiatement couronnées de succès. Les personnes utilisant des versions vulnérables de Linux doivent corriger leurs systèmes dès que possible.
Source : Microsoft
Et vous ?
Que pensez-vous de cette vulnérabilité découverte par Microsoft dans Linux ?
« Il n'y a rien dans Linux qui le rende intrinsèquement plus fiable que Windows », partagez-vous cet avis ?
Voir aussi :
Les machines Linux et Raspberry Pi deviennent des cibles privilégiées pour le piratage des données d'identification, les pirates accèdent à des serveurs avec les mêmes mots de passe par défaut
Un bogue vieux de 12 ans dans polkit permet d'obtenir des privilèges « root » sur les principales distributions GNU/Linux, Ubuntu et Red Hat ont déjà publié des correctifs
Le nombre d'infections par des logiciels malveillants ciblant les appareils Linux a augmenté de 35 % en 2021, XorDDoS, Mirai et Mozi étaient les plus répandues, représentant 22 % des attaques
Microsoft va bloquer les macros téléchargées depuis Internet par défaut dans cinq applications Office, afin de lutter contre les ransomwares et d'autres logiciels malveillants