Tvrtka Qualys otkrila je ranjivost (CVE-2025-6019) u biblioteci libblockdev, koja omogućuje dobivanje root prava u sustavu manipulacijama s pozadinskim procesom udisks. Prototip exploit-a prikazan je u Ubuntu, Debian, Fedora i openSUSE Leap 15.
Proces udisks primjenjuje se praktički u svim distribucijama Linuxa i pruža D-Bus sučelje za izvršavanje operacija s pohranom, poput montiranja i formatiranja. Za obavljanje radnji s pohranom, udisks poziva funkcije biblioteke libblockdev. Pristup udisks-u je prema zadanim postavkama otvoren samo za korisnike koji rade u kontekstu „allow_active“, tj. koji imaju fizički pristup računalu i povezuju se putem lokalne konzole ili pokreću grafičku sesiju. Korisnici koji se povezuju udaljeno, na primjer putem ssh, ne ulaze u ovaj kontekst i ne mogu izravno eksploatirati ranjivost.
Za zaobilaženje ove ograničenja može se koristiti trik koji omogućuje podizanje razine autentikacije na „allow_active“ manipulacijama s pokretanjem alatom systemctl korisničke usluge, koji će polkitd interpretirati kao znak lokalne sesije. Bit metode sastoji se u tome da polkitd određuje postojanje fizičkog pristupa i dodjeljuje razinu „allow_active“ na temelju neizravnih znakova na koje se može utjecati. Ograničenja metode su u tome što za obmanu polkitd-a treba da u sustavu već bude aktivna sesija lokalnog korisnika s fizičkim pristupom.
Druga metoda dobivanja prava „allow_active“ je eksploatacija ranjivosti (CVE-2025-6018) u PAM-u (Moduli za pluggable autentifikaciju), koju su istraživači iz Qualys-a otkrili prilikom analize ranjivosti u libblockdev. Ranjivost omogućuje bilo kojem korisniku, uključujući onog koji se povezuje putem SSH, da izvršava operacije u kontekstu „allow_active“. Problem je specifičan za postavke PAM-a u openSUSE Leap 15 i SUSE Linux Enterprise 15, i pojavljuje se samo u tim distribucijama.
U modulu pam_env u openSUSE i SUSE, čitanje datoteke ~/.pam_environment je po defaultu uključeno. Kroz ovu datoteku korisnik može postaviti varijable okruženja XDG_SEAT=seat0 i XDG_VTNR=1, koje će pri daljnjoj obradi biti percipirane kao znak fizičke prisutnosti korisnika, čak i ako je prijava izvršena putem SSH. Modul pam_env se također poziva pri spajanju putem SSH u Debianu 12 i Ubuntu 24.04 (u Debianu 13 i Ubuntu 24.10+ je isključen), no postavljanje varijabli okruženja u tim distribucijama ne može se koristiti za podizanje razine pristupa na "allow_active", jer se pam_env poziva u završnoj fazi nakon učitavanja modula pam_systemd, a postavljene varijable okruženja ne mogu utjecati na parametre sesije.
Što se tiče ranjivosti u libblockdev, napadač može priključiti sliku proizvoljnog datotečnog sustava u loop-ključu, smještajući u tu sliku izvršnu datoteku s SUID root oznakom ili posebno uređaj (/dev/mem) za niskorazinski pristup diskovima ili memoriji. Da bi se blokirali takvi napadi, slike FS se montiraju s nosuid i nodev zastavicama, ali ranjivost u libblockdev omogućava montiranje slike bez tih zastavica. Bit ranjivosti je da udisks korisniku s razinom pristupa "allow_active" omogućava promjenu veličine vlastitih datotečnih sustava, a libblockdev privremeno montira FS bez postavljanja nosuid i nodev zastavica tijekom ove operacije.
Tako napad svodi na stvaranje loop-uredaja na temelju slike FS XFS, u kojoj se nalazi suid root datoteka, iniciranje operacije promjene veličine loop-uredaja i praćenje trenutka njegovog montiranja u direktorij /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: Error resizing filesystem on /dev/loop0: Failed to unmount '/dev/loop0' after resizing it: target is busy -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)
Ranljivost u libblockdev do sada je ispravljena samo u obliku zakrpa. Status nove verzije paketa ili pripremu ispravka u distribucijama može se provjeriti na sljedećim stranicama (ako stranica nije dostupna, to znači da developeri distribucije još nisu počeli razmatrati problem): Debian, Ubuntu, Fedora, SUSE/openSUSE, RHEL, Gentoo i Arch (1, 2). Kao zaobilazno rješenje za blokiranje ranjivosti može se promijeniti pravilo pristupa operaciji „org.freedesktop.udisks2.modify-device“ u polkit-u, mijenjajući u datoteci /usr/share/polkit-1/actions/org.freedesktop.UDisks2.policy vrijednost parametra „allow_active“ s „yes“ na „auth_admin“.
Dodatno se može napomenuti ranjivost (CVE-2025-6020) otkrivenu prije nekoliko sati u paketu linux-pam, koja omogućuje lokalnom korisniku da dobije root prava. Modul pam_namespace ispravno nije provjeravao putanje datoteka pod kontrolom korisnika, što je omogućilo manipulacijom simboličnim vezama i postizanjem stanja utrke da dođe do prepisivanja privilegiranih datoteka u sustavu. Ranjivost je ispravljena u izdanju linux-pam 1.7.1. Status nove verzije paketa ili pripremu ispravka u distribucijama može se provjeriti na sljedećim stranicama: Debian, Ubuntu, Fedora, SUSE/openSUSE, RHEL, Gentoo i Arch (1, 2).
Izvor: opennet.ru
