<?xml version="1.0" encoding="UTF-8" ?>

<bugzilla version="5.2"
          urlbase="https://bugzilla.altlinux.org/"
          
          maintainer="jenya@basealt.ru"
>

    <bug>
          <bug_id>37516</bug_id>
          
          <creation_ts>2019-11-20 12:06:02 +0300</creation_ts>
          <short_desc>Получение прав уровня root всеми wheel через pkexec</short_desc>
          <delta_ts>2020-11-16 14:26:23 +0300</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>4</classification_id>
          <classification>Development</classification>
          <product>Sisyphus</product>
          <component>polkit</component>
          <version>unstable</version>
          <rep_platform>all</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P3</priority>
          <bug_severity>blocker</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Speccyfighter">zxwarior</reporter>
          <assigned_to name="Valery Inozemtsev">shrek</assigned_to>
          <cc>aris</cc>
    
    <cc>asy</cc>
    
    <cc>glebfm</cc>
    
    <cc>iv</cc>
    
    <cc>ldv</cc>
    
    <cc>mike</cc>
    
    <cc>nbr</cc>
    
    <cc>shaba</cc>
    
    <cc>shrek</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>185667</commentid>
    <comment_count>0</comment_count>
    <who name="Speccyfighter">zxwarior</who>
    <bug_when>2019-11-20 12:06:02 +0300</bug_when>
    <thetext>Пакет:

$ rpm -qf --qf &apos;%{NAME}\n&apos; /usr/bin/pkexec 
polkit

Тестовая система:

$ cat /image/.disk/info 
Simply Linux/x86_64 2017-07-07

Первый пользователь в системе, регистрируемый на инсталляции, это личный пользовательский аккаунт root.
Новый пользователь добавленный в группу wheel, права которому делегируются через  sudoers, это не root. Это другое физическое лицо.

Выполнение в X-терминале:
Получение root-сессии пользователем группы wheel не знающим пароля root

[test@localhost ~]$ id
uid=501(test) gid=501(test) группы=501(test),10(wheel)
[test@localhost ~]$ 

Здесь в окне запрос пароля любого из wheel на выбор:
[test@localhost ~]$ pkexec /bin/bash

с последующим получением сессии root в X-терминале:
[root@localhost ~]# 
[root@localhost ~]# echo $USER
root
[root@localhost ~]# 
[root@localhost ~]# echo $UID
0
[root@localhost ~]# 
[root@localhost ~]# echo $HOME
/root
[root@localhost ~]# 
[root@localhost ~]# echo $PATH
/root/bin:/sbin:/usr/sbin:/usr/local/sbin:/bin:/usr/bin:/usr/local/bin
[root@localhost ~]# 
[root@localhost ~]# echo $GROUPS
0

Запретить получение прав уровня root всеми wheel через pkexec:

polkit.addRule(function(action, subject) {
    if (action.id.indexOf(&quot;org.freedesktop.policykit.exec&quot;) == 0)
    {
        return polkit.Result.NO;
    }
});

Этот рулез выше, приведёт к отказу получения прав уровня root всеми wheel, через pkexec и свой личный пароль:

[test@localhost ~]$ pkexec /bin/bash
Error executing command as another user: Not authorized

This incident has been reported.


Ошибка в ту же тему о безопасности:

https://bugzilla.altlinux.org/18344
https://bugzilla.altlinux.org/35763

Затрагивает все altlinux.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185694</commentid>
    <comment_count>1</comment_count>
    <who name="Speccyfighter">zxwarior</who>
    <bug_when>2019-11-20 22:10:40 +0300</bug_when>
    <thetext>Это правило заблокирует вход в оболочку root любому wheel
через &apos;pkexec /bin/bash&apos; по своему паролю,
как и запретит выполнение любого любым wheel через pkexec, если это не root
(следующая строка после &amp;&amp; это продолжение строки и этот перенос непреднамеренный):

# cat /etc/polkit-1/rules.d/60-pkexec-to-root-only.rules

polkit.addRule(function(action, subject) {
    if (action.id.indexOf(&quot;org.freedesktop.policykit.exec&quot;) == 0 &amp;&amp; subject.isInGroup(&quot;root&quot;) )
        {
                return polkit.Result.YES;
        }
});


polkit.Result.YES, - это для sysv на которых авторизация сломана.

Все остальные экшны, будут обрабатываться в соответствии с политикой polkit описанной в 50-default.rules</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185728</commentid>
    <comment_count>2</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2019-11-22 13:10:08 +0300</bug_when>
    <thetext>Мне кажется, что это в точности
https://bugzilla.altlinux.org/show_bug.cgi?id=35763</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193219</commentid>
    <comment_count>3</comment_count>
    <who name="Speccyfighter">zxwarior</who>
    <bug_when>2020-10-14 13:13:30 +0300</bug_when>
    <thetext>В контексте комметария 12
https://bugzilla.altlinux.org/show_bug.cgi?id=35763#c12
параллельного бага #35763:

Всё много хуже.

