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

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

    <bug>
          <bug_id>36819</bug_id>
          
          <creation_ts>2019-05-30 02:45:09 +0300</creation_ts>
          <short_desc>Не wheel user монтирует флешки</short_desc>
          <delta_ts>2020-04-01 13:12:40 +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>udisks2</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>critical</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Speccyfighter">zxwarior</reporter>
          <assigned_to name="Yuri N. Sedunov">aris</assigned_to>
          <cc>antohami</cc>
    
    <cc>aris</cc>
    
    <cc>iv</cc>
    
    <cc>klark</cc>
    
    <cc>mike</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>182008</commentid>
    <comment_count>0</comment_count>
    <who name="Speccyfighter">zxwarior</who>
    <bug_when>2019-05-30 02:45:09 +0300</bug_when>
    <thetext>Всем доброго.

Суть подробнее:

В системе alt-p8-xfce-20190312-i586
на xfce с polkit agent,
непревилегированый пользователь,

# groups tester
tester : tester


находясь в

# who | grep tester
tester   tty2         2019-05-23 15:37 (localhost)


игнорируя запрет системы

# ls -1 /etc/polkit-1/rules.d/
50-default.rules
60-mount-other-seat.rules.bak
60-mount-other-seat.rules.bak0
60-system-mount.rules.bak

# sed -n &apos;171p; 239,243p&apos; /usr/share/polkit-1/actions/org.freedesktop.UDisks2.policy
  &lt;action id=&quot;org.freedesktop.udisks2.filesystem-mount-other-seat&quot;&gt;
    &lt;defaults&gt;
      &lt;allow_any&gt;auth_admin&lt;/allow_any&gt;
      &lt;allow_inactive&gt;auth_admin&lt;/allow_inactive&gt;
      &lt;allow_active&gt;auth_admin_keep&lt;/allow_active&gt;
    &lt;/defaults&gt;


накопитель usb

# ls -l /dev/disk/by-id/ | grep sdc
lrwxrwxrwx 1 root root  9 май 23 11:54 usb-Multiple_Card_Reader_058F63666433-0:0 -&gt; ../../sdc
lrwxrwxrwx 1 root root 10 май 23 11:54 usb-Multiple_Card_Reader_058F63666433-0:0-part1 -&gt; ../../sdc1
lrwxrwxrwx 1 root root 10 май 23 11:54 usb-Multiple_Card_Reader_058F63666433-0:0-part2 -&gt; ../../sdc2
lrwxrwxrwx 1 root root 10 май 23 11:54 usb-Multiple_Card_Reader_058F63666433-0:0-part3 -&gt; ../../sdc3


может примонтировать

# mount | grep tester
/dev/sdc1 on /run/media/tester/ALT regular-cinnamon_x86_64 type iso9660 (ro,nosuid,nodev,relatime,nojoliet,check=s,map=n,blocksize=2048,uid=501,gid=501,dmode=500,fmode=400,uhelper=udisks2)
/dev/sdc1 on /var/run/media/tester/ALT regular-cinnamon_x86_64 type iso9660 (ro,nosuid,nodev,relatime,nojoliet,check=s,map=n,blocksize=2048,uid=501,gid=501,dmode=500,fmode=400)


И из-за этой уязвимости, невозможно организовать распределение прав доступа для other-seat в рамках группы storage.
При этом следует учитывать что, это касается только устройств other-seat.


Поскольку системные устройства обрабатываются верно (в отличие от other-seat):

# head -n 11 vcs2.txt
[tester@localhost ~]$ ls -l /dev/disk/by-id/ | grep sda11; udisksctl mount -b /dev/sda11                                                                                 
lrwxrwxrwx 1 root root 11 май 23 11:48 ata-WDC_WD5000LPCX-24C6HT0_WD-WXC1A45NS2D4-part11 -&gt; ../../sda11                                                                   
lrwxrwxrwx 1 root root 11 май 23 11:48 wwn-0x50014ee605c946d5-part11 -&gt; ../../sda11                                                                                       
==== AUTHENTICATING FOR org.freedesktop.udisks2.filesystem-mount-system ====                                                                                             
Для монтирования WDC WD5000LPCX-24C6HT0 (/dev/sda11) требуется подтверждение подлинности пользователя                                                                     
Authenticating as: altlinux                                                                                                                                               
Password:                                                                                                                                                                 
polkit-agent-helper-1: pam_authenticate failed: Authentication failure                                                                                                   
==== AUTHENTICATION FAILED ====                                                                                                                                           
Error mounting /dev/sda11: GDBus.Error:org.freedesktop.UDisks2.Error.NotAuthorized: Not authorized to perform operation                                                   
[tester@localhost~]$                                                                                                                                                     
в соответствии с запрошенным действием и запросом на авторизацию

