URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID3
Нить номер: 89096
[ Назад ]

Исходное сообщение
"В ядре Linux 3.8 выявлена уязвимость"

Отправлено opennews , 14-Мрт-13 10:33 
В списке рассылки oss-security опубликован (http://www.openwall.com/lists/oss-security/2013/03/13/8) концептуальный прототип эксплоита (http://stealth.openwall.net/xSports/clown-newuser.c), демонстрирующего новую уязвимость в ядре Linux, позволяющую непривилегированному пользователю, имеющему привилегированный доступ в изолированном контейнере, получить права root во внешней системе. Проблема проявляется только в ядре 3.8 (http://www.opennet.me/opennews/art.shtml?num=36153), в котором появилась возможность применения пространств имён для непривилегированных пользователей. Исправление пока доступно в виде патча (https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux....). Проблема не проявляется при использовании sysctl fs.protected_hardlinks=1.


Уязвимость вызвана недопустимостью комбинации флагов CLONE_NEWUSER и CLONE_FS при клонировании процесса, что позволяет нескольким процессам, работающим в разных пространствах имён, совместно использовать одну корневую директорию после манипуляций с созданием chroot и корректировки данных в /proc/pid/uid_map.


URL: http://www.openwall.com/lists/oss-security/2013/03/13/8
Новость: http://www.opennet.me/opennews/art.shtml?num=36391


Содержание

Сообщения в этом обсуждении
"В ядре Linux 3.8 выявлена уязвимость"
Отправлено бедный буратино , 14-Мрт-13 10:33 
Опять массовая? Только в этом случае пострадавших уже четверо, а не как в прошлый раз?

"В ядре Linux 3.8 выявлена уязвимость"
Отправлено Аноним , 14-Мрт-13 11:34 
Она не может быть массовой. Так как 3.8 в продакшене на серверах используют только самые упоротые.

"В ядре Linux 3.8 выявлена уязвимость"
Отправлено NickFaces , 14-Мрт-13 11:43 
Да и даже в арчике то все еще 3.7 ядрышко. Так что как обычно, пока на него перейдет народ уже более менее все залатают.

"В ядре Linux 3.8 выявлена уязвимость"
Отправлено pavlinux , 14-Мрт-13 14:12 
3.8 следует пропустить, оно ваще поддерживаться не будет.

"В ядре Linux 3.8 выявлена уязвимость"
Отправлено G.NercY.uR , 14-Мрт-13 10:47 
Идёт нескончаемая борьба пытливых умов с руками разработчиков.

"В ядре Linux 3.8 выявлена уязвимость"
Отправлено АнОним , 14-Мрт-13 11:48 
И продолжается с переменным успехом :)

"В ядре Linux 3.8 выявлена уязвимость"
Отправлено nrndda , 14-Мрт-13 15:02 
14:55|nrndda@nrndda-core ~ $ grep -i namespace /usr/src/linux/.config
CONFIG_NAMESPACES=y
14:55|nrndda@nrndda-core ~ $ cc -Wall clown-newuser.c -static
14:55|nrndda@nrndda-core ~ $ ./a.out
[**] clown-newuser -- CLONE_NEWUSER local root (C) 2013 Sebastian Krahmer

[+] Found myself: '/home/nrndda/a.out'
[*] Parent waiting for boomsh to appear ...
[*] Setting up chroot ...
[+] Done.
[*] Cloning evil child ...
[-] clone: Invalid argument

^C
14:56|nrndda@nrndda-core ~ $ uname -a
Linux nrndda-core 3.8.2-gentoo #3 SMP PREEMPT Tue Mar 5 19:25:13 MSK 2013 x86_64 Intel(R) Core(TM)2 Duo CPU E4700 @ 2.60GHz GenuineIntel GNU/Linux
14:59|nrndda@nrndda-core ~ $ sudo sysctl -a | grep protected_hardlinks
fs.protected_hardlinks = 0

Второй запуск приводит к:
15:00|nrndda@nrndda-core ~ $ ./a.out
[**] clown-newuser -- CLONE_NEWUSER local root (C) 2013 Sebastian Krahmer

[+] Found myself: '/home/nrndda/a.out'
[*] Parent waiting for boomsh to appear ...
[*] Setting up chroot ...
[-] link: File exists

В чём дело? Почему не работает...


