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

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

На одном хосте упаковали половину населения земли?

Я такие UID встречал только у пользователей из LXC контейнеров, так они выглядят снаружи. Но пока не придумал, как это использовать изнутри контейнера.

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

Компания Red Hat рекомендует системным администраторам не создавать аккаунты с отрицательными значениями UID

Половина населения земли? Я ставлю на одного наркомана =)

t184256 ★★★★★ ()

Чтобы такой пользователь существовал, его нужно создать, а чтобы его создать — нужны права root. Если админ идиот, то и эксплоиты не нужны.

mord0d ()

Но сторонники «прогресса» ведь продолжат делать вид, что всё норм, и вообще not-a-bug. Ведь уязвимость, которую нельзя использовать в лоб, в сознании поттеров уязвимостью не считается. =)

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

На один хост логинилась половина населения земли и его взломали?

Или некий Вася Админович Пупкин решил пострелять по своим ногам:

useradd --uid 4000000000 vpupkin_lal

Хотя, если некая система раздает случайные UID в диапазоне 0..UNIT_MAX, то мы точно все умрем.

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

Redhat 7.3 - продуктив:

nodeRH-1 [user@RH1 ~]$ systemd-run -t /bin/bash
Failed to start transient service unit: Interactive authentication required.

А разве есть такие «мудрые одмины», которые такие UID или UID делают?

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

А разве есть такие «мудрые одмины», которые такие UID или UID делают?

Какая разница? Тут дыра в софте. Если они этот corner-case не проверили, они могли не проверить и какой-нибудь другой.

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

У меня не взлетело:


┬─[andrey.bondarenko@slackware13:~]─[13:58:58]
╰─>$ sudo useradd --uid 4000000000 vpupkin_lal
[sudo] password for andrey.bondarenko: 
(Tue Dec 11 13:59:09:485474 2018) [sss_cache] [confdb_get_domains] (0x0010): No domains configured, fatal error!
Could not open available domains
useradd: sss_cache exited with status 2
useradd: Failed to flush the sssd cache.
(Tue Dec 11 13:59:09:531473 2018) [sss_cache] [confdb_get_domains] (0x0010): No domains configured, fatal error!
Could not open available domains
useradd: sss_cache exited with status 2
useradd: Failed to flush the sssd cache.
┬─[andrey.bondarenko@slackware13:~]─[13:59:36]
╰─>$ sudo su -l vpupkin_lal
[vpupkin_lal@slackware13 ~]$ su
Password: 
su: Authentication failure
Shaman007 ★★★★★ ()

занятно, что даже ассерт был вставлен при этом

(pkttyagent:9443): GLib-GObject-WARNING **: 13:59:27.953: 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)
actionless ★★★★★ ()
 $ uname -a
Linux nu 4.14.83-gentoo #1 SMP PREEMPT Mon Nov 26 17:08:18 CET 2018 x86_64 Intel(R) Core(TM) i5-3230M CPU @ 2.60GHz GenuineIntel GNU/Linux

$ systemd-run -r /bin/bash
bash: systemd-run: command not found

Hе работает. Что я не так делаю?

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

Какая разница?

Разница в том что «безопасники» становятся всё более PR-ориентированными. Вместо того чтобы корректно анализировать баги, и использовать экспертизу по назначению, они придумывают им громкие заголовки и веселые логотипы.

При этом всё больше портят отношения с разработчиками, которым приходится отбиваться от толпы фанатов.

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

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

Если они этот corner-case не проверили, они могли не проверить и какой-нибудь другой.

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

crypt ★★★★★ ()