Уразлівасць у Polkit, якая дазваляе павысіць свае прывілеі ў сістэме

У кампаненце 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

Дадаць каментар