L'azienda Qualys ha scoperto una vulnerabilità (CVE-2025-6019) nella libreria libblockdev, che consente di ottenere diritti di root nel sistema attraverso manipolazioni con il processo di sfondo udisks. Il funzionamento del prototipo dell'exploit è stato dimostrato in 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 con le unità, come il montaggio e la formattazione. Per compiere azioni con le unità, udisks chiama le funzioni della libreria libblockdev. L'accesso a udisks per impostazione predefinita è aperto solo agli utenti che operano nel contesto 'allow_active', ovvero coloro che hanno accesso fisico al computer e si sono connessi tramite la console locale o hanno avviato una sessione grafica. Gli utenti connessi da remoto, ad esempio tramite ssh, non rientrano in questo contesto e non possono sfruttare la vulnerabilità direttamente.
Per aggirare questa limitazione, è possibile utilizzare un trucco che consente di elevare il livello di autenticazione a «allow_active» attraverso la manipolazione dell'avvio del servizio utente con `systemctl`, che verrà percepito da polkitd come segno di una sessione locale. L'essenza del metodo è che polkitd determina la presenza di accesso fisico e assegna il livello «allow_active» sulla base di indizi indiretti che possono essere manipolati. Le limitazioni del metodo sono che per ingannare polkitd è necessario che nella macchina sia già attiva una sessione di un utente locale con accesso fisico.
Il secondo metodo per ottenere i diritti «allow_active» consiste nello sfruttare una vulnerabilità (CVE-2025-6018) nei PAM (Pluggable Authentication Modules), scoperta dai ricercatori di Qualys durante l'analisi delle vulnerabilità in libblockdev. Questa vulnerabilità consente a qualsiasi utente, anche a coloro che si connettono tramite SSH, di eseguire operazioni nel contesto di «allow_active». Il problema è specifico per le configurazioni 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 è attivata per default la lettura del file ~/.pam_environment. Attraverso questo file, gli utenti possono impostare le variabili d'ambiente XDG_SEAT=seat0 e XDG_VTNR=1, che verranno riconosciute come segno della presenza fisica dell'utente, anche se l'accesso è stato effettuato tramite SSH. Il modulo pam_env viene chiamato anche durante la connessione SSH in Debian 12 e Ubuntu 24.04 (in Debian 13 e Ubuntu 24.10+ è disattivato), ma la definizione delle variabili d'ambiente in queste distribuzioni non può essere utilizzata per aumentare il livello di accesso a "allow_active", poiché pam_env viene richiamato nella fase finale dopo il caricamento del modulo pam_systemd e le variabili d'ambiente definite non possono influenzare i parametri di sessione.
Per quanto riguarda la vulnerabilità in libblockdev, un aggressore può montare un'immagine di un filesystem arbitrario in modalità loop, posizionando in tale 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 FS vengono montate dal sistema con i flag nosuid e nodev, ma la vulnerabilità in libblockdev consente di montare un'immagine senza i flag nosuid e nodev. La natura della vulnerabilità è che udisks permette a un utente con accesso di tipo "allow_active" di modificare la dimensione dei propri filesystem e libblockdev, durante l'esecuzione di tale operazione, monta temporaneamente il FS senza impostare i flag nosuid e nodev.
L'attacco consiste quindi nella creazione di un dispositivo loop basato sull'immagine del file system XFS, contenente un file suid root, avviando l'operazione di ridimensionamento del dispositivo loop e monitorando il 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 File mappato ./xfs.image come /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 ‘{}’ Errore: GDBus.Error:org.freedesktop.UDisks2.Error.Failed: Errore nel ridimensionamento del file system su /dev/loop0: impossibile smontare ‘/dev/loop0’ dopo il ridimensionamento: target occupato -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) gruppi=65534(nobody)
La vulnerabilità in libblockdev è attualmente corretta solo tramite patch. È possibile verificare lo stato della nuova versione del pacchetto o l'eventuale preparazione di una correzione nelle distribuzioni alle seguenti pagine (se la pagina è inaccessibile, significa che gli sviluppatori della distribuzione non hanno ancora iniziato a considerare 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».
Inoltre, è stata segnalata una vulnerabilità (CVE-2025-6020) nel pacchetto linux-pam, risalente a qualche ora fa, che consente a un utente locale di ottenere privilegi di root. Il modulo pam_namespace non verificava correttamente i percorsi dei file sotto il controllo dell'utente, permettendo, attraverso manipolazioni di link simbolici e raggiungendo uno stato di race condition, di sovrascrivere file privilegiati nel sistema. La vulnerabilità è stata risolta nella versione linux-pam 1.7.1. È possibile controllare lo stato della nuova versione del pacchetto o della preparazione della correzione nelle distribuzioni alle seguenti pagine: Debian, Ubuntu, Fedora, SUSE/openSUSE, RHEL, Gentoo e Arch (1, 2).
Fonte: opennet.ru
