Les vulnérabilités récemment découvertes par Microsoft permettent aux personnes ayant un pied sur de nombreux systèmes de bureau Linux d’obtenir rapidement les droits du système racine – la dernière faille d’élévation des privilèges à être mise au jour dans le système d’exploitation open source.
Comme les systèmes d’exploitation ont été renforcés pour résister aux compromis ces dernières années, les vulnérabilités d’élévation des privilèges (EoP) sont devenues un ingrédient crucial pour la plupart des piratages réussis. Ils peuvent être exploités de concert avec d’autres vulnérabilités qui, à elles seules, sont souvent considérées comme moins graves, ces dernières donnant ce qu’on appelle un accès local et les premières augmentant l’accès root. À partir de là, les adversaires disposant d’un accès physique ou de droits système limités peuvent déployer des portes dérobées ou exécuter le code de leur choix.
Nimbuspwn, comme Microsoft a nommé la menace EoP, est deux vulnérabilités qui résident dans le networkd-dispatcher, un composant de nombreuses distributions Linux qui distribuent les changements d’état du réseau et peuvent exécuter divers scripts pour répondre à un nouvel état. Lorsqu’une machine démarre, networkd-dispatcher s’exécute en tant que root.
Les failles, suivies sous les noms CVE-2022-29799 et CVE-2022-29800, combinent des menaces, notamment la traversée de répertoires, la course de liens symboliques et la condition de course de temps de vérification et d’utilisation (TOCTOU). Après avoir examiné le code source de Networkd -dispatcher, le chercheur de Microsoft Jonathan Bar Or a remarqué qu’un composant connu sous le nom de « _run_hooks_for_state » implémente la logique suivante :
- Découvre la liste des scripts disponibles en invoquant la méthode « get_script_list », qui appelle une méthode « scripts_in_path » distincte 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 comme CVE-2022-29799, car aucune des fonctions qu’il utilise ne nettoie de manière adéquate les états utilisés pour créer le chemin de script approprié à partir d’entrées malveillantes. Les pirates peuvent exploiter la faiblesse pour sortir du répertoire de base « /etc/networkd-dispatcher ».
Run-hooks_for_state contient une faille distincte, CVE-2022-29800, qui rend les systèmes vulnérables à la condition de concurrence TOCTOU car 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 pense 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 installe plusieurs scripts jusqu’à ce qu’un réussisse finalement.
Un pirate ayant un accès minimal à un bureau vulnérable peut enchaîner des exploits pour ces vulnérabilités qui donnent un accès root complet. Le flux d’exploit ressemble à ceci :
- Préparez un répertoire »/tmp/nimbuspwn » et plantez un lien symbolique « /tmp/nimbuspwn/poc.d« pointer vers »/sbin”. Le « /sbin » Le répertoire 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 abusera de la course de liens symboliques problème 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, plantez un fichier exécutable « /tmp/nimbuspwn/vgs” avec la charge utile souhaitée. Cela aidera l’attaquant à gagner la condition de course imposée par le TOCTOU vulnérabilité.
- Envoyez un signal avec le État opérationnel « ../../../tmp/nimbuspwn/poc ». Cela abuse de la parcours de répertoire vulnérabilité et échappe au répertoire de script.
- Le gestionnaire de signaux networkd-dispatcher démarre 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 »), ce qui indique « /sbin ». Par conséquent, il crée une liste composée de nombreux exécutables appartenant à root.
- Changez rapidement le lien symbolique « /tmp/nimbuspwn/poc.d” pointer vers « /tmp/nimbuspwn”. Cela abuse de la Condition de course TOCTOU vulnérabilité—le chemin du script change sans réseaud-répartiteur être conscient.
- Le répartiteur commence à exécuter les fichiers qui étaient initialement sous « /sbin » mais en vérité sous le « /tmp/nimbuspwn” répertoire. Étant donné que 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é.
Voici une visualisation :
Pour obtenir un accès root persistant, le chercheur a utilisé le flux d’exploitation pour créer une porte dérobée. Le processus pour cela est:
- Copies /bin/ch pour /tmp/sh.
- Transforme le nouveau /tmp/sh dans un binaire Set-UID (SUID)
- Courses /tmp/sh-p. Le « -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 ne possède pas par défaut le nom de bus org.freedodesktop.network1 au démarrage.
Le chercheur a également trouvé plusieurs processus qui s’exécutent en tant qu’utilisateur systemd-network, qui est autorisé à utiliser le nom de bus requis pour exécuter du code arbitraire à partir d’emplacements accessibles en écriture par le monde. Les processus vulnérables incluent plusieurs plugins gpgv, qui sont lancés lors de l’installation ou de la mise à niveau d’apt-get, et le démon Erlang Port Mapper, 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 ne soit pas immédiatement clair quand ni dans quelle version, et les tentatives pour joindre le développeur n’ont pas immédiatement réussi. Les personnes utilisant des versions vulnérables de Linux doivent corriger leurs systèmes dès que possible.