"В ядре Linux 3.8 выявлена уязвимость"
Отправлено nrndda , 14-Мрт-13 15:12 
Кстати, домашняя папка расположена не на отдельном разделе.
15:09|nrndda@nrndda-core ~ $ mount | grep -iE "home"
/dev/sdb3 on /home/nrndda/temp type ext4 (rw,relatime,commit=60,data=ordered)
/dev/sdb3 on /home/nrndda/git type ext4 (rw,relatime,commit=60,data=ordered)
/dev/sdb3 on /home/nrndda/Progs type ext4 (rw,relatime,commit=60,data=ordered)
/dev/sdb3 on /home/nrndda/Games type ext4 (rw,relatime,commit=60,data=ordered)
/dev/sdb3 on /home/ni4ei type ext4 (rw,relatime,commit=60,data=ordered)
/dev/sdb3 on /home/portage type ext4 (rw,relatime,commit=60,data=ordered)
10.0.0.2:/ on /home/FTP type nfs4 (rw,nosuid,nodev,relatime,vers=4.0,rsize=524288,wsize=524288,namlen=255,hard,proto=tcp,timeo=30,retrans=2,sec=sys,clientaddr=10.0.0.3,local_lock=none,addr=10.0.0.2)

P.S. Такие странные mount из-за ssd. На hdd сбрасываются срезы(rsync) с ssd каждый час и некоторые папки находятся только на нём.


"В ядре Linux 3.8 выявлена уязвимость"
Отправлено nrndda , 14-Мрт-13 15:18 
Останавливается тут:
    pid = clone(child, child_stack + sizeof(child_stack),
                CLONE_NEWUSER|CLONE_FS|SIGCHLD, NULL);
    if (pid == -1)
        die("[-] clone");

"В ядре Linux 3.8 выявлена уязвимость"
Отправлено pavlinux , 14-Мрт-13 15:31 
$ cat /usr/src/linux/.config | grep CONFIG_USER_NS ?

"В ядре Linux 3.8 выявлена уязвимость"
Отправлено nrndda , 14-Мрт-13 15:51 
> $ cat /usr/src/linux/.config | grep CONFIG_USER_NS ?

Нету его в .config. Тем более:
Depends on: NAMESPACES [=y] && EXPERIMENTAL [=y] && UIDGID_CONVERTED [=n]
Последнее так же непонятно где включается...

В init/Kconfig стоит вот что:
config UIDGID_CONVERTED
        # True if all of the selected software conmponents are known
        # to have uid_t and gid_t converted to kuid_t and kgid_t
        # where appropriate and are otherwise safe to use with
        # the user namespace.
        bool
        default y

        # Networking
        depends on NET_9P = n

        # Filesystems
        depends on 9P_FS = n
        depends on AFS_FS = n
        depends on CEPH_FS = n
        depends on CIFS = n
        depends on CODA_FS = n
        depends on GFS2_FS = n
        depends on NCP_FS = n
        depends on NFSD = n
        depends on NFS_FS = n
        depends on OCFS2_FS = n
        depends on XFS_FS = n


"В ядре Linux 3.8 выявлена уязвимость"
Отправлено pavlinux , 14-Мрт-13 16:10 
> Последнее так же непонятно где включается...

"В Linux даже под эксплойты надо ядро перекомпилировать" (с) :)

Вот эти все выключи:

# Networking
        depends on NET_9P = n

# Filesystems
        depends on 9P_FS = n
        depends on AFS_FS = n
        depends on CEPH_FS = n
        depends on CIFS = n
        depends on CODA_FS = n
        depends on GFS2_FS = n
        depends on NCP_FS = n
        depends on NFSD = n
        depends on NFS_FS = n
        depends on OCFS2_FS = n
        depends on XFS_FS = n   # я не могу, у меня XFS везде, пичалька :(

---
Собственно из этого мини-анализа можно сделать вывод:

  Пользователям файловых систем: Plan9, AFS, CEPH, CIFS, CODA, GFS2, NCP, NFS, OCFS2 и XFS
этот эксплойт и дыра НЕ ОПАСНЫ и бесполезны.  
  


"В ядре Linux 3.8 выявлена уязвимость"
Отправлено nrndda , 14-Мрт-13 16:29 
Да, без NFS и CIFS можно включить CONFIG_USER_NS.
Но без первого я уже не могу обойтись. Сервак с файлохранилищем там у меня..

Паника отменяется:)


"(offtopic) ext4 на ssd"
Отправлено Michael Shigorin , 14-Мрт-13 16:28 
> P.S. Такие странные mount из-за ssd.

Гм, а не лучше ли тогда min_batch_time в несколько тысяч выставить?


"(offtopic) ext4 на ssd"
Отправлено nrndda , 14-Мрт-13 16:41 
Для ssd стоит. Для hdd поставил, гляну на результат.

"(offtopic) ext4 на ssd"
Отправлено Michael Shigorin , 14-Мрт-13 17:36 
> Для ssd стоит.

В #21 только commit просто был.

> Для hdd поставил, гляну на результат.

Там-то зачем...


"(offtopic) ext4 на ssd"
Отправлено nrndda , 14-Мрт-13 20:13 
ssd у меня - /dev/sda. Там стоит в опциях следующее: noatime, nodiratime, min_batch_time=20000, max_batch_time=40000,commit=60,discard,errors=remount-ro