# sed -n &apos;92p; 163,167p&apos; /usr/share/polkit-1/actions/org.freedesktop.UDisks2.policy
  &lt;action id=&quot;org.freedesktop.udisks2.filesystem-mount-system&quot;&gt;
    &lt;defaults&gt;
      &lt;allow_any&gt;auth_admin&lt;/allow_any&gt;
      &lt;allow_inactive&gt;auth_admin&lt;/allow_inactive&gt;
      &lt;allow_active&gt;auth_admin_keep&lt;/allow_active&gt;
    &lt;/defaults&gt;


Следуя правильному алгоритму, udiskctl в tty для непревилегированного, должен был задействовать экшн
org.freedesktop.udisks2.filesystem-mount-other-seat
который потребовал бы ввода пароля одного из wheel.
Но по моим предположениям, косвенным анализом, он при монтировании флешки в tty, задействовал экшн
org.freedesktop.udisks2.filesystem-mount
который в
&lt;allow_active&gt;yes&lt;/allow_active&gt; by defaults.
Это правило:
https://forum.altlinux.org/index.php?topic=42293.msg335528#msg335528
блокирует эту уязвимость, безусловно запрещая всем монтировать флешки.
Но здесь первое правило
https://forum.altlinux.org/index.php?topic=42293.msg335529#msg335529
блокирует уязвимость, разрешая монтировать только wheel и ближе к правильному алгоритму по-умолчанию. Хоть и не решает проблему в целом.
И эта уязвимость мешает организовать распределение прав доступа по группе storage для other-seat.


Требуется:
Заставить udisksctl использовать экшн
org.freedesktop.udisks2.filesystem-mount-other-seat
при монтировании устройств other-seat, - извлекаемых устройств.

Чем отличаются системные устройства от подключенных в другое место:
http://storaged.org/doc/udisks2-api/latest/udisks-polkit-actions.html


Посмотрел на свежий 1.3.2/slackware-live-xfce-current.iso.
Всё как в альтах, только наоборот:
В tty у непревилегированного требует пароль root, но в X-сах, монтирование флешки проходит на ура, несмотря на auth_admin_keep.

Проверил на devuan ascii в toram.
Поведение такое же как и в slackware-xfce-current-live с toram.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>182009</commentid>
    <comment_count>1</comment_count>
    <who name="Speccyfighter">zxwarior</who>
    <bug_when>2019-05-30 02:51:50 +0300</bug_when>
    <thetext>Ошибка также воспроизводится и в p9/branch

Уязвимость в системах на udisks2:
Непревилегированный пользователь может смонтировать накопитель usb-flash.


# cat /etc/os-release 
NAME=&quot;starter kit&quot;
VERSION=&quot;p9 (Hypericum)&quot;
ID=altlinux
VERSION_ID=p9
PRETTY_NAME=&quot;ALT Starterkit (Hypericum)&quot;
ANSI_COLOR=&quot;1;33&quot;
CPE_NAME=&quot;cpe:/o:alt:starterkit:p9&quot;
HOME_URL=&quot;http://en.altlinux.org/starterkits&quot;
BUG_REPORT_URL=&quot;https://bugs.altlinux.org/&quot;


# groups tester
tester : tester


# who | grep tester
tester   tty3         2019-05-26 19:35 (localhost)
tester   :1           2019-05-26 19:29 (:1)


# ls -l /etc/polkit-1/rules.d/
итого 1
-rw-r--r-- 1 root root 326 апр 26 11:40 50-default.rules


# sed -n &apos;173p; 244,248p&apos; /usr/share/polkit-1/actions/org.freedesktop.UDisks2.policy 
  &lt;action id=&quot;org.freedesktop.udisks2.filesystem-mount-other-seat&quot;&gt;
    &lt;defaults&gt;
      &lt;allow_any&gt;auth_admin&lt;/allow_any&gt;
      &lt;allow_inactive&gt;auth_admin&lt;/allow_inactive&gt;
      &lt;allow_active&gt;auth_admin_keep&lt;/allow_active&gt;
    &lt;/defaults&gt;


