Уязвимость в ядре 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
    Share post

    Similar posts

    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    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 нужен другой.
                        –43
                        Я твою мамку рутанул!
                          +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.