Vulnerabilità in PAM e libblockdev che consentono di ottenere privilegi di root nel sistema

Qualys ha identificato una vulnerabilità (CVE-2025-6019) nella libreria libblockdev che consente di ottenere privilegi di root nel sistema tramite manipolazioni con il processo in background udisks. Il prototipo dell'exploit è stato dimostrato in Ubuntu, Debian, Fedora e openSUSE Leap 15.

Il processo udisks è utilizzato da quasi tutte le distribuzioni Linux e fornisce un'interfaccia D-Bus per eseguire operazioni di archiviazione come il montaggio e la formattazione. Per eseguire azioni sui dispositivi di archiviazione, udisks richiama le funzioni della libreria libblockdev. Per impostazione predefinita, udisks è accessibile solo agli utenti che eseguono il contesto "allow_active", ovvero coloro che hanno accesso fisico al computer e sono connessi tramite una console locale o una sessione grafica. Gli utenti che si connettono da remoto, ad esempio tramite ssh, non rientrano in questo contesto e non possono sfruttare direttamente la vulnerabilità.

Per aggirare questa limitazione, è possibile utilizzare un trucco che consente di aumentare il livello di autenticazione a "allow_active" manipolando l'avvio del servizio utente tramite l'utilità systemctl, che polkitd percepirà come un segnale di sessione locale. L'essenza del metodo è che polkitd determina la presenza di accesso fisico e assegna il livello "allow_active" in base a segnali indiretti che possono essere influenzati. Le limitazioni del metodo sono che per ingannare polkitd è necessario che una sessione utente locale con accesso fisico sia già attiva nel sistema.

Il secondo metodo per ottenere i diritti "allow_active" consiste nello sfruttare una vulnerabilità (CVE-2025-6018) in PAM (Pluggable Authentication Modules), scoperta dai ricercatori Qualys durante l'analisi di una vulnerabilità in libblockdev. La vulnerabilità consente a qualsiasi utente, incluso uno connesso tramite SSH, di eseguire operazioni nel contesto "allow_active". Il problema è specifico delle impostazioni PAM in openSUSE Leap 15 e SUSE Linux Enterprise 15 e si manifesta solo in queste distribuzioni.

Il modulo pam_env in openSUSE e SUSE ha la lettura del file ~/.pam_environment abilitata di default. Tramite questo file, l'utente può impostare le variabili d'ambiente XDG_SEAT=seat0 e XDG_VTNR=1, che verranno interpretate come un segno della presenza fisica dell'utente durante l'elaborazione successiva, anche se l'accesso è stato effettivamente effettuato tramite SSH. Il modulo pam_env viene chiamato anche durante la connessione tramite SSH in Debian 12 e Ubuntu 24.04 (è disabilitato in Debian 13 e Ubuntu 24.10+), ma l'impostazione 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 aggressore può montare un'immagine di un file system arbitrario in modalità loop, posizionando un file eseguibile con il flag di root SUID o un dispositivo speciale (/dev/mem) per l'accesso di basso livello ai dischi o alla memoria in questa immagine. Per bloccare tali attacchi, le immagini dei file system vengono montate dal sistema con i flag nosuid e nodev, ma la vulnerabilità in libblockdev permette di montare un'immagine senza i flag nosuid e nodev. L'essenza della vulnerabilità è che udisks consente a un utente con livello di accesso "allow_active" di modificare le dimensioni dei propri file system, e libblockdev monta temporaneamente il file system senza impostare i flag nosuid e nodev durante questa operazione.

Pertanto, l'attacco si riduce alla creazione di un dispositivo loop basato su un'immagine del file system XFS che contiene un file root suid, all'avvio di un'operazione per modificare le dimensioni del dispositivo loop e al 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 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 durante il ridimensionamento del file system su /dev/loop0: Impossibile smontare '/dev/loop0' dopo il ridimensionamento: la destinazione è occupata -r-sr-xr-x. 1 root root 1406608 18 giu 09:42 /tmp/blockdev.RSM429/bash vittima> /tmp/blockdev*/bash -p vittima# id uid=65534(nessuno) gid=65534(nessuno) euid=0(root) gruppi=65534(nessuno)

La vulnerabilità in libblockdev è stata finora solo risolta con una patch. È possibile verificare lo stato di una nuova versione del pacchetto o la preparazione di una correzione nelle distribuzioni sulle seguenti pagine (se la pagina non è disponibile, 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 per l'operazione "org.freedesktop.udisks2.modify-device" in polkit modificando il valore del parametro "allow_active" da "yes" ad "auth_admin" nel file /usr/share/polkit-1/actions/org.freedesktop.UDisks2.policy.

Inoltre, una vulnerabilità (CVE-2025-6020) nel pacchetto linux-pam, divulgata poche ore fa, consente a un utente locale di ottenere privilegi di root. Il modulo pam_namespace non controllava correttamente i percorsi dei file controllati dall'utente, il che consentiva la sovrascrittura di file con privilegi nel sistema tramite manipolazioni con link simbolici e il raggiungimento di una race condition. La vulnerabilità è stata risolta nella versione 1.7.1 di linux-pam. È possibile verificare lo stato di una nuova versione del pacchetto o la preparazione di una correzione nelle distribuzioni sulle seguenti pagine: Debian, Ubuntu, Fedora, SUSE/openSUSE, RHEL, Gentoo e Arch (1, 2).

Fonte: opennet.ru

Aggiungi un commento