Společnost Qualys objevila zranitelnost (CVE-2025-6019) v knihovně libblockdev, která umožňuje získat práva root v systému manipulacemi s pozadím procesu udisks. Práce prototypu exploitace byla demonstrována na Ubuntu, Debianu, Fedoře a openSUSE Leap 15.
Proces udisks se používá prakticky ve všech distribucích Linuxu a poskytuje rozhraní D-Bus pro provádění operací se zařízeními, jako je montování a formátování. Aby bylo možné provádět operace se zařízeními, udisks volá funkce knihovny libblockdev. Přístup k udisks je ve výchozím nastavení otevřen pouze pro uživatele, kteří pracují v kontextu „allow_active“, tj. mají fyzický přístup k počítači a připojili se prostřednictvím lokální konzole nebo spustili grafickou relaci. Uživatelé připojující se vzdáleně, například přes ssh, se do tohoto kontextu nedostanou a nemohou přímo zranitelnost zneužít.
K obraně tohoto omezení lze použít trik, který zvyšuje úroveň autentizace na „allow_active“ manipulacemi se spuštěním utilitou systemctl uživatelské služby, kterou polkitd vnímá jako znak lokální relace. Podstata metody spočívá v tom, že polkitd určuje přítomnost fyzického přístupu a přiřazuje úroveň „allow_active“ na základě nepřímých znaků, jimiž lze manipulovat. Omezení metody spočívá v tom, že k oklamání polkitd je třeba, aby v systému již byla aktivní relace lokálního uživatele s fyzickým přístupem.
Druhým způsobem, jak získat práva „allow_active“, je zneužití zranitelnosti (CVE-2025-6018) v PAM (Pluggable Authentication Modules), kterou výzkumníci z Qualys objevili během analýzy zranitelnosti v libblockdev. Zranitelnost umožňuje jakémukoli uživateli, včetně těch, kteří se připojují přes SSH, provádět operace v kontextu „allow_active“. Problém je specifický pro nastavení PAM v openSUSE Leap 15 a SUSE Linux Enterprise 15 a projevuje se pouze v těchto distribucích.
V modulu pam_env v openSUSE a SUSE je ve výchozím nastavení povoleno čtení souboru ~/.pam_environment. Skrze tento soubor může uživatel nastavit proměnné prostředí XDG_SEAT=seat0 a XDG_VTNR=1, které budou při dalším zpracování považovány za znak fyzické přítomnosti uživatele, i když je skutečně přihlášen přes SSH. Modul pam_env je také volán při připojení přes ssh v Debianu 12 a Ubuntu 24.04 (v Debianu 13 a Ubuntu 24.10+ je deaktivován), ale nastavení proměnných prostředí v těchto distribucích nemůže být použito pro zvýšení úrovně přístupu na „allow_active“, protože pam_env je volán v konečné fázi po načtení modulu pam_systemd a nastavené proměnné prostředí nemohou ovlivnit parametry relace.
Pokud jde o zranitelnost v libblockdev, útočník může namontovat obraz libovolného souborového systému v loop režimu a umístit do tohoto obrazu spustitelný soubor s příznakem SUID root nebo speciální zařízení (/dev/mem) pro nízkoúrovňový přístup k diskům nebo paměti. Aby se zablokovaly podobné útoky, jsou obrazy FS montovány systémem s příznaky nosuid a nodev, ale zranitelnost v libblockdev umožňuje namontovat obraz bez příznaků nosuid a nodev. Podstatou zranitelnosti je, že udisks umožňuje uživateli s úrovní přístupu „allow_active“ měnit velikost svých souborových systémů a libblockdev během provádění této operace dočasně montuje FS bez nastavení příznaků nosuid a nodev.
Útok tedy spočívá v vytvoření loop zařízení na základě obrazu FS XFS, ve kterém je umístěn suid root soubor, iniciaci operace změny velikosti loop zařízení a sledování okamžiku jeho připojení do adresáře /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)
Zranitelnost v libblockdev byla zatím opravena pouze ve formě patchů. Stav nové verze balíčku nebo přípravy opravy v distribucích lze zkontrolovat na následujících stránkách (pokud stránka není dostupná, znamená to, že vývojáři distribuce se ještě nezačali věnovat problému): Debian, Ubuntu, Fedora, SUSE/openSUSE, RHEL, Gentoo a Arch (1, 2). Jako obchází způsob, jak zablokovat zranitelnost, můžete změnit pravidlo přístupu k operaci „org.freedesktop.udisks2.modify-device“ v polkitu, a to změnou hodnoty parametru „allow_active“ v souboru /usr/share/polkit-1/actions/org.freedesktop.UDisks2.policy z „yes“ na „auth_admin“.
Dále lze zmínit nedávno zveřejněnou zranitelnost (CVE-2025-6020) v balíčku linux-pam, která umožňuje lokálnímu uživateli získat práva root. Modul pam_namespace správně neověřoval cestu k souborům ovládaným uživateli, což umožnilo prostřednictvím manipulace se symbolickými odkazy a dosažením stavu závodu přepsat privilegované soubory v systému. Zranitelnost byla opravena v vydání linux-pam 1.7.1. Stav nové verze balíčku nebo přípravy opravy v distribucích lze zkontrolovat na následujících stránkách: Debian, Ubuntu, Fedora, SUSE/openSUSE, RHEL, Gentoo a Arch (1, 2).
Zdroj: opennet.ru
