I ricercatori sulla sicurezza di Microsoft hanno identificato due vulnerabilità (CVE-2022-29799, CVE-2022-29800) nel servizio networkd-dispatcher, soprannominato Nimbuspwn, che consentono a un utente non privilegiato di eseguire comandi arbitrari con diritti di root. Il problema è stato risolto con il rilascio di networkd-dispatcher 2.2. Non ci sono ancora informazioni sulla pubblicazione degli aggiornamenti da parte delle distribuzioni (Debian, RHEL, Fedora, SUSE, Ubuntu, Arch Linux).
Networkd-dispatcher è utilizzato in molte distribuzioni Linux, incluso Ubuntu, che impiegano il processo in background systemd-networkd per la configurazione delle impostazioni di rete, e svolge funzioni simili a NetworkManager-dispatcher, cioè avvia script quando cambia lo stato della connessione di rete, ad esempio, viene utilizzato per avviare VPN dopo l'installazione della connessione di rete principale.
Il processo in background associato a networkd-dispatcher viene eseguito con diritti di root e riceve segnali sugli eventi tramite il bus D-Bus. Le informazioni sugli eventi relativi alla modifica dello stato delle connessioni di rete vengono inviate dal servizio systemd-networkd. Il problema è che gli utenti non privilegiati possono generare un evento su uno stato inesistente e avviare il proprio script che verrà eseguito con diritti di root.
Systemd-networkd è progettato per eseguire solo script di gestione di sistema, situati nella directory /etc/networkd-dispatcher e non sostituibili dall'utente, ma a causa di una vulnerabilità (CVE-2022-29799) nel codice di gestione del percorso del file, era possibile uscire al di fuori della directory base e avviare script arbitrari. In particolare, nella generazione del percorso del file allo script venivano utilizzati i valori OperationalState e AdministrativeState trasmessi tramite D-Bus, nei quali non venivano ripuliti i caratteri speciali. L'attaccante poteva generare un proprio stato, il cui nome conteneva caratteri «..\/» e reindirizzare la richiesta di networkd-dispatcher a un'altra directory.
La seconda vulnerabilità (CVE-2022-29800) è legata a una condizione di corsa: tra il controllo dei parametri dello script (appartenenza a root) e la sua esecuzione c'era un breve intervallo di tempo sufficiente per sostituire il file e superare il controllo sull'appartenenza dello script all'utente root. Inoltre, in networkd-dispatcher non era presente un controllo dei link simbolici, compresa l'esecuzione di script tramite la chiamata subprocess.Popen, il che ha notevolmente semplificato l'organizzazione dell'attacco.
Tecnica di sfruttamento:
- Viene creato il catalogo "/tmp/nimbuspwn" e un collegamento simbolico "\/tmp\/nimbuspwn\/poc.d", che punta al catalogo "/sbin", utilizzato per superare il controllo della presenza di file eseguibili di proprietà di root.
- Per i file eseguibili in "\/sbin" vengono creati file con nomi analoghi nel catalogo "/tmp/nimbuspwn", ad esempio, per il file "\/sbin\/vgs" viene creato un file eseguibile "\/tmp\/nimbuspwn\/vgs", di proprietà di un utente non privilegiato, in cui viene inserito il codice che l'attaccante desidera eseguire.
- Tramite D-Bus, il processo networkd-dispatcher invia un segnale con il valore "..\/..\/..\/tmp\/nimbuspwn\/poc" in OperationalState. Per inviare il segnale nello spazio dei nomi "org.freedesktop.network1" è stata utilizzata la possibilità di collegare i propri gestori a systemd-networkd, ad esempio, tramite manipolazioni con gpgv o epmd, oppure si può sfruttare il fatto che systemd-networkd non è avviato per impostazione predefinita (ad esempio in Linux Mint).
- Dopo aver ricevuto il segnale, networkd-dispatcher compila un elenco di file eseguibili di proprietà dell'utente root disponibili nel catalogo "\/etc\/networkd-dispatcher\/..\/..\/..\/tmp\/nimbuspwn\/poc.d", che in realtà fa riferimento a "\/sbin".
- Nel momento in cui l'elenco dei file è stato ottenuto, ma lo script non è ancora stato avviato, il collegamento simbolico viene reindirizzato da "\/tmp\/nimbuspwn\/poc.d" a "\/tmp\/nimbuspwn" e networkd-dispatcher avvierà lo script, ospitato dall'attaccante, con i privilegi di root.

Fonte: opennet.ru
