В компонентата Polkit, използван в дистрибуциите за организиране на изпълнението на действия от непривилегировани потребители, изискващи повишени права на достъп (например, монтиране на USB устройство), е открита уязвимост (CVE-2021-3560), която позволява на локален потребител да получи root права в системата. Уязвимостта е отстранена в версия Polkit 0.119.
Проблемът се проявява от версия 0.113, но много дистрибуции, включително RHEL, Ubuntu, Debian и SUSE, са бекпортували уязвимата функционалност в пакети, базирани на по-стари версии на Polkit (поправките вече са налични в дистрибуциите).
Проблемът се проявява във функцията polkit_system_bus_name_get_creds_sync(), която получава идентификаторите (uid и pid) на процеса, искал повишаване на правата. Процесът се идентифицира от Polkit чрез присвояване на уникално име в DBus, което след това се използва за проверка на привилегиите. Ако процесът се отключи от dbus-daemon точно преди стартирането на обработчика polkit_system_bus_name_get_creds_sync, вместо уникалното име, обработчикът получава код за грешка.
Уязвимостта е причинена от това, че върнатият код за грешка не се обработва правилно и функцията polkit_system_bus_name_get_creds_sync() връща стойност TRUE вместо FALSE, въпреки че не успява да съпостави процеса с uid/pid и да провери запрашените от процеса привилегии. Кодът, от който е извикана функцията polkit_system_bus_name_get_creds_sync(), приема, че проверката е извършена успешно и искането за повишаване на правата е отправено от root, а не от непривилегирован потребител, което дава възможност за извършване на привилегировани действия без допълнителна автентикация и потвърждение на правомощията.
Източник: opennet.ru
