Bug 36819 - Не wheel user монтирует флешки
Summary: Не wheel user монтирует флешки
Status: NEW
Alias: None
Product: Sisyphus
Classification: Development
Component: udisks2 (show other bugs)
Version: unstable
Hardware: all Linux
: P3 critical
Assignee: Yuri N. Sedunov
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2019-05-30 02:45 MSK by Speccyfighter
Modified: 2020-04-01 13:12 MSK (History)
5 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Speccyfighter 2019-05-30 02:45:09 MSK
Всем доброго.

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

В системе 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 '171p; 239,243p' /usr/share/polkit-1/actions/org.freedesktop.UDisks2.policy
  <action id="org.freedesktop.udisks2.filesystem-mount-other-seat">
    <defaults>
      <allow_any>auth_admin</allow_any>
      <allow_inactive>auth_admin</allow_inactive>
      <allow_active>auth_admin_keep</allow_active>
    </defaults>


накопитель usb

# ls -l /dev/disk/by-id/ | grep sdc
lrwxrwxrwx 1 root root  9 май 23 11:54 usb-Multiple_Card_Reader_058F63666433-0:0 -> ../../sdc
lrwxrwxrwx 1 root root 10 май 23 11:54 usb-Multiple_Card_Reader_058F63666433-0:0-part1 -> ../../sdc1
lrwxrwxrwx 1 root root 10 май 23 11:54 usb-Multiple_Card_Reader_058F63666433-0:0-part2 -> ../../sdc2
lrwxrwxrwx 1 root root 10 май 23 11:54 usb-Multiple_Card_Reader_058F63666433-0:0-part3 -> ../../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 -> ../../sda11                                                                   
lrwxrwxrwx 1 root root 11 май 23 11:48 wwn-0x50014ee605c946d5-part11 -> ../../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 '92p; 163,167p' /usr/share/polkit-1/actions/org.freedesktop.UDisks2.policy
  <action id="org.freedesktop.udisks2.filesystem-mount-system">
    <defaults>
      <allow_any>auth_admin</allow_any>
      <allow_inactive>auth_admin</allow_inactive>
      <allow_active>auth_admin_keep</allow_active>
    </defaults>


Следуя правильному алгоритму, udiskctl в tty для непревилегированного, должен был задействовать экшн
org.freedesktop.udisks2.filesystem-mount-other-seat
который потребовал бы ввода пароля одного из wheel.
Но по моим предположениям, косвенным анализом, он при монтировании флешки в tty, задействовал экшн
org.freedesktop.udisks2.filesystem-mount
который в
<allow_active>yes</allow_active> 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.
Comment 1 Speccyfighter 2019-05-30 02:51:50 MSK
Ошибка также воспроизводится и в p9/branch

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


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


# 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 '173p; 244,248p' /usr/share/polkit-1/actions/org.freedesktop.UDisks2.policy 
  <action id="org.freedesktop.udisks2.filesystem-mount-other-seat">
    <defaults>
      <allow_any>auth_admin</allow_any>
      <allow_inactive>auth_admin</allow_inactive>
      <allow_active>auth_admin_keep</allow_active>
    </defaults>


# ls -l /dev/disk/by-id/ | grep sdc
lrwxrwxrwx 1 root root  9 мая 26  2019 usb-TOSHIBA_TransMemory_756962663EF9CCC0BE129539-0:0 -> ../../sdc
lrwxrwxrwx 1 root root 10 мая 26  2019 usb-TOSHIBA_TransMemory_756962663EF9CCC0BE129539-0:0-part1 -> ../../sdc1
lrwxrwxrwx 1 root root 10 мая 26  2019 usb-TOSHIBA_TransMemory_756962663EF9CCC0BE129539-0:0-part2 -> ../../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' 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' 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' 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
Comment 2 Ivan A. Melnikov 2020-04-01 13:12:40 MSK
> Следуя правильному алгоритму, udiskctl в tty для непревилегированного, должен
> был задействовать экшн org.freedesktop.udisks2.filesystem-mount-other-seat
> который потребовал бы ввода пароля одного из 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? Как Вы этого добились?