# ls -l /dev/disk/by-id/ | grep sdc
lrwxrwxrwx 1 root root  9 мая 26  2019 usb-TOSHIBA_TransMemory_756962663EF9CCC0BE129539-0:0 -&gt; ../../sdc
lrwxrwxrwx 1 root root 10 мая 26  2019 usb-TOSHIBA_TransMemory_756962663EF9CCC0BE129539-0:0-part1 -&gt; ../../sdc1
lrwxrwxrwx 1 root root 10 мая 26  2019 usb-TOSHIBA_TransMemory_756962663EF9CCC0BE129539-0:0-part2 -&gt; ../../sdc2


# mount | grep tester
/dev/sdc2 on /run/media/tester/alt-live-storage type ext4 (rw,nosuid,nodev,relatime,block_validity,delalloc,barrier,user_xattr,acl,uhelper=udisks2)


# cat vcs3-p9.txt 

Hello friend, say `altlinux&apos; to log in at tty3
localhost login: tester
Password:
[tester@localhost ~]$ udisksctl mount -b /dev/sdc1
Mounted /dev/sdc1 at /run/media/tester/ALT p8 xfce_i586.
[tester@localhost ~]$
[tester@localhost ~]$ groups
tester
[tester@localhost ~]$
[tester@localhost ~]$ udisksctl mount -b /dev/sda11
==== AUTHENTICATING FOR org.freedesktop.udisks2.filesystem-mount-system ====
Для монтирования WDC WD5000LPCX-24C6HT0 (/dev/sda11) требуется подтверждение подлинности пользователя
Authenticating as: altlinux
Password:
polkit-agent-helper-1: pam_authenticate failed: Authentication failure
==== AUTHENTICATION FAILED ====
Error mounting /dev/sda11: GDBus.Error:org.freedesktop.UDisks2.Error.NotAuthorized: Not authorized to perform operation



# cat vcs3-p9.txt 

Hello friend, say `altlinux&apos; to log in at tty3
localhost login: tester
Password:
[tester@localhost ~]$ udisksctl mount -b /dev/sdc1
Mounted /dev/sdc1 at /run/media/tester/ALT p8 xfce_i586.
[tester@localhost ~]$
[tester@localhost ~]$ groups
tester
...


Но это не касается системных устройств с
HintSystem: true
Здесь права доступа обрабатываются верно:

# cat vcs3-p9.txt 

Hello friend, say `altlinux&apos; to log in at tty3
localhost login: tester
Password:
...
[tester@localhost ~]$ udisksctl mount -b /dev/sda11
==== AUTHENTICATING FOR org.freedesktop.udisks2.filesystem-mount-system ====
Для монтирования WDC WD5000LPCX-24C6HT0 (/dev/sda11) требуется подтверждение подлинности пользователя
Authenticating as: altlinux
Password:
polkit-agent-helper-1: pam_authenticate failed: Authentication failure
==== AUTHENTICATION FAILED ====
Error mounting /dev/sda11: GDBus.Error:org.freedesktop.UDisks2.Error.NotAuthorized: Not authorized to perform operation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189018</commentid>
    <comment_count>2</comment_count>
    <who name="Ivan A. Melnikov">iv</who>
    <bug_when>2020-04-01 13:12:40 +0300</bug_when>
    <thetext>&gt; Следуя правильному алгоритму, udiskctl в tty для непревилегированного, должен
&gt; был задействовать экшн org.freedesktop.udisks2.filesystem-mount-other-seat
&gt; который потребовал бы ввода пароля одного из wheel.

Правильно ли я понял, что Вы считаете, что сессия в X и tty2 это разные seats? Физически, это не так: я, например, в X, и в tty2 нахожусь за одним и тем же монитором и клавиатурой. logind тоже так считает:

$ loginctl list-sessions
SESSION UID USER SEAT  TTY
      3 500 iv   seat0
     37 503 test seat0 tty2

2 sessions listed.

Имя пользователя не имеет значения.

Вы уверены, что у вас правда несколько seats? Как Вы этого добились?</thetext>
  </long_desc>
      
      

    </bug>

</bugzilla>