hdd монтируется в /mnt/hdd1 (root) и /mnt/hdd2 (home), а потом с помощью bind монтируются некоторые каталоги поверх корня под ssd.

В кроне стоят правила синхронизации sdd и hdd.
0 */2 * * * ${RSYNC} --delete -a --exclude={/dev/*,/home/*,/media/*,/mnt/*,/proc/*,/run/*,/sys/*,/tmp/*,/var/log/*,/usr/portage/distfiles/*,/lost+found/*} / /mnt/hdd1/
5 */2 * * * ${RSYNC} --delete -a --exclude={/FTP/*,/portage/*,/ni4ei/*,/nrndda/Music/*,/nrndda/Games/*,/nrndda/Progs/*,/nrndda/git*,/nrndda/temp/*,/lost+found/*} /home/ /mnt/hdd2/

В результате получаем надёжную систему вне зависимости от выхода из строя ssd. Так как это был мой первый опыт с ssd, то я посчитал достаточным такой подход.
За 4-е месяца:
9 Power_On_Hours_and_Msec 0x0032   099   099   000    Old_age   Always - 1682h+47m+22.820s
12 Power_Cycle_Count       0x0032   100   100   000    Old_age   Always  -       162
230 Life_Curve_Status       0x0013   100   100   000    Pre-fail  Always -       100
231 SSD_Life_Left           0x0013   100   100   010    Pre-fail  Always -       0
241 Lifetime_Writes_GiB     0x0032   000   000   000    Old_age   Always -       636
242 Lifetime_Reads_GiB      0x0032   000   000   000    Old_age   Always -       1386

P.S. Выставление min_batch_time и max_batch_time для hdd снизило подтормаживания при синхронизации каталогов rsync'ом. Теперь полностью доволен;)


"(offtopic) ext4 на ssd"
Отправлено Michael Shigorin , 14-Мрт-13 23:04 
> Так как это был мой первый опыт с ssd, то я посчитал достаточным такой подход.

Один работает уже три года без trim (старое ядро), второй такой же -- два+ года с trim и довольно активно, третий -- два+ месяца тоже с trim.  Живы пока все три.


"В ядре Linux 3.8 выявлена уязвимость"
Отправлено pavlinux , 14-Мрт-13 15:41 
У меня ваще жопа!

$ gcc -Wall clown-newuser.c -static
/usr/lib64/gcc/x86_64-suse-linux/4.7/../../../../x86_64-suse-linux/bin/ld: cannot find -lc
collect2: error: ld returned 1 exit status


"В ядре Linux 3.8 выявлена уязвимость"
Отправлено Аноним , 14-Мрт-13 16:26 
юзай ldconfig для перестройки кеша

"В ядре Linux 3.8 выявлена уязвимость"
Отправлено pavlinux , 14-Мрт-13 16:35 
man ldconfig
man gcc на предмет -static

"В ядре Linux 3.8 выявлена уязвимость"
Отправлено Карбофос , 15-Мрт-13 00:50 
статически собранное? не, не слышал

"В ядре Linux 3.8 выявлена уязвимость"
Отправлено linux must _RIP_ , 14-Мрт-13 21:08 
> Проблема проявляется только в ядре 3.8,

проблема есть в SLES10, потом не подвержены, потом начиная с ~3.6.

commit 5eaf563e53294d6696e651466697eb9d491f3946
Author: Eric W. Biederman <ebiederm@xmission.com>
Date:   Mon Nov 21 17:22:31 2011 -0800

   userns: Allow unprivileged users to create user namespaces.
...
   Acked-by: Serge Hallyn <serge.hallyn@canonical.com>
   


"В ядре Linux 3.8 выявлена уязвимость"
Отправлено Ващенаглухо , 18-Мрт-13 09:01 
$ ./clown-newuser
[**] clown-newuser -- CLONE_NEWUSER local root (C) 2013 Sebastian Krahmer

[+] Found myself: '/home/exploit/clown-newuser'
[*] Parent waiting for boomsh to appear ...
[*] Setting up chroot ...
[+] Done.
[*] Cloning evil child ...
[-] clone: Operation not permitted

И так висит...
^C


"В ядре Linux 3.8 выявлена уязвимость"
Отправлено pavlinux , 18-Мрт-13 16:17 
> $ ./clown-newuser
> [**] clown-newuser -- CLONE_NEWUSER local root (C) 2013 Sebastian Krahmer
> [+] Found myself: '/home/exploit/clown-newuser'
> [*] Parent waiting for boomsh to appear ...
> [*] Setting up chroot ...
> [+] Done.
> [*] Cloning evil child ...
> [-] clone: Operation not permitted
> И так висит...
> ^C

$ strace -p `pidof clown-newuser`;