LINUX.ORG.RU

Обнаружена уязвимость в Polkit, которая позволяет выполнять любую команду systemctl пользователю с низкими привилегиями

 , , ,


1

2

Уязвимость CVE-2018-19788 присутствует на большинстве операционных систем GNU/Linux и позволяет пользователю, чей UID превышает 2147483647, выполнить любую команду systemctl, равно как и получить root-права.

Проблема существует из-за ошибки в библиотеке Polkit (другое название PolicyKit), заключающейся в неправильной проверки запросов от пользователей с UID > INT_MAX. Где INT_MAX это константа определяющая максимальное значение переменной типа int, равняющаяся 0x7FFFFFFF в шестнадцатеричной или 2147483647 в десятичной системе счисления.

Исследователь по безопасности Rich Mirch (аккаунт в Twitter 0xm1rch) представил успешно работающий эксплоит, демонстрирущий данную уязвимость. Для его корректной работы требуется наличие пользователя с идентификатором 4000000000.

В Twitter'е предлагают гораздо более простой способ получения root-прав:

systemd-run -t /bin/bash

Компания Red Hat рекомендует системным администраторам не создавать аккаунты с отрицательными значениями UID или UID превышающими 2147483647 до тех пор, пока не будет выпущен патч, исправляющий уязвимость.

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

★★★★★

Проверено: Shaman007 ()
Последнее исправление: ls-h (всего исправлений: 5)

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

А что по твоему не так с sudo -u testpolit pkexec /bin/bash?
Сделай
sudo -iu testpolit
pkexec /bin/bash
Здоровому человеку при этом root не даст, почему уже разбирали выше в топике. Курильщикам rhel и arch не повезло.

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

Password:

Хм, залатали уже? Уязвимая версия при uid=4000000000 вываливалась на ассерте до попытки спросить пароль.

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

я бы сделал, но чистить /etc от тестово пользователя пятый раз за день - как-то «занадто» %)

лучше остановиться на том, что бага есть, но для ее эксплуатации нужен дикий id пользователя %)

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

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

Разумеется, я не могу знать наверняка, что имел в виду тот или иной комментатор: то, что это не баг, или то, что это баг, но проявляется не очень часто, или ему просто захотелось пошутить по поводу подобных uid безотносительно к новости. Так же, как и ты не можешь наверняка знать, когда читаешь «системд — решето», хотел ли комментатор просто выразить свою ни на чём не основанную ненависть, или у него множество толковых аргументов, которые он просто устал повторять в каждой теме про системд. Наверняка можно сказать только одно: подобные каменты абсолютно бессодержательны по отношению к верхней новости. Ты предложила посчитать такие бессодержательные каменты. Я посчитал каменты защитников системд. Тебе осталось посчитать аналогичные каменты его ненавистников.

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

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

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

пошутить по поводу подобных uid безотносительно к новости

почему безотносительно-то, строго по теме

у него множество толковых аргументов, которые он просто устал повторять в каждой теме про системд

и теперь повторяет в треде про баг в polkit

защитников системд

сейчас tailgunner обидится

Тебе осталось посчитать аналогичные каменты его ненавистников.

мне что-то подсказывает что твой ноль от этого больше не станет

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

пошутить по поводу подобных uid безотносительно к новости

почему безотносительно-то, строго по теме

Тогда и камент из 6 букв «решето» тоже строго по теме.

защитников системд

сейчас tailgunner обидится

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

Тебе осталось посчитать аналогичные каменты его ненавистников.

мне что-то подсказывает что твой ноль от этого больше не станет

Ok. Будем считать 0:0.

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

я ващет на то что такие уиды реальны очень жирно намекал..

Сорри. Тогда 13-1 == 12, ровно по числу апостолов. :-)

Я же говорю, что к каждому в голову не залезешь и не всегда понятно, кто что хотел сказать, когда вместо технических аргументов начинаются околотехнические шутки (против которых я, конечно, ничего не имею).

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

я бы сделал, но чистить /etc от тестово пользователя пятый раз за день - как-то «занадто» %)

sudo -u '#4000000000' ... написать тебе религия не даёт?

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

вполне себе дает, я, просто, не был знаком с такой фишкой :)


sbauer@metamini64 ~$ sudo su - test #это нормальный пользователь

test@metamini:~$ sudo -u '#4000000000' pkexec /bin/bash

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.

[sudo] password for test:

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

Это бэкапы.

не люблю засирать и без того засруную систему - сейчас как раз привожу в порядок после краха ssd ^-\

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

"[sudo] password for test" - это суду спрашивает

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

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

Ха-ха, ЛОР! Смотри, что я нашёл: pkexec очинь опасная команда удаляющая все файлы.

Чтобы она ничего не могла сделать, запустите её с UID заведомо несуществующего юзера: sudo -u '#44040404040404040404' pkexec очинь опасная команда удаляющая все файлы

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

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

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

Ты видел 5 лет назад и точно запомнил, что оно больше INT_MAX? Может быть, конечно, но я бы предпочел «вот прямо сейчас вижу».

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