/etc/polkit-1/rules.d/50-default.rules
polkit считает пользователя в группе wheel не рутом, а админом.

И при наличии в системе администратора и соадминистратора (группа wheel) предложит ввод пароля любого wheel на выбор, включая того, чей пароль скомпроментирован:

# grep -v &apos;^\/\|^$&apos; /etc/polkit-1/rules.d/50-default.rules
polkit.addAdminRule(function(action, subject) {
    return [&quot;unix-group:wheel&quot;];
});


# groups user1 tester tester2
user1 : user1 wheel ...
tester : tester wheel audio
tester2 : tester2


$ su - tester2
Password: 


$ whoami; pkexec /bin/bash
tester2
==== AUTHENTICATING FOR org.freedesktop.policykit.exec ====
Authentication is needed to run `/bin/bash&apos; as the super user
Multiple identities can be used for authentication:
 1.  user1
 2.  tester
Choose identity to authenticate as (1-2): 2
Password: 
...


Баги #35763 #37516 в стартеркитах на sysvinit и в частности в p9-xfce-sysv неактуальны, по причине:

a) отсутствия systemd.
b) сломанной авторизации (и отсутствующего для sysv elogind) и значит не работающего по-умолчанию pkexec при выполнении команды от другого пользователя, с отказом на сбое аутентификации.
c) ненастроенного по-умолчанию sudo (всё для всех wheel).

Также см. сообщение Лёши Гладкова по поводу elogind:
https://lists.altlinux.org/pipermail/devel/2019-November/208963.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193240</commentid>
    <comment_count>4</comment_count>
    <who name="Speccyfighter">zxwarior</who>
    <bug_when>2020-10-14 16:06:06 +0300</bug_when>
    <thetext>Используя такой существующий алгоритм и скомпроментированный пароль одного из wheel (выбор предлагается на аутентификации), непривилегированный пользователь, в системе на systemd, через X-терминал может получить окружение root:

[root@localhost ~]# ls -l /proc/1/exe
lrwxrwxrwx 1 root root 0 окт 14  2020 /proc/1/exe -&gt; /lib/systemd/systemd

[altlinux@localhost ~]$ groups altlinux test test2
altlinux : altlinux wheel uucp proc cdwriter audio radio users scanner xgrp netadmin fuse
test : test wheel
test2 : test2
[altlinux@localhost ~]$ 
[altlinux@localhost ~]$ su - test2
Password: 
[test2@localhost ~]$ 
[test2@localhost ~]$ whoami; pkexec /bin/bash
test2
[root@localhost ~]# echo $USER $HOME $UID
root /root 0</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193511</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Shabalin">shaba</who>
    <bug_when>2020-10-25 03:10:47 +0300</bug_when>
    <thetext>Я вот не понимаю, зачем вы включаете пользователя в группу wheel? Просто не добавляйте его в эту группу.
Для sudo вы можете давать доступ индивидуально пользователям, или сделать группу типа sudousers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193898</commentid>
    <comment_count>6</comment_count>
    <who name="Speccyfighter">zxwarior</who>
    <bug_when>2020-11-08 05:26:29 +0300</bug_when>
    <thetext>(Ответ для Alexey Shabalin на комментарий #5)
&gt; Я вот не понимаю, зачем вы включаете пользователя в группу wheel?

Потому что политика запрещает не wheel использовать sudo:

# control | grep &apos;sudo &apos;
sudo            wheelonly       (public wheelonly restricted)

# ll /usr/bin/sudo
-rws--x--- 1 root wheel 147136 ноя  8 05:22 /usr/bin/sudo

А установить public, всё равно что закурить возле пороховой бочки.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193908</commentid>
    <comment_count>7</comment_count>
    <who name="Sergey Y. Afonin">asy</who>
    <bug_when>2020-11-08 14:46:05 +0300</bug_when>
    <thetext>(In reply to Alexey Shabalin from comment #5)

&gt; Я вот не понимаю, зачем вы включаете пользователя в группу wheel?

Потому, что в ALT так исторически сложилось. То, что wheel в некотором роде администратор, но ещё без прав суперпользователя. В общем есть bug 18344, решение по которому при текущем polkit становится бессмысленно.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193910</commentid>
    <comment_count>8</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2020-11-08 15:20:17 +0300</bug_when>
    <thetext>(In reply to Alexey Shabalin from comment #5)
&gt; Я вот не понимаю, зачем вы включаете пользователя в группу wheel? Просто не
&gt; добавляйте его в эту группу.

В ALT группа wheel с самого начала используется в качестве группы отсечения доступа к привилегированным инструментам вроде su и sudo.

Почему-то polkit подменил значение группы wheel: теперь при наличии работающего polkit члены группы wheel по умолчанию автоматически приравниваются к root,
что эквивалентно включению по умолчанию &quot;control sudowheel enabled&quot;.

Эта подмена смысла группы wheel является уязвимостью в конфигурации polkit по-умолчанию, которую необходимо исправить в Сизифе и бранчах.</thetext>
  </long_desc>
      
      

    </bug>

</bugzilla>