The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

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

14.03.2013 10:02

В списке рассылки oss-security опубликован концептуальный прототип эксплоита, демонстрирующего новую уязвимость в ядре Linux, позволяющую непривилегированному пользователю получить права root. Проблема проявляется только в ядре 3.8, в котором появилась возможность применения пространств имён для непривилегированных пользователей. Исправление пока доступно в виде патча. Проблема не проявляется при использовании sysctl fs.protected_hardlinks=1.

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

Дополнение: Вышло обновление ядра 3.8.3, в которое вошел патч с устранением уязвимости.

  1. Главная ссылка к новости (http://www.openwall.com/lists/...)
  2. OpenNews: Обновление ядра Linux 3.0.67, 3.4.34, 3.7.10 и 3.8.1 с устранением уязвимости
  3. OpenNews: Релиз ядра Linux 3.8. Обзор новшеств
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/36391-linux
Ключевые слова: linux, kernel
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (25) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, бедный буратино (ok), 10:33, 14/03/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +11 +/
    Опять массовая? Только в этом случае пострадавших уже четверо, а не как в прошлый раз?
     
     
  • 2.4, Аноним (-), 11:34, 14/03/2013 [^] [^^] [^^^] [ответить]  
  • +6 +/
    Она не может быть массовой. Так как 3.8 в продакшене на серверах используют только самые упоротые.
     
     
  • 3.5, NickFaces (ok), 11:43, 14/03/2013 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Да и даже в арчике то все еще 3.7 ядрышко. Так что как обычно, пока на него перейдет народ уже более менее все залатают.
     
  • 3.18, pavlinux (ok), 14:12, 14/03/2013 [^] [^^] [^^^] [ответить]  
  • +/
    3.8 следует пропустить, оно ваще поддерживаться не будет.
     

  • 1.2, G.NercY.uR (?), 10:47, 14/03/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +8 +/
    Идёт нескончаемая борьба пытливых умов с руками разработчиков.
     
     
  • 2.7, АнОним (?), 11:48, 14/03/2013 [^] [^^] [^^^] [ответить]  
  • +/
    И продолжается с переменным успехом :)
     

  • 1.20, nrndda (?), 15:02, 14/03/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    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

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

     
     
  • 2.21, nrndda (ok), 15:12, 14/03/2013 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Кстати, домашняя папка расположена не на отдельном разделе.
    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 каждый час и некоторые папки находятся только на нём.

     
     
  • 3.22, nrndda (ok), 15:18, 14/03/2013 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Останавливается тут:
    pid = clone(child, child_stack + sizeof(child_stack),
                CLONE_NEWUSER|CLONE_FS|SIGCHLD, NULL);
    if (pid == -1)
    die("[-] clone");
     
     
  • 4.23, pavlinux (ok), 15:31, 14/03/2013 [^] [^^] [^^^] [ответить]  
  • +/
    $ cat /usr/src/linux/.config | grep CONFIG_USER_NS ?
     
     
  • 5.25, nrndda (ok), 15:51, 14/03/2013 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > $ 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

     
     
  • 6.26, pavlinux (ok), 16:10, 14/03/2013 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Последнее так же непонятно где включается...

    "В 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
    этот эксплойт и дыра НЕ ОПАСНЫ и бесполезны.  
      

     
     
  • 7.29, nrndda (ok), 16:29, 14/03/2013 [^] [^^] [^^^] [ответить]  
  • +/
    Да, без NFS и CIFS можно включить CONFIG_USER_NS.
    Но без первого я уже не могу обойтись. Сервак с файлохранилищем там у меня..

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

     
  • 3.28, Michael Shigorin (ok), 16:28, 14/03/2013 [^] [^^] [^^^] [ответить]  
  • +/
    > P.S. Такие странные mount из-за ssd.

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

     
     
  • 4.31, nrndda (ok), 16:41, 14/03/2013 [^] [^^] [^^^] [ответить]  
  • +/
    Для ssd стоит. Для hdd поставил, гляну на результат.
     
     
  • 5.32, Michael Shigorin (ok), 17:36, 14/03/2013 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Для ssd стоит.

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

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

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

     
     
  • 6.33, nrndda (ok), 20:13, 14/03/2013 [^] [^^] [^^^] [ответить]  
  • +/
    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'ом. Теперь полностью доволен;)

     
     
  • 7.35, Michael Shigorin (ok), 23:04, 14/03/2013 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Так как это был мой первый опыт с ssd, то я посчитал достаточным такой подход.

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

     

  • 1.24, pavlinux (ok), 15:41, 14/03/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    У меня ваще жопа!

    $ 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

     
     
  • 2.27, Аноним (-), 16:26, 14/03/2013 [^] [^^] [^^^] [ответить]  
  • –1 +/
    юзай ldconfig для перестройки кеша
     
     
  • 3.30, pavlinux (ok), 16:35, 14/03/2013 [^] [^^] [^^^] [ответить]  
  • +/
    man ldconfig
    man gcc на предмет -static
     
  • 3.36, Карбофос (ok), 00:50, 15/03/2013 [^] [^^] [^^^] [ответить]  
  • +/
    статически собранное? не, не слышал
     

  • 1.34, linux must _RIP_ (?), 21:08, 14/03/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    > Проблема проявляется только в ядре 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>
       

     
  • 1.39, Ващенаглухо (ok), 09:01, 18/03/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    $ ./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

     
     
  • 2.40, pavlinux (ok), 16:17, 18/03/2013 [^] [^^] [^^^] [ответить]  
  • +/
    > $ ./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';

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру