L'azienda Qualys ha identificato due vulnerabilità (CVE-2021-44731, CVE-2021-44730) nell'utilità snap-confine, fornita con il flag SUID root e chiamata dal processo snapd per formare l'ambiente di esecuzione per le applicazioni fornite in pacchetti autonomi nel formato snap. Le vulnerabilità consentono a un utente locale non privilegiato di eseguire codice con i diritti di root nel sistema. I problemi sono stati risolti nell'aggiornamento odierno dei pacchetti snapd per Ubuntu 21.10, 20.04 e 18.04.
La prima vulnerabilità (CVE-2021-44730) consente di effettuare un attacco attraverso la manipolazione dei hard link, ma richiede la disattivazione della protezione del sistema per gli hard link (impostazione di sysctl fs.protected_hardlinks a 0). Il problema è causato da un controllo errato della posizione dei file eseguibili dei programmi ausiliari snap-update-ns e snap-discard-ns, eseguiti con privilegi di root. Il percorso a questi file veniva calcolato nella funzione sc_open_snapd_tool() sulla base del proprio percorso da /proc/self/exe, permettendo di creare un hard link a snap-confine nella propria directory e di posizionare in questa directory le proprie versioni degli strumenti snap-update-ns e snap-discard-ns. Dopo l'avvio tramite l'hard link, snap-confine con privilegi di root eseguirà i file snap-update-ns e snap-discard-ns forniti dall'attaccante dalla directory corrente.
La seconda vulnerabilità è causata da una condizione di gara e può essere sfruttata nella configurazione di Ubuntu Desktop predefinita. Per un funzionamento riuscito dell'exploit su Ubuntu Server è necessario scegliere durante l'installazione uno dei pacchetti della sezione "Featured Server Snaps". La condizione di gara si manifesta nella funzione setup_private_mount(), chiamata durante la preparazione dello spazio dei nomi dei punti di montaggio per il pacchetto snap. Questa funzione crea una directory temporanea "/tmp/snap.$SNAP_NAME/tmp" o utilizza una già esistente per il bind-mount di directory per il pacchetto in formato snap.
Poiché il nome della cartella temporanea è prevedibile, un attaccante può sostituirne il contenuto con un link simbolico nel momento successivo al controllo del proprietario, ma prima della chiamata di sistema mount. Ad esempio, si può creare nella cartella /tmp/snap.lxd un link simbolico «/tmp/snap.lxd/tmp», che punta a una cartella arbitraria, e la chiamata a mount() seguirà il link simbolico e monterà la cartella nello spazio dei nomi snap. Allo stesso modo, si può montare il proprio contenuto in /var/lib e sostituendo /var/lib/snapd/mount/snap.snap-store.user-fstab organizzare il montaggio della propria cartella /etc nello spazio del pacchetto snap per consentire il caricamento della propria libreria con i diritti di root attraverso la sostituzione di /etc/ld.so.preload.
Si osserva che la creazione di un exploit si è rivelata un compito non banale, poiché l'utilità snap-confine è scritta in Go utilizzando tecniche di programmazione sicura, ha protezioni basate su profili AppArmor, filtra le chiamate di sistema tramite il meccanismo seccomp e applica uno spazio dei nomi per il montaggio. Tuttavia, i ricercatori sono riusciti a preparare un exploit funzionante per ottenere i diritti di root nel sistema. Il codice dell'exploit sarà pubblicato tra alcune settimane, dopo che gli utenti avranno installato gli aggiornamenti forniti.
Fonte: opennet.ru
