Как стать автором
Обновить

Комментарии 16

Эксплоит прекрасно работает))

Уже после патча? 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 не сходится ни с дырявой ни с исправленной версией.

Какая то больно новая версия у вас )

Как предположение сначала починили потому что "жопа горит", а потом более грамотно

0.120 тоже числится как дырявая по редхату/федоре/генту.

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 и его компонентов у мейнтейнеров используемых Вами дистрибутивов и ПО, и следовать их рекомендациям. Иначе применение воркэраунда остается на Ваш страх и риск. Лучше всего, конечно, установить актуальные патчи.

Зарегистрируйтесь на Хабре , чтобы оставить комментарий