Në komponentin Polkit, i përdorur në shpërndarjet për organizimin e ekzekutimit të veprimeve nga përdoruesit pa privilegje që kërkojnë të drejta të përmirësuara (për shembull, montimi i një USB), është identifikuar një dobësi (CVE-2021-3560) e cila lejon që një përdorues lokal të fitojë të drejtat e root në sistem. Dobësia është rregulluar në versionin Polkit 0.119.
Problemi shfaqet që nga versioni 0.113, por shumë shpërndarje, duke përfshirë RHEL, Ubuntu, Debian dhe SUSE, kanë bërë backport të funksionalitetit të dobët në paketa të bazuara në versione më të vjetra të Polkit (rregullimet e paketeve janë tashmë në dispozicion në shpërndarje).
Problemi manifeston në funksionin polkit_system_bus_name_get_creds_sync(), që merr identifikuesit (uid dhe pid) të procesit që kërkon rritjen e privilegjeve. Procesi identifikohet nga Polkit përmes dhënies së një emri unik në DBus, i cili më pas përdoret për të verifikuar privilegjet. Nëse procesi shkëputet nga dbus-daemon para fillimit të trajtuesit polkit_system_bus_name_get_creds_sync, atëherë në vend të emrit unik, trajtuesi merr një kod gabimi.
Dobësia shkaktohet nga fakti që kodi i kthimit të gabimit nuk trajtohet siç duhet dhe funksioni polkit_system_bus_name_get_creds_sync() kthen vlerën TRUE në vend të FALSE, megjithëse nuk arriti të matë procesin me uid/pid dhe të verifikojë privilegjet e kërkuara për procesin. Kodi nga ku u thirr funksioni polkit_system_bus_name_get_creds_sync() mendon se verifikimi është realizuar me sukses dhe kërkesa për rritjen e privilegjeve ka ardhur nga root, jo nga një përdorues pa privilegje, duke lejuar kështu ekzekutimin e veprimeve me privilegje pa autentifikim të mëtejshëm dhe konfirmim të autorizimeve.
Burimi: opennet.ru
