Vulnerabilità in networkd-dispatcher che consentono l'accesso root

I ricercatori di sicurezza di Microsoft hanno identificato due vulnerabilità (CVE-2022-29799, CVE-2022-29800) nel servizio networkd-dispatcher, nome in codice Nimbuspwn, che consentono a un utente non privilegiato di eseguire comandi arbitrari con privilegi di root. Il problema è stato risolto nella versione di networkd-dispatcher 2.2. Non ci sono ancora informazioni sulla pubblicazione di aggiornamenti da parte delle distribuzioni (Debian, RHEL, Fedora, SUSE, Ubuntu, Arch Linux).

Networkd-dispatcher è utilizzato in molte distribuzioni Linux, incluso Ubuntu, che utilizzano il processo in background systemd-networkd per configurare i parametri di rete ed esegue funzioni simili a NetworkManager-dispatcher, ad es. è impegnato nell'avvio di script quando cambia lo stato di una connessione di rete, ad esempio, viene utilizzato per avviare una VPN dopo che è stata stabilita la connessione di rete principale.

Il processo in background associato a networkd-dispatcher viene eseguito come root e riceve segnali di eventi tramite D-Bus. Le informazioni sugli eventi relativi ai cambiamenti nello stato delle connessioni di rete vengono inviate dal servizio systemd-networkd. Il problema è che gli utenti senza privilegi possono generare un evento di stato inesistente e attivare l'esecuzione del loro script come root.

Systemd-networkd è progettato per eseguire solo gli script del gestore di sistema situati nella directory /etc/networkd-dispatcher e non disponibili per la sostituzione da parte dell'utente, ma a causa di una vulnerabilità (CVE-2022-29799) nel codice di elaborazione del percorso del file, si è verificata una possibilità di una directory di base fuori limite e di lancio di script arbitrari. In particolare, durante la formazione del percorso del file per lo script, sono stati utilizzati i valori OperationalState e AdministrativeState trasmessi tramite D-Bus, in cui i caratteri speciali non sono stati cancellati. L'aggressore potrebbe generare il proprio stato, il cui nome contiene i caratteri "../" e reindirizzare la chiamata networkd-dispatcher a un'altra directory.

La seconda vulnerabilità (CVE-2022-29800) è legata ad una race condition: tra il controllo dei parametri dello script (appartenente a root) e l'esecuzione dello stesso, è trascorso un breve periodo di tempo, sufficiente per sostituire il file e bypassare il controllo se il lo script appartiene all'utente root. Inoltre, networkd-dispatcher non ha verificato la presenza di collegamenti simbolici, nemmeno durante l'esecuzione di script tramite la chiamata subprocess.Popen, il che ha notevolmente semplificato l'organizzazione dell'attacco.

Tecnica operativa:

  • Vengono creati una directory "/tmp/nimbuspwn" e un collegamento simbolico "/tmp/nimbuspwn/poc.d" che punta alla directory "/sbin", che viene utilizzato per verificare la presenza di file eseguibili di proprietà di root.
  • Per i file eseguibili da "/sbin", vengono creati file con lo stesso nome nella directory "/tmp/nimbuspwn", ad esempio, per il file "/sbin/vgs" viene creato un file eseguibile "/tmp/nimbuspwn/vgs" creato, di proprietà di un utente non privilegiato, in cui viene inserito il codice che l'aggressore vuole eseguire.
  • Un segnale viene inviato tramite D-Bus al processo networkd-dispatcher indicando il valore "../../../tmp/nimbuspwn/poc" in OperationalState. Per inviare un segnale nello spazio dei nomi "org.freedesktop.network1", è stata utilizzata la possibilità di connettere i suoi gestori a systemd-networkd, ad esempio, attraverso manipolazioni con gpgv o epmd, oppure è possibile sfruttare il fatto che systemd-networkd non è in esecuzione per impostazione predefinita (ad esempio, su Linux Mint).
  • Dopo aver ricevuto il segnale, Networkd-dispatcher crea un elenco di file eseguibili di proprietà dell'utente root e disponibili nella directory “/etc/networkd-dispatcher/../../../tmp/nimbuspwn/poc.d”, che in realtà si collega a "/sbin".
  • Nel momento in cui viene ricevuto l'elenco dei file, ma lo script non è stato ancora avviato, il collegamento simbolico viene reindirizzato da “/tmp/nimbuspwn/poc.d” a “/tmp/nimbuspwn” e networkd-dispatcher avvierà il file script ospitato dall'aggressore con diritti di root.

Vulnerabilità in networkd-dispatcher che consentono l'accesso root


Fonte: opennet.ru

Aggiungi un commento