Вразливість у 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

Додати коментар або відгук