Comments 16
Ссылка на чинящий коммит: https://gitlab.freedesktop.org/polkit/polkit/-/commit/a2bf5c9c83b6ae46cbd5c779d3055bff81ded683
Эксплоит прекрасно работает))
Эксплоит прекрасно работает))
Уже после патча? O_o
А там разве не if (argc < 2) должно быть? первым параметром обычно имя исполняемого файла... argc < 1 ничего не поправит.
argc < 1 ничего не поправит.
Поправит (хотя фикс действительно так себе, но всё же фиксит как и написано "just bail out")...
Ибо (ударение на сейчас) оно только неправильно работает в случае argc = 0
, т.к. он начинает обрабатывать параметры (argv[n]
) начиная с n = 1
, т.е. "перепрыгивает" NULL и попадает на первую строчку из envp.
Схематично как это должно быть:
n = 1
|---------+---------+-----+------------|---------+---------+-----+------------|
| argv[0] | argv[1] | ... | argv[argc] | envp[0] | envp[1] | ... | envp[envc] |
|----|----+----|----+-----+-----|------|----|----+----|----+-----+-----|------|
V V V V V V
"program" "-option" NULL "value" "PATH=name" NULL
Как оно в случае argc = 0
:
n = 1
|---------|---------+---------+-----+------------|
| argv[0] | envp[0] | envp[1] | ... | envp[envc] |
|----|----|----|----+----|----+-----+-----|------|
V V V V
NULL "value" "PATH=name" NULL
В результате вот это вот - path = g_strdup (argv[n]);
- очень нехорошая штука (была до фикса)...
Ну а дальше думаю и так всё понятно.
А "так себе" собственно, поскольку оно сейчас действительно работает, а завтра кто-нибудь поправит что-нибудь и сломает его для argc = 1
, что бы чуть позже кто-то сделал новую CVE.
в качестве workaround можно удалить SUID-бит у pkexec
Но по умолчанию этот бит и так не установлен был. Скажите у кого-то он стоял по умолчанию?
SUID бит (s флаг в user части) должен присутствовать, иначе утилита бы не работала как задумано, для примера из находившегося под рукой:
не обновлявшийся какое-то время дистрибутив kali (PoC там работает)
user@kali64:~$ ls -lash /usr/bin/pkexec
24K -rwsr-xr-x 1 root root 23K Jun 25 2021 /usr/bin/pkexec
свежий debian 11 с последним патчем на polkit (PoC там ожидаемо не работает)
user@deb11:~$ ls -lash /usr/bin/pkexec
24K -rwsr-xr-x 1 root root 23K Jan 13 22:32 /usr/bin/pkexec
Возможно, на вашей инсталляции уже были выполнены какие-то действия с разрешениями?
Но по умолчанию этот бит и так не установлен был.
CentOS 7.9, бит установлен.
Дел, а то скрипткидисы набегут )
[arxont@TF307Test CVE-2021-4034]$ ls -la /usr/bin/pkexec
-r-s--x--x 1 root root 26872 янв 25 20:21 /usr/bin/pkexec
[arxont@TF307Test CVE-2021-4034]$ pkexec --version
pkexec version 0.120
[arxont@TF307Test CVE-2021-4034]$ ./cve-2021-4034
[arxont@TF307Test CVE-2021-4034]$ whoami
arxont
То ли оно не работает на aarch64, то ли оно в Альте исправлено, но вывод PoC не сходится ни с дырявой ни с исправленной версией.
chmod 0755 /usr/bin/pkexec
А подскажите ничего после этого в системе не сломается?
Поискал по всем системным логам, но не нашел в них упоминания pkexec.
Нашел другие вроде: /usr/libexec/kf5/polkit-kde-authentication-agent-1 и /usr/bin/pkttyagent --notify-fd 5 --fallback
Уязвим именно pkexec, воркэраунд ломает тот функционал, где задействован pkexec (т.е. через него уже не получится получить повышенные привилегии). Например, управлении системными настройками в Вашем desktop environment через GUI может сломаться. Таким образом, лучше применить патч (хотя, как и в случае с log4shell высока вероятность, что фикс будет обойден). Наличие pkexec следует искать не в системных логах, а на файловой системе, например через
ls -lash /usr/bin/pkexec
Ну искать в файловой системе - то понятно. Во всех дистрибутивах у меня нашлось.
Только вот вопрос где именно оно используется. В логах нашел только в графической системе. Еще где-то?
Если GUI нет, только консоль, то можно смело обрезать права?
В принципе pkexec возможно использовать и в headless режиме, все зависит от используемого дистрибутива и ПО. Если Вы планируете остановиться на воркэраунде, то Вам предварительно стоит уточнить нюансы использования polkit и его компонентов у мейнтейнеров используемых Вами дистрибутивов и ПО, и следовать их рекомендациям. Иначе применение воркэраунда остается на Ваш страх и риск. Лучше всего, конечно, установить актуальные патчи.
Обнаружена уязвимость PwnKit! 12-летняя LPE в большинстве Linux-дистрибутивов