Да, я точно запомнил, потому, что это мне доставило конкретные проблемы. А именно, софт, надо которым я работал, собирался autotools, и, из соображений совместимости с древними системами, в качестве формата запаковки там использовался ещё tar-v7, а не tar-ustar, не говоря уже о tar-pax. Так вот, при создании/тестировании сборок сыпалось адское количество ошибок в консоль, а причина крылась в адских uid / gid за гранью добра и зла... мы ещё удивлялись тогда, не может же быть, что у них больше 2 миллиардов пользователей :-/ Как там дела сейчас, не могу проверить, доступа нет больше, если у кого есть посмотрите, интересно.

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

в качестве формата запаковки там использовался ещё tar-v7, а не tar-ustar, не говоря уже о tar-pax. Так вот, при создании/тестировании сборок сыпалось адское количество ошибок в консоль, а причина крылась в адских uid / gid за гранью добра и зла... мы ещё удивлялись тогда, не может же быть, что у них больше 2 миллиардов пользователей :-/

Тогда понятно.

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

Failed to start transient service unit: The name org.freedesktop.PolicyKit1 was not provided by any .service files

Это, наверное, баг. :-)

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

Это нормальное поведение. Уязвимости нет. Хотя если ты пароль не ввёл, а рута получил, то есть.

Вопрос ещё в том, чей пароль запрашивают.

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

хейтеры systemd, прежде чем говорить, на своей системе проверьте баг.
тут показано, как

Тут тонкая грань в том, что без systemd надо завести пользователя, а вот с systemd уже всё готово (как минимум, в части дистрибутивов), только пользуйся.

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

Ошибаешься. Пользователя заводить в любом случае.

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

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

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

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

Увы и ах. Только что проверил тоже. Завёл нового пользователя. В группу, имеющую доступ к sudo, добавить его пришлось, иначе systemd-run, действительно, не давал возможности использовать этого пользователя. Но вот в sudoers пользователя прописывать не надо совершенно, systemd-run -t whoami исправно показывает root с использованием учётных данных этого самого пользователя. sudo же пишет, что юзера нет в sudoers file.

AS ★★★★★
()
Ответ на: комментарий от imul
[adm@nb ~]$ su -l test
Password:

[test@nb ~]$ sudo  whoami
[sudo] password for test:
test is not in the sudoers file.  This incident will be reported.

[test@nb ~]$ systemd-run -t whoami
Running as unit: run-u88.service
Press ^] three times within 1s to disconnect TTY.
root

[test@nb ~]$ id
uid=502(test) gid=502(test) groups=502(test),10(wheel)

[test@nb ~]$

по systemd-run GUI-шечка открылась с выбором пользователей, выбрал этого test.

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

А вы когда результатами делитесь, не хотите хотя бы версию polkit добавить к логу?

Да, пожалуй:

$ rpm -qa|grep polkit
polkit-kde-ksysguard-5.12.4-alt1.M80P.1
polkit-0.113-alt2
libpolkit-qt-agent-1-0.112.0-alt1
libpolkit-gir-0.113-alt2
libpolkit-0.113-alt2
polkit-kde-plasma-desktop-5.12.4-alt1.M80P.1
polkit-gnome-0.105-alt1
libpolkit-qt-core-1-0.112.0-alt1
polkit-kde-agent-1-0.99.1-alt3
libpolkit-qt5-core-0.112.0-alt1

Ещё systemd - 237.

AS ★★★★★
()
Последнее исправление: AS (всего исправлений: 1)

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

дыну?! всего-то?

(sarcasm)

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

Когда что-нибудь отвалится по его вине снова, то он и ядро будет обвинять во всём.

Ну вообще это уже случалось и даже не один раз.

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

Вы сейчас что проверяете? Какой пользователь используется для авторизации через polisykit? При наличии уязвимости это имеет значение?

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

Вы сейчас что проверяете?

Возможность запуска почти произвольным пользователем приложения с правами root посредством systemd-run. Думаю, это видно.

Какой пользователь используется для авторизации через polisykit?

Свежезаведённый test (без явного указания uid/gid при заведении), дополнительно добавленный в группу wheel, которой разрешён запуск su и sudo.

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

Дык там же кажется cve был присвоен до публикации, так что фв выглядит норм, сначала приватно рассказать, потом после обсуждения потешить чсв

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

Возможность запуска почти произвольным пользователем приложения с правами root посредством systemd-run. Думаю, это видно.

Я не был уверен в том, что ты понимаешь что именно делаешь. Ну ладно, это функциональность данного ПО. Хорошо, что ты его проверил.

Свежезаведённый test (без явного указания uid/gid при заведении), дополнительно добавленный в группу wheel, которой разрешён запуск su и sudo.

То есть ты внёс пользователя в группу wheel и удивляешься что получил root? А что ты сразу ему не дал uid=gid=0?

systemd-run -t whoami

При уязвимости это должно давать рута без всякого wheel и без запроса пароля policykit-agent-ом.

PS: s/polisy/policy/

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

То есть ты внёс пользователя в группу wheel и удивляешься что получил root?

Да, удивляюсь, потому как wheel - это ещё не root, это только возможность запустить sudo с каким-то правами, которые надо ещё дополнительно настроить. Нашёл, кстати, Ubuntu. Аналогично. Но там ещё прикольнее, там %sudo ALL=(ALL:ALL) ALL. Это убрал, всё равно дало root через systemd-run.

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

А какая у вас должность в Альтобазальте

У меня в местном профиле написан ответ на этот вопрос: утомили спрашивать. :-)

AS ★★★★★
()
Последнее исправление: AS (всего исправлений: 2)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.