The OpenNET Project / Index page

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

В проприетарных драйверах NVIDIA обнаружена новая local root уязвимость

01.08.2012 19:34

В списке рассылки Full-Disclosure один из open source разработчиков из Intel опубликовал сообщение о том, что анонимный источник передал ему рабочий экземпляр эксплоита, который позволяет получить root-права любому локальному пользователю, который использует проприетарные драйверы для видеокарт NVIDIA.

Автор эксплоита послал сообщение об уязвимости в NVIDIA более месяца назад, однако, так и не получив ответа от компании, он передал код Dave Airlie. Эксплоит использует возможности устройства /dev/nvidia0, экспортируемого драйверами, которое позволяет менять параметры VGA-окна. Схема работы состоит в том, что программа двигает окна по экрану до тех пор, пока она не найдёт физическую область памяти, которая принадлежит ядру.

Используйте эксплоит на свой страх и риск - в прошлом уже была ситуация, когда под видом экплоита распространялся троян, который открывал на компьютере удалённый доступ к root shell.

  1. Главная ссылка к новости (http://permalink.gmane.org/gma...)
  2. OpenNews: Локальная уязвимость в X.Org
  3. OpenNews: Релиз драйверов NVIDIA 295.40, закрывающих локальную root-уязвимость
  4. OpenNews: Обновление проприетарных драйверов NVIDIA 304.22. Форум NVIDIA подвергся взлому
Автор новости: Artem S. Tashkinov
Тип: Проблемы безопасности
Ключевые слова: nvidia, drivers, security, root, exploit
При перепечатке указание ссылки на opennet.ru обязательно
Обсуждение (60) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Анонимус_б6 (?), 20:35, 01/08/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +11 +/
    >Используйте эксплоит на свой страх и риск

    суперпредложение

     
  • 1.2, Wormik (ok), 20:40, 01/08/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Давно уже не было root-уязвимостей в драйвере NVIDIA! Никто не знает, с какой версии появилась эта уязвимость, и уязвимость с зависанием на 2 месяце аптайма для 32-битных систем?
     
     
  • 2.4, ВовкаОсиист (ok), 20:43, 01/08/2012 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Разве давно? Помоему совсем недавно писали...
     
  • 2.10, Аноним (-), 21:28, 01/08/2012 [^] [^^] [^^^] [ответить]  
  • +/
    у меня уже года два есть проблема с зависанием, если не больше
     
     
  • 3.21, Аноним (-), 22:10, 01/08/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Да уж, проблема зависания чьего-то компьютера неизвестно по какой причине - должна быть равносильна проблеме использования конкретного продукта абсолютно у всех.
     
  • 2.11, Аноним (-), 21:32, 01/08/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Почти целый месяц. Но все уже соскучились
     
     
  • 3.23, Wormik (??), 22:37, 01/08/2012 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Почти целый месяц.

    Внимательно посмотри на даты "похожих новостей".

     

  • 1.3, Аноним (-), 20:41, 01/08/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +5 +/
    Аноним негодуэ! Почему нет скриншота со средним пальцем дяди Линуса?!
     
  • 1.5, Аноним (-), 20:49, 01/08/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    новый хардкор от нвидиа!
     
  • 1.6, Аноним (-), 20:59, 01/08/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Одному из open source разработчиков из Intel мы показываем результат работы этой программы
    :~> gcc 86747-001.c
    :~> ./a.out
    [*] IDT offset at 0xffffffff81da2000
    [*] Abusing nVidia...
    [*] CVE-2012-YYYY
    [*] 64-bits Kernel found at ofs 0
    [*] Using IDT entry: 220 (0xffffffff81da2dc0)
    [*] Enhancing gate entry...
    [*] Triggering payload...
    [*] Hiding evidence...
    callsetroot returned fffffffffffffffe (-2)
    [*] Failed to get root.
    Ну что это за новость? Где захват рута?
     
     
  • 2.8, Аноним (-), 21:20, 01/08/2012 [^] [^^] [^^^] [ответить]  
  • +2 +/
    У тебя драйвера не той системы.
     

  • 1.7, Аноним (-), 21:13, 01/08/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • –3 +/
    > на свой страх и риск - в прошлом уже была ситуация,
    > когда под видом экплоита распространялся троян

    Это opennet трояны раздавал?

     
     
  • 2.9, Аноним (-), 21:22, 01/08/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > Это opennet трояны раздавал?

    Были шуточки с троянами замаскированными под патчи и эксплойты.

     
     
  • 3.41, Аноним (-), 23:49, 01/08/2012 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Урод ты мне все стер. Вычислю по ip и кости переломаю.

    Не надо ему кости ломать. Для начинающих и продолжающих дебилов делающих неизвестно что и зачем по чужим советам у нас есть и другие годные рецепты улучшения настроения. Ну вон ниже - пример использования контактного провода электричек (там 3kV) в качестве турника. И пантограф как гимнастический снаряд. Не хочешь повторить такую "гимнастику"? Подсказываю: если это делать безбашенно - мгновенно станешь похож на шашлык из соседних роликов.

     
  • 2.15, vadiml (ok), 21:54, 01/08/2012 [^] [^^] [^^^] [ответить]  
  • +/
    perl -e "print '[:|||:]'"
     
  • 2.16, sam002_tmp (?), 21:57, 01/08/2012 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Аккуратнее с такими шутками... Сейчас много новых людей приходят на тематические ресурсы. Не все застали времена этой подставы, так что лучше давайте предупреждение, народ сам сделает выводы, не теряя данные.
     
     
  • 3.19, Сергей (??), 22:05, 01/08/2012 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Дык, учить надо, а то потом таким и впаривают такую вирусню, какую и вирусом назвать стыдно.
     
  • 3.38, Аноним (-), 23:43, 01/08/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > Аккуратнее с такими шутками...

    Да они потом спасибо скажут. Такой урок "не работай под рутом" запоминается на всю жизнь и дает хорошие предпосылки для излечивания от доверчивости

     

  • 1.14, Аноним (-), 21:52, 01/08/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Fuck you, NVIDIA!
     
     
  • 2.43, Аноним (-), 23:59, 01/08/2012 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Fuck you, NVIDIA!

    ...сказали хакеры :)

     

  • 1.17, Сергей (??), 21:59, 01/08/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Я правильно понял, что там еще /dev/mem необходим доступный на запись?
    А то у меня
    crw-r----- 1 root kmem 1, 1 Июл 30 20:25 /dev/mem
     
  • 1.20, Artificial_Thought (?), 22:08, 01/08/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    artifth@whiteblade ~/src » whoami
    artifth
    artifth@whiteblade ~/src » ./expl
    [*] IDT offset at 0xffffffff81dd7000
    [*] Abusing nVidia...
    [*] CVE-2012-YYYY
    [*] 64-bits Kernel found at ofs 0
    [*] Using IDT entry: 220 (0xffffffff81dd7dc0)
    [*] Enhancing gate entry...
    [*] Triggering payload...
    [*] Hiding evidence...
    [*] Have root, will travel..
    sh-4.2# whoami
    root
     
     
  • 2.22, Аноним (22), 22:20, 01/08/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Какая версия драйверов?
     
     
  • 3.26, Artificial_Thought (?), 22:57, 01/08/2012 [^] [^^] [^^^] [ответить]  
  • +/
    295.49
     
     
  • 4.40, Аноним (-), 23:48, 01/08/2012 [^] [^^] [^^^] [ответить]  
  • +/
    nvidia-xconfig:  version 304.30
    Рут не получает
     
  • 2.27, Сергей (??), 23:00, 01/08/2012 [^] [^^] [^^^] [ответить]  
  • +/
    У вас чё, действительно /dev/mem на запись для юзера открыт?
     
     
  • 3.28, Artificial_Thought (?), 23:03, 01/08/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > У вас чё, действительно /dev/mem на запись для юзера открыт?

    » ls /dev/mem -lh
    crw-r----- 1 root kmem 1, 1 авг.   1 21:04 /dev/mem

     
     
  • 4.30, Сергей (??), 23:07, 01/08/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Оно ж отваливать должно тогда, судя по исходникам, т.к. там
    static int devmem_fd(void)
    {
      int fd = open("/dev/mem", O_RDWR|O_SYNC);
      if (fd < 0)
        perror("/dev/mem");
      return fd;
    }
    и потом везде отваливает, если вернуло -1
     
     
  • 5.31, Artificial_Thought (?), 23:12, 01/08/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > Оно ж отваливать должно тогда, судя по исходникам, т.к. там
    > static int devmem_fd(void)
    > {
    >   int fd = open("/dev/mem", O_RDWR|O_SYNC);
    >   if (fd < 0)
    >     perror("/dev/mem");
    >   return fd;
    > }
    > и потом везде отваливает, если вернуло -1

    Может оно делается уже после получения рута?

     
     
  • 6.32, Сергей (??), 23:20, 01/08/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Никак не позже, т.к. в начале main() есть
    handle = nvidia_handle(devmem_fd(), res);
    if (!getuid()) {
      setgid(1000);
      setuid(1000);
    }
    if (handle == MAP_FAILED)
      return -1;
    , где окончательный отвал.
    А начало
    volatile uint32_t *nvidia_handle(int fd, uint64_t res) {
      // access 4 bytes at a time or things go weird
      volatile uint32_t *m;

      if (fd < 0)
        return MAP_FAILED;
    к нему приводит.

     
     
  • 7.34, exception13 (?), 23:29, 01/08/2012 [^] [^^] [^^^] [ответить]  
  • +/
    глаза разуй. там код для работы с /dev/mem завернут в условия. ну и каменты в коде хоть почитай.
     
     
  • 8.36, Сергей (??), 23:39, 01/08/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Да, точно volatile uint32_t nvidia_handle int fd, uint64_t res ... текст свёрнут, показать
     
     
  • 9.39, exception13 (?), 23:46, 01/08/2012 [^] [^^] [^^^] [ответить]  
  • +/
    работа с dev mem нужна для отладки и требует запуска от в одном случае прост... текст свёрнут, показать
     
  • 6.35, Сергей (??), 23:34, 01/08/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > Может оно делается уже после получения рута?

    Да, так и есть. Только по исходникам не понял.

     

  • 1.24, ВовкаОсиист (ok), 22:40, 01/08/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +5 +/
    Запустил - не сработало. Потом вспомнил что у меня стоит радеон :-D
     
     
  • 2.33, ВовкаОсиист (ok), 23:22, 01/08/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Поставил невидию, и:

    [vova7890@localhost ~]$ ./exploit
    [*] IDT offset at 0xffffffff8196b000
    [*] Abusing nVidia...
    [*] CVE-2012-YYYY
    [*] 64-bits Kernel found at ofs 0
    [*] Using IDT entry: 220 (0xffffffff8196bdc0)
    [*] Enhancing gate entry...
    [*] Triggering payload...
    Убито
    [vova7890@localhost ~]$ nvidia-xconfig -v
    nvidia-xconfig:  version 295.53

    [vova7890@localhost ~]$ uname -r
    3.5.0-1-ARCH

    Нисудьба...

     
     
  • 3.42, Сергей (??), 23:54, 01/08/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > [vova7890@localhost ~]$ nvidia-xconfig -v
    > nvidia-xconfig:  version 295.53

    Не так.
    cat /proc/driver/nvidia/version

     
     
  • 4.51, ВовкаОсиист (ok), 12:13, 02/08/2012 [^] [^^] [^^^] [ответить]  
  • +/
    [vova7890@localhost ~]$ cat /proc/driver/nvidia/version
    NVRM version: NVIDIA UNIX x86_64 Kernel Module  295.53  Fri May 11 23:28:10 PDT 2012
    GCC version:  gcc версия 4.7.1 (GCC)
     
  • 3.57, Денис (??), 07:22, 03/08/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > Поставил невидию, и:
    > [vova7890@localhost ~]$ uname -r
    > 3.5.0-1-ARCH

    Уже 3.5 ? откуда ?


     
     
  • 4.65, Xaionaro (ok), 08:52, 28/08/2012 [^] [^^] [^^^] [ответить]  
  • +/
    >> Поставил невидию, и:
    >> [vova7890@localhost ~]$ uname -r
    >> 3.5.0-1-ARCH
    > Уже 3.5 ? откуда ?

    http://kernel.org/  --  отсюда?

     

  • 1.25, Аноним (-), 22:55, 01/08/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    ваще, очково запускать. отрыл файл и ничего не понял. пол файла байты тасуют, остальная половина асм вставки.
     
     
  • 2.45, Аноним (-), 00:07, 02/08/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > ваще, очково запускать. отрыл файл и ничего не понял. пол файла байты
    > тасуют, остальная половина асм вставки.

    На первый взгляд ничего особо подозрительного там нет. В отличие от мутотени от acidbitchez с бинарной вставкой сплойта в виде массива байтов без сорца породившего этот блоб делающей хзчто, тут сплойт аккуратненько на асме выписан, в виде сорца. Откровенного деструктива не вижу. Ну кроме раздачи себе правов на все и вся и получения рута под конец :)

     

  • 1.47, pavlinux (ok), 01:20, 02/08/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    a out code IDT offset at 0xffffffff81694000 Abusing nVidia ... текст свёрнут, показать
     
  • 1.48, edwin (ok), 10:22, 02/08/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    В свете этих всех событий малось по иному оцениваеш слова Линуса а адрес Nvidia ....
     
     
  • 2.49, Ваня (??), 10:40, 02/08/2012 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Разве? Сравни:

    В программе Блокнот.exe найдена уязвимость, позволяющая пользователю получить root-доступ к системе.

    В gnome3 найдена уязвимость, позволяющая пользователю получить root-доступ к системе.

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

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

    ---

    Только я один вижу что контроль root-доступа - это прямая обязанность ОС?

     
     
  • 3.53, Руслан Зиганшин (?), 16:12, 02/08/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Драйвер - часть ядра ОС (хоть и отделяемая). Его действия сложнее контролировать (особенно если код закрыт)
     
     
  • 4.59, Ваня (??), 10:46, 03/08/2012 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Вы не понимаете о чём говорите.

    > Драйвер - часть ядра ОС

    Нет. Драйвер - отдельная программа, такая же как и напр. скачанная с хакерского сайта.

    > Его действия сложнее контролировать

    А чем контроль программы А отличается от контроля программы Б? Если архитектура ОС построена правильно, то никакой.

    > (особенно если код закрыт)

    Да будет вам известно, что после компиляции открытый и закрытый код выглядят одинаково, и процессор, исполняющий бинарный код, об открытости, закрытости, СПО и человеке-столе ничего не знает.

     
  • 3.55, Аноним (-), 22:58, 02/08/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > Только я один вижу что контроль root-доступа - это прямая обязанность ОС?

    Ну так драйвер работает в режиме ядра (как минимум частично). По поводу чего становится как часть ОС. По поводу чего да, драйвер обязан быть без багов позволяющих эскалировать привилегии.


     
     
  • 4.58, Ваня (??), 10:42, 03/08/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > драйвер работает в режиме ядра

    Это архитектурная ошибка реализации. В Windows драйвер НЕ работает в режиме ядра и даже преднамеренное нарушение работы системы невозможно.

    > драйвер обязан быть без багов позволяющих эскалировать привилегии

    А программы не должны быть вирусами и троянами. А пользователи не должны обращаться к данным к которым у них нет доступа, даже если доступ у них есть. Если бы все ОБЯЗАНЫ выполнялись - никаких привилегий не было бы в принципе.

     
     
  • 5.60, edwin (ok), 10:50, 03/08/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > В Windows драйвер НЕ работает в режиме ядра и даже преднамеренное нарушение работы системы невозможно.

    Друг мой, а HAL где работает, напомнить ? На 0-м уровне .... с соот. последсвиями. .... кроме того есть понятия "Kernel mode drivers" ... Вам ЭТО ничего не говорит ?

     
     
  • 6.61, Ваня (??), 11:39, 03/08/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Речь о драйвере видеоадаптера, "друг мой", или вы предпочли сменить тему? HAL - не драйвер, а неотделимая часть ОС.
     
     
  • 7.62, edwin (ok), 11:46, 03/08/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > Речь о драйвере видеоадаптера, "друг мой", или вы предпочли сменить тему? HAL
    > - не драйвер, а неотделимая часть ОС.

    К сожалению Вы не дочитали до конца мое сообщение.
    Потому, что тему я не менял, иначе с чего бы я у Вам спрашивал про "Kernel mode drivers" ? Теперь по поводу HAL .... вопрос в том, что сам HAL можено рассматривать как один мега драйвер, который также работает в kernel mode.


     
  • 5.66, Xaionaro (ok), 08:57, 28/08/2012 [^] [^^] [^^^] [ответить]  
  • +/
    >> драйвер работает в режиме ядра
    > Это архитектурная ошибка реализации. В Windows драйвер НЕ работает в режиме ядра
    > и даже преднамеренное нарушение работы системы невозможно.

    Вы о чём? А в каком же CPU-ring-е оно работает? Скажите, пожалуйста. Да, есть ещё 1-ое и 2-ое кольцо, которые были придуманы специально для драйверов, но по своим причинам они обычно не используются (и которые, кстати, тоже слишком излишне привилегированы для избежания подобных эксплойтов). Никогда не задумывались, почему кривые драйвера в вашем любимом "Windows" приводят частенько к синим окнам? Я в курсе что в windows есть возможность запускать драйвера в user-mode. Но как вы себе представляете работу _видеодрайвера_ вынесенного в user-space. Насколько большой будет overhead, чтобы выполнялись операции требующие ring0?

    И ещё момент, что такое правильная архитектура? Когда там уже этот MINIX или что там микроядерное станет целесообразным для использования? Разве что QNX показался забавным, но для моих целей бесполезным.

     
  • 2.50, Andrey Mitrofanov (?), 10:47, 02/08/2012 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > В свете этих всех событий
    >оцениваеш слова Линуса а адрес Nvidia ....

    Если Вы думаете, что Линус говорил что-то про локал рута _или проприертарные дырверы нВ, то Вы ничего не поняли.

    Если Вы думаете, что наличие, "качество" или некачественность проприертарных дырверов нВ _могут или должны как-то влиять на оценку эскапады гр.Т., то ...


    Не, ну, мож и я, конечно, чего не пониаю.

     

  • 1.52, q (??), 15:19, 02/08/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    Монолитное ядро - приглашение для трояна.
     
     
  • 2.54, Аноним (-), 22:20, 02/08/2012 [^] [^^] [^^^] [ответить]  
  • +/
    это вообще не релевантно монолитности/микроядерности
     
     
  • 3.67, Xaionaro (ok), 09:12, 28/08/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > это вообще не релевантно монолитности/микроядерности

    Ну почему? Никто не мешает драйвер вынести в отдельный user-mode-процесс и обрабатывать в CPU ring3, постоянно обмениваясь сообщениями с микроядром. Будет контроль над действиями в сообщениях и подобные баги будет менее вероятны. С другой стороны кто будет выносить драйвер видеокарты в user-mode?

     
  • 2.56, Аноним (-), 22:59, 02/08/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > Монолитное ядро - приглашение для трояна.

    Да уж. Микроядерные ОС обычно настолько недопилены и обкоцаны что там ничего не работает. Ни трояны, ни нормальные программы.

     

  • 1.63, Xaionaro (ok), 08:46, 28/08/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    debian/wheezy

    ii  nvidia-kernel-dkms                                          302.17-3

    [xaionaro@sandbox ~]$ ./a.out
    [*] IDT offset at 0xffffffff8172b000
    [*] Abusing nVidia...
    [*] CVE-2012-YYYY
    [*] 64-bits Kernel found at ofs 0
    [*] Using IDT entry: 220 (0xffffffff8172bdc0)
    [*] Enhancing gate entry...
    [*] Triggering payload...
    Killed

     
     
  • 2.64, Xaionaro (ok), 08:51, 28/08/2012 [^] [^^] [^^^] [ответить]  
  • +/
    additional info:

    [xaionaro@imperium ~]$ cat /proc/driver/nvidia/version
    NVRM version: NVIDIA UNIX x86_64 Kernel Module  295.59  Wed Jun  6 21:19:40 PDT 2012
    GCC version:  gcc version 4.6.3 (Debian 4.6.3-1)
    [xaionaro@imperium ~]$ cat /proc/version
    Linux version 3.2.0-2-amd64 (Debian 3.2.20-1) (debian-kernel@lists.debian.org) (gcc version 4.6.3 (Debian 4.6.3-7) ) #1 SMP Mon Jun 11 17:24:18 UTC 2012

     

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



    Спонсоры:
    Слёрм
    Inferno Solutions
    Hosting by Ihor
    Хостинг:

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