[image]

Уязвимости и вири под линукс, новости

 
LT Bredonosec #26.01.2022 13:21
+
-
edit
 

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

The Qualys Research Team has discovered a memory corruption vulnerability in polkit's pkexec, a SUID-root program that is installed by default on every major Linux distribution. //  blog.qualys.com
 

Облачная платформа Qualys опубликовала данные о серьёзной «дыре» в коде Linux, затрагивающей практически все популярные дистрибутивы. Она позволяет легко получить root-права в атакуемой системе, чтобы обеспечить себе полный доступ к содержимому компьютера.

Согласно отчёту исследователей, уязвимость под названием PwnKit (CVE-2021-4034) связана с особенностями работы компонента Polkit pkexec и затрагивает все его версии начиная с 2009 года. В Qualys отметили, что эксплойт позволяет любому пользователю с минимальными правами получить root-доступ для полного «захвата» системы. На практике специалисты смогли реализовать такой сценарий на компьютерах под управлением дистрибутивов Ubuntu, Debian, Fedora и CentOS.

Polkit (formerly PolicyKit) - системный утиль, контролирующий раздачу прав и привилегий. Он позволяет непривилегированным процессам общаться с привилегированными. Кроме того, polkit можно использовать и с рут-правами для выполнения привилегированных.

Vulnerability Disclosure Timeline

2021-11-18: Advisory sent to secalertredhat.
2022-01-11: Advisory and patch sent to distrosopenwall.
2022-01-25: Coordinated Release Date (5:00 PM UTC).


короче, как понимаю, релиз апдейтов вышел только вчера, то есть, кому актуально, обновляйтесь.



Техописание уязвимости:
Процесс pkexec ищет команду для исполнения, по путям согласно переменным PATH, если нет абсолютного пути:

435 main (int argc, char *argv[])
436 {
...
534   for (n = 1; n < (guint) argc; n++)
535     {
...
568     }
...
610   path = g_strdup (argv[n]);
...
629   if (path[0] != '/')
630     {
...
632       s = g_find_program_in_path (path);
...
639       argv[n] = path = s;
640     }


Если список аргументов argc пустой, то argv[0] is NULL.
в строке 534, the integer n is permanently set to 1;
в строке 610, the pointer path is read out-of-bounds from argv[1];
в строке 639, the pointer s is written out-of-bounds to argv[1].

Но что реально читается и пишется в out-of-bounds argv[1]?
Для этого краткое разьяснение:
Когда мы пускаем под execve() программу, ядро копирует аргументы, строки переменных окружения (argv and envp) в конец стека этой программы,

[csv]
[tr] argv[0] ; argv[1] ; ... ; argv[argc] ; envp[0] ; envp[1] ; ... ; envp[envc]
V ; V ; ; V ; V ; V ; ; V
[tr]"program"; "-option" ; ; NULL ; "value"; "PATH=name" ; ; NULL
[/csv]

Поскольку указатели argv and envp идут последовательно, argv[1] по факту envp[0], указатель на значение “value”. То есть,
- в строке 610 путь к программе указывает на “value”
- в строке 632 это “value” передается в g_find_program_in_path() потому что путь не начинается со слэша
- Этот g_find_program_in_path() ищет исполняемый файл с именем “value” в папках, обозначенных в путях переменных окружения PATH
- если такой находится, его полный путь передается в главный процесс pkexec в строку 632
- в строке 639 новый путь перезаписывает старый.

То есть,
Если в путях переменных окружения есть некая папка [name] и в ней есть исполняемый файл с именем value, то путь к ней вписывается в envp[0]

Или то же с “PATH=name=.”
Другими словами, эта запись позволяет подсунуть небезопасную переменную окружения (for example, LD_PRELOAD) в pkexec.



Для устранения Qualis рекомендует в базе данных найти CVE-2021-4034 и слить обнову.
   91.091.0

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru