Уязвимость в ядре Linux, позволяющая получить локальный root


    Уязвимость позволяет локальному пользователю повысить привилегии до root.
    Уязвимые версии ядра c 2.6.31-rc3 по 3.15-rc5.
    CVE-2014-0196

    Проблема вызвана ошибкой в функции n_tty_write (drivers/tty/n_tty.c), в которой некорректно обрабатывалась ситуация доступа к виртуальному терминалу при использовании флагов «LECHO & !OPOST», что позволяло пользователю инициировать повреждение областей памяти ядра.

    В одном из четырех случаев использование эксплоита вызывает крах ядра.

    Эксплоит работает только на ядрах >= v3.14-rc1, т.к. в нем добавили:
    tty: Halve flip buffer GFP_ATOMIC memory consumption
    

    git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=acc0f67f307f52f7aec1cffdc40a786c15dd21d9
    На который опирается эксплоит.

    Обсуждение на linux.org.ru: www.linux.org.ru/news/security/10479079

    Статья на ArsTechnica arstechnica.com/security/2014/05/linux-gets-fix-for-code-execution-flaw-that-went-unpatched-since-2009

    Bug Report: bugzilla.novell.com/show_bug.cgi?id=875690

    CVE: cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-0196

    POC-Discussion: www.openwall.com/lists/oss-security/2014/05/12/3
    Ads
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More

    Comments 53

      0
      Т.е. воспользоваться повышенными правами удастся только в одном случае из 4х попыток?
        +1
        На 3.14.2 отработал успешно.

        bugfuzz.com/stuff/cve-2014-0196-md.c
        Works only on kernels >=v3.14-rc1 and only on x86_64.
          0
          Да нет, я к тому, что не совсем понятна формулировка с крахом ядра. Ядро може сразу упасть, или уже постфактум через какое-то время?
            +2
              0
              Спасибо за ссылку.
                0
                Я правильно понял, что PAX эта уязвимость не пробивает?
                  0
                  Насколько я понял, PAX не защищает от данной уязвимости. Но Intel SMEP защитит конкретно от этого эксплоита.

                  Данный эксплоит использует запись за границу буферов tty, чтобы перезаписать структуры tty_struct, заменив в них все указатели tty_operations на payload. Функция payload вызывает «commit_creds(prepare_kernel_cred(0))». SMEP не позволит вызвать функцию payload, находящуюся в адресном пространстве пользователя.
              +3
              А говорил: «Я не разбираюсь, я не понимаю в этом ничего» :)
              +1
              В трех из четырех.
                0
                В версии поста до правки было же, имхо, про 75% вероятность краха.
                –4
                Более того, только если у тебя 3.14-3.15.
                И то надо помнить правило — не запускать что попало.
                Технически только недавно 3.14 вышло, обнаружение таких багов показывает всю прелесть опенсорса — баг обнаружен и как я понимаю пофикшек. И в 3.15 релизе уже его не будет.

                Кармы не хватает на ответ людям.
                lolipop, «Представляю как сейчас андроид-ждуны, ждущие рута на свои девайсы радостно потирают ручки :)»
                Неа, уязвимостью можно пользоваться лишь на 3.14 вышедшем недавно. Причем как я понимаю уже вышла версия с фиксом для 3.14 этого бага.
                  +6
                  А прочитать дальше первой строки слабо?

                  The vulnerability should be exploitable all the way from v2.6.31-rc3, however relevant changes to the TTY subsystem were made in commit acc0f67f307f52f7aec1cffdc40a786c15dd21d9 («tty: Halve flip buffer GFP_ATOMIC memory consumption») that make exploitation simpler, which this exploit relies on.

                  В «свободный доступ» выложена версия требующая 3.14, но в rootkit'ах наверняка будут поддерживаться и более старые ядра.
                0
                Ещё одна бородатая уязвимость. 2.6.31-rc3 зарелизили в середине 2009 года.
                  0
                  А 3.15-rc5?
                    +5
                    Он имеет в виду, что эта уязвимость была доступна пять лет.
                    +2
                    Представляю как сейчас андроид-ждуны, ждущие рута на свои девайсы радостно потирают ручки :)
                      0
                      Еще один кандидат на попадание в авторутилки.
                        –2
                        Works only on kernels >=v3.14-rc1 and only on x86_64.

                        Увы.
                          +2
                          Упс, глупость сказал. Это касается только конкретного эксплойта.
                      0
                      Ubuntu 14.04, Linux 3.13.0-26-generic — не сработало.
                      $ ./exploit
                      [+] Resolving symbols
                      [+] Resolved commit_creds: (nil)
                      [+] Resolved prepare_kernel_cred: (nil)
                      $ id
                      uid=1000
                        +4
                        Видимо из-за того что
                        Эксплоит работает только на ядрах >= v3.14-rc1

                        И для 3.13 нужен другой.
                        +1
                        ArchLinux, 3.14.2-1-ARCH x86_64, работает.

                        dfyz@victoria ~ $ ./a.out 
                        [+] Resolving symbols
                        [+] Resolved commit_creds: (address)
                        [+] Resolved prepare_kernel_cred: (address)
                        [+] Doing once-off allocations
                        [+] Attempting to overflow into a tty_struct....
                        [+] Got it :)
                        root@victoria ~ #
                        
                          +5
                          3.14.3-1-ARCH x86_64
                          №1 Краш ядра
                          №2 Got it :)

                          Дальше проверять неохота
                            –5
                            Подскажите как скомпилить для проверки?
                              +4
                              В исходниках написано
                              $ gcc cve-2014-0196-md.c -lutil -lpthread
                              
                                –3
                                Автор статьи указывает что работает на 2.6.31-rc3 — 3.15-rc5 при ядре 2.6.32-431.1.2.0.1.el6.x86_64 имеем такой вывод
                                [test1@test ~]$ ./a.out
                                [+] Resolving symbols
                                [+] Resolved commit_creds: (nil)
                                [+] Resolved prepare_kernel_cred: (nil)

                                Где подвох?
                                  +3
                                  Эксплоит работает только на ядрах >= v3.14-rc1
                                  
                                    –5
                                    В оригинале bugzilla.novell.com/show_bug.cgi?id=875690 пишут 2.6.31 — 3.15rcX, вероятно автор статьи здесь поставил > не в ту сторону.
                                      +8
                                      Ошибка есть в ядрах 2.6.31 — 3.15-rc1. Конкретно этот эксплоит работает на >= v3.14-rc1
                                        +3
                                        Спасибо.
                                        +2
                                        Текущий эксплоит работает только с новыми ядрами (>= v3.14-rc1), под ваше ядро (2.6.32...) нужен другой эксплоит.
                                +1
                                Linux archlinux 3.14.2-1-ARCH x86_64
                                Работает
                                Проверка:
                                gcc expl.c -lutil -lpthread
                                ./a.out

                                Вывод:
                                [coolinich@archlinux ~]$ ./a.out
                                [+] Resolving symbols
                                [+] Resolved commit_creds: 0xffffffff81094990
                                [+] Resolved prepare_kernel_cred: 0xffffffff81094cf0
                                [+] Doing once-off allocations
                                [+] Attempting to overflow into a tty_struct…
                                [+] Got it :)
                                [root@archlinux ~]# exit
                                exit
                                  –19
                                  Вспомнилось «под линух есть 9 вирусов, причем половина из них не работает, а вторую половину стоит больших трудов скомпилить и запустить» (очень примерная цитата).
                                  Нудный этот ваш линух… Даже эксплоиты не всегда работают.
                                    +8
                                    Забавно, хотя на самом деле не так-то и забавно, что данная уязвимость находилась в ядре, как уже заметили выше, около пяти лет и только сейчас ее заметили и пофиксили. И я думаю там еще не одна такая мина замедленного действия лежит. Что немудрено на самом деле.

                                    Еще интересна тема с обновлением старых ядер. Кто-то ведь может сидеть и на старом ядре 2.6.32 каком-нибудь например. Почему это уже другой вопрос. Например из-за экзотических устройств, китайцы знаете очень любят писать для своих устройств драйверы, как модуль ядра, причем для какой-нибудь бородатой версии. А мэйнтейнеры пофиксили скорее всего только свежие версии, несколько последних например.

                                    Полистал ЛОР. Как всегда доставляет. И вам советую. :)

                                    Кстати про мой любимый Debian:
                                    For the stable distribution (wheezy), these problems have been fixed in version 3.2.57-3+deb7u1.
                                      +1
                                      uname -a
                                      Linux host 2.6.32-431.11.2.el6.x86_64

                                      красные шляпы просто не торопятся
                                        –1
                                        Ядро 2.6.32 тоже подвержено уязвимости… (facepalm)
                                          0
                                          Я и говорю — редхет просто не торопится с обновлениями, несмотря на то, что вовсе не китайцы с бородатыми драйверами.
                                            0
                                            Так они на то и RH, чтобы не торопиться с обновлениями :)
                                            P.S. Сначала почему-то подумал, что имеется в виду ядро, якобы слишком старое для этой уязвимости.
                                          +1
                                          Актуальное ядро в centos updates — 2.6.32-431.17.1.el6 (в rhel должно быть оно же), но в нем фикса пока нет.
                                            +1
                                            Дополню, что оно вышло 11 апреля для RHEL и 1 мая для CentOS. Исправляло, в том числе, пачку CVE.
                                        +18
                                        Странно то, что половина комментаторов не различают «уязвимость в ядре» и «эксплоит эксплуатирующий данную уязвимость»…
                                          +41
                                          Разве вы не слышали, что хабр уже не торт?
                                          –2
                                          А как это выглядит в журнале аудита ОС?
                                            +1
                                            А с помощью этой штуки я могу получить рут на своём андроиде?
                                              0
                                              Очевидно, если у вас ядро 3.14, то вы сможете воспользоваться эксплоитом… предварительно скомпилировав его на конечном устройстве (а есть ли на ведройде gcc? :] ). Если ядро подвержено уязвимости, но не 3.14, то, видимо, придется искать другой эксплоит.
                                              Кроме того, это не перманентный рут, ЕМНИП, вам нужно будет установить Superuser или что-нибудь вроде него после получения временного рута.
                                                +3
                                                предварительно скомпилировав его на конечном устройстве
                                                Кросс-комиляция разве не сойдёт?
                                            0
                                            debian 7 уязвим, но обновление уже есть в debian security.
                                            мейнтейнеры генту пока тупят, но мы всегда можем пропатчить сами.
                                              +19
                                              Гентушники как всегда долго собираются :)
                                            • UFO just landed and posted this here
                                                +2
                                                Вы лучше пишите где не пропатчили. ) Хабраэффект не заставит себя долго ждать.
                                                0
                                                Ого, Вольнов что-то знает :D

                                                Only users with full accounts can post comments. Log in, please.