Turvaauke PAM-is ja libblockdev-s, mis võimaldavad saada süsteemis root õigusi

Qualys tuvastas haavatavuse (CVE-2025-6019) libblockdev teegis, mis võimaldab udisksi taustprotsessi manipuleerimise kaudu saada süsteemis root õigusi. Eksploidiprototüübi töö demonstreeriti Ubuntu, Debian, Fedora ja openSUSE Leap 15 keskkonnas.

Udisksi protsessi kasutatakse praktiliselt kõikides Linuxi distributsioonides ning see pakub D-Bus liidest salvestusseadmete operatsioonide, nagu monteerimise ja vormindamise, teostamiseks. Udisks kutsub salvestusseadmest tegevusi tehes üles libblockdev teegi funktsioone. Udisksi juurdepääs on vaikimisi avatud ainult kasutajatele, kes töötavad "allow_active" kontekstis ehk neil on füüsiline juurdepääs arvutile ja nad on ühendatud kohaliku konsooli kaudu või käivitavad graafilise sessiooni. Kaugühenduse kaudu, näiteks ssh kaudu, ühenduvad kasutajad ei kuulu sellesse konteksti ja ei saa haavatavust otseselt ära kasutada.

Selle piirangu ületamiseks saab kasutada trikki, mis tõstab autentimise taset «allow_active» kasutades systemctl'i kasutajateenuse käivitamise manipuleerimist, mida polkitd tõlgendab kohalikku seanssi näitavana. Meetodi põhiolemus on, et polkitd määrab füüsilise ligipääsu olemasolu ja määrab taseme «allow_active» jaotades seda kaudsete märkide põhjal, millega saab manipuleerida. Meetodi piirang on see, et polkitd petmiseks peab süsteemis juba olema aktiivne kohaliku kasutaja seanss füüsilise ligipääsuga.

Teiseks viisiks «allow_active» õiguste saamiseks on haavatavuse (CVE-2025-6018) kasutamine PAM (Pluggable Authentication Modules) süsteemis, mille tuvastas Qualyse uurimismeeskond libblockdev haavatavuste analüüsi käigus. See haavatavus võimaldab igal kasutajal, sealhulgas ka SSH kaudu ühendust saanud kasutajal, teostada toiminguid «allow_active» kontekstis. Probleem on spetsiifiline PAM-i seadetele openSUSE Leap 15 ja SUSE Linux Enterprise 15 distributsioonides ning avaldub ainult nendes distributsioonides.

OpenSUSE ja SUSE süsteemis on pam_env moodulis vaikevaateks lue faili ~/.pam_environment. Selle faili kaudu saab kasutaja määrata keskkonnamuutujad XDG_SEAT=seat0 ja XDG_VTNR=1, mida vähendamisel tõlgendatakse kasutaja füüsilise kohaloluna, isegi kui sisse pääse on tegelikult SSH kaudu. Pam_env moodul kutsutakse esile ka SSH ühenduse loomisel Debian 12 ja Ubuntu 24.04 puhul (Debian 13 ja Ubuntu 24.10+ puhul on see keelatud), kuid keskkonnamuutujate määramine neid jaotustes ei saa tõsta juurdepääsu taset 'allow_active', kuna pam_env kutsub esile viimase etapi pärast pam_systemd mooduli laadimist ja määratud keskkonnamuutujad ei saa mõjutada seansi parameetreid.

Mis osas on libblockdev'i haavatavus, siis ründajal on võimalik monteerida juhusliku failisüsteemi pilt loop-režiimis, paigutades sellesse pildifaili SUID root'i märgiga või spetsiaalse seadme (/dev/mem) madala taseme juurdepääsuks diskidele või mälule. Taoliste rünnakute tõkestamiseks monteeritakse failisüsteemi pildid süsteemi poolt nosuid ja nodev lipudega, kuid libblockdev'i haavatavus annab võimaluse monteerida pilt ilma nosuid ja nodev lippudeta. Haavatavuse sisu seisneb selles, et udisks võimaldab kasutajal, kellel on «allow_active» juurdepääsutasemega, muuta oma failisüsteemide suurust ja libblockdev monteerib ajutiselt failisüsteemi selle operatsiooni käigus ilma nosuid ja nodev lippe seadmata.

Seega ründamine põhineb loop-seadmestiku loomisel XFS failisüsteemi pildi alusel, kus asub suid root fail, loop-seadmestiku suuruse muutmisoperatsiooni algatamisel ja jälgimise hetkel, mil see on mountitud katalooge /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)

libblockdev haavatavus on praegu kõrvaldatud vaid patch'idena. Uue paketi versiooni või parandusettepaneku olekut distributsioonides saab kontrollida järgmistelt lehtedelt (kui leht ei ole saadaval, tähendab see, et distributsiooni arendajad ei ole veel probleemiga tegelema asunud): Debian, Ubuntu, Fedora, SUSE/openSUSE, RHEL, Gentoo ja Arch (1, 2). Haavatavuse blokeerimise ajutiste lahenduste jaoks saab muuta juurdepääsureeglit operatsioonile "org.freedesktop.udisks2.modify-device" polkitis, muutes failis /usr/share/polkit-1/actions/org.freedesktop.UDisks2.policy parameetri "allow_active" väärtuseks "yes" asendades selle "auth_admin"-iga.

Lisaks tuleb tähele panna, et paar tundi tagasi avalikustatud haavatavus (CVE-2025-6020) linux-pam paketis võimaldab kohalikel kasutajatel saada root õigusi. Pam_namespace moodul ei kontrollinud õigesti kasutaja kontrolli all olevaid failiteid, mis võimaldas sümboolseid linke manipuleerides ja võistlusolukorda saavutades kirjutada üle privileege saanud faile süsteemis. Haavatavus on kõrvaldatud linux-pam versioonis 1.7.1. Uue paketiversiooni või paranduse olekut jaotustes saab kontrollida järgmiste lehtede kaudu: Debian, Ubuntu, Fedora, SUSE/openSUSE, RHEL, Gentoo ja Arch (1, 2).

Allikas: opennet.ru

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster