L'azienda Qualys ha identificato una vulnerabilità (CVE-2025-6019) nella libreria libblockdev, che consente, attraverso manipolazioni con il processo in background udisks, di ottenere diritti di root nel sistema. È stata dimostrata la funzionalità di un prototipo di exploit su Ubuntu, Debian, Fedora e openSUSE Leap 15.
Il processo udisks è utilizzato praticamente in tutte le distribuzioni Linux e fornisce un'interfaccia D-Bus per eseguire operazioni sui dispositivi di archiviazione, come il montaggio e la formattazione. Per eseguire operazioni sui dispositivi, udisks richiama funzioni della libreria libblockdev. L'accesso a udisks è di default aperto solo per gli utenti che operano nel contesto "allow_active", cioè che hanno accesso fisico al computer e si sono collegati tramite console locale o hanno avviato una sessione grafica. Gli utenti che si connettono in remoto, ad esempio via ssh, non rientrano in questo contesto e non possono sfruttare direttamente la vulnerabilità.
Per aggirare questa limitazione è possibile utilizzare un trucco che consente di elevare il livello di autenticazione a "allow_active" attraverso la manipolazione dell'avvio di un'utility systemctl di un servizio utente, che polkitd percepirà come segno di una sessione locale. La sostanza del metodo è che polkitd determina la presenza di accesso fisico e assegna il livello "allow_active" sulla base di segnali indiretti sui quali si può influire. Le limitazioni del metodo sono che per ingannare polkitd è necessario che vi sia già attiva una sessione di un utente locale con accesso fisico.
Un secondo modo per ottenere i diritti "allow_active" è sfruttare una vulnerabilità (CVE-2025-6018) in PAM (Pluggable Authentication Modules), scoperta dai ricercatori di Qualys durante l'analisi della vulnerabilità in libblockdev. La vulnerabilità consente a qualsiasi utente, incluso chi si connette tramite SSH, di eseguire operazioni nel contesto "allow_active". Il problema è specifico per le configurazioni di PAM in openSUSE Leap 15 e SUSE Linux Enterprise 15, e si manifesta solo in queste distribuzioni.
Nel modulo pam_env in openSUSE e SUSE, per impostazione predefinita, è abilitata la lettura del file ~/.pam_environment. Attraverso questo file, l'utente può impostare le variabili d'ambiente XDG_SEAT=seat0 e XDG_VTNR=1, che durante le fasi successive verranno interpretate come segno della presenza fisica dell'utente, anche se l'accesso è avvenuto tramite SSH. Il modulo pam_env viene anche chiamato durante la connessione SSH su Debian 12 e Ubuntu 24.04 (in Debian 13 e Ubuntu 24.10+ è disabilitato), ma la modifica delle variabili d'ambiente in queste distribuzioni non può essere utilizzata per aumentare il livello di accesso a "allow_active", poiché pam_env viene chiamato nella fase finale dopo il caricamento del modulo pam_systemd e le variabili d'ambiente impostate non possono influenzare i parametri della sessione.
Per quanto riguarda la vulnerabilità in libblockdev, un attaccante può montare un'immagine di un file system arbitrario in modalità loop, posizionando in questa immagine un file eseguibile con il flag SUID root o un dispositivo speciale (/dev/mem) per l'accesso a basso livello ai dischi o alla memoria. Per bloccare tali attacchi, le immagini del file system vengono montate dal sistema con i flag nosuid e nodev, ma la vulnerabilità in libblockdev consente di montare l'immagine senza i flag nosuid e nodev. Il problema della vulnerabilità è che udisks consente a un utente con accesso "allow_active" di modificare le dimensioni dei propri file system e libblockdev, durante l'esecuzione di tale operazione, monta temporaneamente il file system senza impostare i flag nosuid e nodev.
Pertanto, l'attacco si configura come la creazione di un dispositivo loop basato su un'immagine del file system XFS, in cui è posizionato un file suid root, l'inizio dell'operazione di modifica delle dimensioni del dispositivo loop e il monitoraggio del momento in cui viene montato nella directory /tmp/blockdev*: victim> killall -KILL gvfs-udisks2-volume-monitor victim> udisksctl loop-setup —file ./xfs.image —no-user-interaction Mapped file ./xfs.image as /dev/loop0. victim> while true; do /tmp/blockdev*/bash -c ‘sleep 10; ls -l /tmp/blockdev*/bash’ && break; done 2>/dev/null & victim> gdbus call —system —dest org.freedesktop.UDisks2 —object-path /org/freedesktop/UDisks2/block_devices/loop0 —method org.freedesktop.UDisks2.Filesystem.Resize 0 ‘{}’ Error: GDBus.Error:org.freedesktop.UDisks2.Error.Failed: Errore nel ridimensionamento del file system su /dev/loop0: impossibile smontare ‘/dev/loop0’ dopo averlo ridimensionato: target in uso -r-sr-xr-x. 1 root root 1406608 Jun 18 09:42 /tmp/blockdev.RSM429/bash victim> /tmp/blockdev*/bash -p victim# id uid=65534(nobody) gid=65534(nobody) euid=0(root) groups=65534(nobody)
La vulnerabilità in libblockdev è stata attualmente corretta solo tramite patch. È possibile controllare lo stato della nuova versione del pacchetto o della preparazione di una correzione nei seguenti distributivi (se la pagina non è accessibile, significa che gli sviluppatori del distributivo non hanno ancora iniziato a esaminare il problema): Debian, Ubuntu, Fedora, SUSE/openSUSE, RHEL, Gentoo e Arch (1, 2). Come soluzione alternativa per bloccare la vulnerabilità, è possibile modificare la regola di accesso all'operazione «org.freedesktop.udisks2.modify-device» in polkit, cambiando nel file /usr/share/polkit-1/actions/org.freedesktop.UDisks2.policy il valore del parametro «allow_active» da «yes» a «auth_admin».
In aggiunta, si segnala una vulnerabilità emersa alcune ore fa (CVE-2025-6020) nel pacchetto linux-pam, che consente a un utente locale di ottenere diritti di root. Il modulo pam_namespace non controllava correttamente i percorsi dei file controllati dall'utente, consentendo attraverso manomissioni con collegamenti simbolici e raggiungendo uno stato di race di sovrascrivere file privilegiati nel sistema. La vulnerabilità è stata corretta nella versione linux-pam 1.7.1. È possibile controllare lo stato della nuova versione del pacchetto o della preparazione di una correzione nei seguenti distributivi: Debian, Ubuntu, Fedora, SUSE/openSUSE, RHEL, Gentoo e Arch (1, 2).
Fonte: opennet.ru
