Polkit'i komponendis, mida kasutatakse jaotustes, et võimaldada madala õigusega kasutajatel teostada toiminguid, mis vajavad kõrgendatud õigusi (näiteks USB-mäluseadmiku mountimisel), on tuvastatud haavatavus (CVE-2021-3560), mis võimaldab kohalikel kasutajatel saada süsteemis rootõigused. Haavatavus on kõrvaldatud Polkit'i versioonis 0.119.
Probleem ilmneb alates versioonist 0.113, kuid paljud jaotused, sealhulgas RHEL, Ubuntu, Debian ja SUSE, on haavatava funktsionaalsuse tagasitoomiseks bäkportinud pakette vanematelt Polkit'i versioonidelt (pakettide parandused on juba saadaval jaotustes).
Probleem ilmneb funktsioonis polkit_system_bus_name_get_creds_sync(), mis hankib õiguste tõstmiseks taotluse esitanud protsessi ID-d (uid ja pid). Protsess identifitseeritakse Polkit'i poolt, määrates DBus'is unikaalse nime, mida kasutatakse hiljem privileegide kontrollimiseks. Kui protsess katkestab ühenduse dbus-daemoniga vahetult enne polkit_system_bus_name_get_creds_sync käsitleja käivitamist, saab käsitleja asemel unikaalse nime veakoodi.
Haavatavus tuleneb sellest, et tagastatud veakood ei töödelda õigesti ning funktsioon polkit_system_bus_name_get_creds_sync() tagastab väärtuse TRUE, mitte FALSE, kuigi ei suuda seostada protsessi uid/pid-ga ja kontrollida nõutud privileege. Kood, kust funktsioon polkit_system_bus_name_get_creds_sync() kutsuti, arvab, et kontrollimine oli eduka, ja privileegide tõstmise taotlus tuli rootilt, mitte privilgeeritud kasutajalt, mis võimaldab sooritada privileege käsitlevaid toiminguid täiendava autentimise ja volituste kinnitamiseta.
Allikas: opennet.ru
