Исследователи безопасности из компании Microsoft выявили две уязвимости (CVE-2022-29799, CVE-2022-29800) в сервисе networkd-dispatcher, получившие кодовое имя Nimbuspwn и позволяющие непривилегированному пользователю выполнить произвольные команды с правами root. Проблема устранена в выпуске networkd-dispatcher 2.2. Информации о публикации обновлений дистрибутивами пока нет (Debian, RHEL, Fedora, SUSE, Ubuntu, Arch Linux).
Networkd-dispatcher применяется во многих дистрибутивах LinuxY compris Ubuntu, использующих для настройки параметров сети фоновый процесс systemd-networkd, и выполняет функции сходные с NetworkManager-dispatcher, т.е. занимается запуском скриптов при изменении состояния сетевого соединения, например, применяется для запуска VPN après avoir établi la connexion réseau de base.
Le processus d'arrière-plan associé à networkd-dispatcher s'exécute en tant que root et reçoit les signaux d'événement via le D-Bus. Les informations sur les événements liés aux changements dans l'état des connexions réseau sont envoyées par le service systemd-networkd. Le problème est que des utilisateurs non privilégiés peuvent générer un événement d'état inexistant et déclencher l'exécution de leur script en tant que root.
Systemd-networkd est conçu pour exécuter uniquement les scripts du gestionnaire système situés dans le répertoire /etc/networkd-dispatcher et non accessibles pour le remplacement par l'utilisateur, mais en raison d'une vulnérabilité (CVE-2022-29799) dans le code de traitement du chemin de fichier, il y avait un possibilité d'un répertoire de base hors limites et de lancement de scripts arbitraires. En particulier, lors de la formation du chemin du fichier vers le script, les valeurs OperationalState et AdministrativeState transmises via D-Bus ont été utilisées, dans lesquelles les caractères spéciaux n'ont pas été effacés. Un attaquant pourrait générer son propre état avec les caractères « ../ » dans son nom et rediriger l'appel networkd-dispatcher vers un autre répertoire.
La deuxième vulnérabilité (CVE-2022-29800) est liée à une condition de concurrence critique : entre la vérification des paramètres du script (appartenant à root) et son exécution, il s'est écoulé un court laps de temps, suffisant pour remplacer le fichier et contourner la vérification si le le script appartient à l'utilisateur root. De plus, networkd-dispatcher n'a pas vérifié les liens symboliques, y compris lors de l'exécution de scripts via l'appel subprocess.Popen, ce qui a considérablement simplifié l'organisation de l'attaque.
Technique opératoire :
- Un répertoire « /tmp/nimbuspwn » et un lien symbolique « /tmp/nimbuspwn/poc.d » sont créés pointant vers le répertoire « /sbin », qui est utilisé pour vérifier les fichiers exécutables appartenant à root.
- Pour les fichiers exécutables de « /sbin », des fichiers du même nom sont créés dans le répertoire « /tmp/nimbuspwn », par exemple, pour le fichier « /sbin/vgs », un fichier exécutable « /tmp/nimbuspwn/vgs » est créé, appartenant à un utilisateur non privilégié, dans lequel est placé le code que l'attaquant souhaite exécuter.
- По D-Bus процессу networkd-dispatcher отправляется сигнал с указанием в OperationalState значения «../../../tmp/nimbuspwn/poc». Для отправки сигнала в пространстве имён «org.freedesktop.network1» использовалась возможность подключения своих обработчиков к systemd-networkd, например, через манипуляции с gpgv или epmd, или можно воспользоваться тем, что systemd-networkd не запущен по умолчанию (например, в Linux Mint).
- Après avoir reçu le signal, Networkd-dispatcher crée une liste de fichiers exécutables appartenant à l'utilisateur root et disponibles dans le répertoire « /etc/networkd-dispatcher/../../../tmp/nimbuspwn/poc.d », qui renvoie en fait à "/sbin".
- Au moment où la liste des fichiers est reçue, mais que le script n'a pas encore été lancé, le lien symbolique est redirigé de « /tmp/nimbuspwn/poc.d » vers « /tmp/nimbuspwn » et networkd-dispatcher lancera le script hébergé par l'attaquant avec les droits root.

Source: opennet.ru
