Vulnerabilità della root locale nel toolkit di gestione dei pacchetti Snap

Qualys ha identificato due vulnerabilità (CVE-2021-44731, CVE-2021-44730) nell'utilità snap-confine, fornita con il flag SUID root e richiamata dal processo snapd per creare un ambiente eseguibile per le applicazioni fornite in pacchetti autonomi nel formato snap. Le vulnerabilità consentono a un utente locale senza privilegi di eseguire codice con privilegi di root sul sistema. I problemi sono stati risolti nell'aggiornamento del pacchetto Snapd di oggi per Ubuntu 21.10, 20.04 e 18.04.

La prima vulnerabilità (CVE-2021-44730) consente un attacco attraverso la manipolazione del collegamento reale, ma richiede la disabilitazione della protezione del collegamento reale del sistema (impostando sysctl fs.protected_hardlinks su 0). Il problema è causato da una verifica errata della posizione dei file eseguibili dei programmi helper snap-update-ns e snap-discard-ns eseguiti come root. Il percorso di questi file è stato calcolato nella funzione sc_open_snapd_tool() in base al proprio percorso da /proc/self/exe, che consente di creare un collegamento fisico a snap-confine nella directory e posizionare le proprie versioni dello snap- update-ns e le utilità snap- in questa directory.scart-ns. Dopo l'esecuzione tramite un collegamento reale, snap-confine con diritti di root lancerà i file snap-update-ns e snap-discard-ns dalla directory corrente, sostituiti dall'aggressore.

La seconda vulnerabilità è causata da una race condition e può essere sfruttata nella configurazione predefinita di Ubuntu Desktop. Affinché l'exploit funzioni correttamente su Ubuntu Server, è necessario selezionare uno dei pacchetti dalla sezione "Featured Server Snaps" durante l'installazione. La race condition è evidente nella funzione setup_private_mount() chiamata durante la preparazione dello spazio dei nomi del punto di montaggio per il pacchetto snap. Questa funzione crea una directory temporanea "/tmp/snap.$SNAP_NAME/tmp" o ne utilizza una esistente per collegare e montare le directory per un pacchetto snap al suo interno.

Poiché il nome della directory temporanea è prevedibile, un utente malintenzionato può sostituirne il contenuto con un collegamento simbolico dopo aver controllato il proprietario, ma prima di chiamare la chiamata di sistema mount. Ad esempio, puoi creare un collegamento simbolico "/tmp/snap.lxd/tmp" nella directory /tmp/snap.lxd che punta a una directory arbitraria e una chiamata a mount() seguirà il collegamento simbolico e monterà la directory nella snap spazio dei nomi. In modo simile, puoi montare i tuoi contenuti in /var/lib e, sostituendo /var/lib/snapd/mount/snap.snap-store.user-fstab, organizzare il montaggio della tua directory /etc nello spazio dei nomi di il pacchetto snap da cui organizzare il caricamento della libreria con diritti di root sostituendo /etc/ld.so.preload.

Va notato che la creazione di un exploit si è rivelata un compito non banale, poiché l'utilità snap-confine è scritta in Go utilizzando tecniche di programmazione sicure, ha una protezione basata sui profili AppArmor, filtra le chiamate di sistema in base al meccanismo seccomp e utilizza lo spazio dei nomi del montaggio per l'isolamento. Tuttavia, i ricercatori sono riusciti a preparare un exploit funzionante per ottenere i diritti di root sul sistema. Il codice dell'exploit verrà pubblicato entro poche settimane dopo che gli utenti avranno installato gli aggiornamenti forniti.

Fonte: opennet.ru

Aggiungi un commento