I ricercatori di sicurezza di Microsoft hanno identificato due vulnerabilità (CVE-2022-29799, CVE-2022-29800) nel servizio networkd-dispatcher, soprannominate Nimbuspwn, che consentono a un utente non privilegiato di eseguire comandi arbitrari con diritti di root. Il problema è stato risolto nella versione 2.2 di networkd-dispatcher. 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, compreso Ubuntu, che utilizza il processo in background systemd-networkd per configurare le impostazioni di rete, e svolge funzioni simili a quelle di NetworkManager-dispatcher, ovvero esegue script quando cambia lo stato della connessione di rete, ad esempio, viene utilizzato per avviare VPN dopo l'installazione della connessione di rete principale.
Un processo in background associato a networkd-dispatcher viene eseguito con privilegi di root e riceve segnali di eventi tramite il bus D-Bus. Le informazioni sugli eventi legati al cambiamento dello stato delle connessioni di rete vengono inviate dal servizio systemd-networkd. Il problema è che gli utenti non privilegiati possono generare un evento per uno stato inesistente e avviare uno script che verrà eseguito con privilegi di root.
Systemd-networkd è progettato per eseguire solo script gestori di sistema, memorizzati nella directory /etc/networkd-dispatcher e non modificabili dall'utente. Tuttavia, a causa di una vulnerabilità (CVE-2022-29799) nel codice di gestione dei percorsi dei file, era possibile uscire dal catalogo di base e avviare script arbitrari. In particolare, nella formazione del percorso del file per lo script venivano utilizzati i valori OperationalState e AdministrativeState passati tramite D-Bus, nei quali non veniva effettuata la pulizia dei caratteri speciali. Un attaccante poteva generare un proprio stato, il cui nome conteneva caratteri «../» e reindirizzare la chiamata a networkd-dispatcher in un'altra directory.
La seconda vulnerabilità (CVE-2022-29800) è legata a una condizione di competizione: tra il controllo dei parametri dello script (appartenenza a root) e il suo avvio c'era un breve intervallo di tempo sufficiente per sostituire il file e bypassare la verifica della sua appartenenza all'utente root. Inoltre, nel networkd-dispatcher mancava il controllo per i collegamenti simbolici, anche durante l'esecuzione degli 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 lo stesso nome 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, nel quale viene inserito il codice che l'attaccante desidera eseguire.
- Il processo networkd-dispatcher riceve un segnale tramite D-Bus che indica lo stato operativo con il valore «../../../tmp/nimbuspwn/poc». Per inviare il segnale nello spazio dei nomi «org.freedesktop.network1», è stata utilizzata l'opzione di collegare i propri gestori a systemd-networkd, ad esempio, attraverso manipolazioni di gpgv o epmd, oppure si può approfittare del fatto che systemd-networkd non è avviato di default (ad esempio, in Linux Mint).
- Una volta ricevuto il segnale, Networkd-dispatcher crea un elenco di file eseguibili di proprietà dell'utente root disponibili nella directory «/etc/networkd-dispatcher/../../../tmp/nimbuspwn/poc.d», che in realtà fa riferimento a «/sbin».
- Nel momento in cui l'elenco dei file viene 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à con i diritti di root lo script ospitato dall'attaccante.

Fonte: opennet.ru
