В списке рассылки Full-Disclosure (http://lists.grok.org.uk/full-disclosure-charter.html) один из open source разработчиков из Intel опубликовал (http://permalink.gmane.org/gmane.comp.security.full-disclosu...) сообщение о том, что анонимный источник передал ему рабочий экземпляр эксплоита, который позволяет получить root-права любому локальному пользователю, который использует проприетарные драйверы для видеокарт NVIDIA.
Автор эксплоита послал сообщение об уязвимости в NVIDIA более месяца назад, однако, так и не получив ответа от компании, он передал код Dave Airlie. Эксплоит использует возможности устройства /dev/nvidia0, экспортируемого драйверами, которое позволяет менять параметры VGA-окна. Схема работы состоит в том, что программа двигает окна по экрану до тех пор, пока она не найдёт физическую область памяти, которая принадлежит ядру.
Используйте эксплоит (http://cache.gmane.org//gmane/comp/security/full-disclosure/...) на свой страх и риск - в прошлом уже была ситуация, когда под видом экплоита распространялся троян, который открывал на компьютере удалённый доступ к root shell.URL: http://permalink.gmane.org/gmane.comp.security.full-disclosu...
Новость: http://www.opennet.ru/opennews/art.shtml?num=34466
>Используйте эксплоит на свой страх и рисксуперпредложение
Давно уже не было root-уязвимостей в драйвере NVIDIA! Никто не знает, с какой версии появилась эта уязвимость, и уязвимость с зависанием на 2 месяце аптайма для 32-битных систем?
Разве давно? Помоему совсем недавно писали...
у меня уже года два есть проблема с зависанием, если не больше
Да уж, проблема зависания чьего-то компьютера неизвестно по какой причине - должна быть равносильна проблеме использования конкретного продукта абсолютно у всех.
Почти целый месяц. Но все уже соскучились
> Почти целый месяц.Внимательно посмотри на даты "похожих новостей".
Аноним негодуэ! Почему нет скриншота со средним пальцем дяди Линуса?!
новый хардкор от нвидиа!
Одному из 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.
Ну что это за новость? Где захват рута?
У тебя драйвера не той системы.
> на свой страх и риск - в прошлом уже была ситуация,
> когда под видом экплоита распространялся троянЭто opennet трояны раздавал?
> Это opennet трояны раздавал?Были шуточки с троянами замаскированными под патчи и эксплойты.
> Урод ты мне все стер. Вычислю по ip и кости переломаю.Не надо ему кости ломать. Для начинающих и продолжающих дебилов делающих неизвестно что и зачем по чужим советам у нас есть и другие годные рецепты улучшения настроения. Ну вон ниже - пример использования контактного провода электричек (там 3kV) в качестве турника. И пантограф как гимнастический снаряд. Не хочешь повторить такую "гимнастику"? Подсказываю: если это делать безбашенно - мгновенно станешь похож на шашлык из соседних роликов.
perl -e "print '[:|||:]'"
Аккуратнее с такими шутками... Сейчас много новых людей приходят на тематические ресурсы. Не все застали времена этой подставы, так что лучше давайте предупреждение, народ сам сделает выводы, не теряя данные.
Дык, учить надо, а то потом таким и впаривают такую вирусню, какую и вирусом назвать стыдно.
> Аккуратнее с такими шутками...Да они потом спасибо скажут. Такой урок "не работай под рутом" запоминается на всю жизнь и дает хорошие предпосылки для излечивания от доверчивости
Fuck you, NVIDIA!
> Fuck you, NVIDIA!...сказали хакеры :)
Я правильно понял, что там еще /dev/mem необходим доступный на запись?
А то у меня
crw-r----- 1 root kmem 1, 1 Июл 30 20:25 /dev/mem
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
Какая версия драйверов?
295.49
nvidia-xconfig: version 304.30
Рут не получает
У вас чё, действительно /dev/mem на запись для юзера открыт?
> У вас чё, действительно /dev/mem на запись для юзера открыт?» ls /dev/mem -lh
crw-r----- 1 root kmem 1, 1 авг. 1 21:04 /dev/mem
Оно ж отваливать должно тогда, судя по исходникам, т.к. там
static int devmem_fd(void)
{
int fd = open("/dev/mem", O_RDWR|O_SYNC);
if (fd < 0)
perror("/dev/mem");
return fd;
}
и потом везде отваливает, если вернуло -1
> Оно ж отваливать должно тогда, судя по исходникам, т.к. там
> static int devmem_fd(void)
> {
> int fd = open("/dev/mem", O_RDWR|O_SYNC);
> if (fd < 0)
> perror("/dev/mem");
> return fd;
> }
> и потом везде отваливает, если вернуло -1Может оно делается уже после получения рута?
Никак не позже, т.к. в начале 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;
к нему приводит.
глаза разуй. там код для работы с /dev/mem завернут в условия. ну и каменты в коде хоть почитай.
Да, точно.
volatile uint32_t *nvidia_handle(int fd, uint64_t res)
> Да, точно.
> volatile uint32_t *nvidia_handle(int fd, uint64_t res)работа с /dev/mem нужна для отладки и требует запуска от #. в одном случае просто дамп в другом после того как /dev/mem открыт uid и gid сбрасываются до юзера и эксплойт продолжает работать в штатном режиме.
> Может оно делается уже после получения рута?Да, так и есть. Только по исходникам не понял.
Запустил - не сработало. Потом вспомнил что у меня стоит радеон :-D
Поставил невидию, и:[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Нисудьба...
> [vova7890@localhost ~]$ nvidia-xconfig -v
> nvidia-xconfig: version 295.53Не так.
cat /proc/driver/nvidia/version
[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)
> Поставил невидию, и:
> [vova7890@localhost ~]$ uname -r
> 3.5.0-1-ARCHУже 3.5 ? откуда ?
>> Поставил невидию, и:
>> [vova7890@localhost ~]$ uname -r
>> 3.5.0-1-ARCH
> Уже 3.5 ? откуда ?http://kernel.org/ -- отсюда?
ваще, очково запускать. отрыл файл и ничего не понял. пол файла байты тасуют, остальная половина асм вставки.
> ваще, очково запускать. отрыл файл и ничего не понял. пол файла байты
> тасуют, остальная половина асм вставки.На первый взгляд ничего особо подозрительного там нет. В отличие от мутотени от acidbitchez с бинарной вставкой сплойта в виде массива байтов без сорца породившего этот блоб делающей хзчто, тут сплойт аккуратненько на асме выписан, в виде сорца. Откровенного деструктива не вижу. Ну кроме раздачи себе правов на все и вся и получения рута под конец :)
$ ./a.out
[*] IDT offset at 0xffffffff81694000
[*] Abusing nVidia...
[*] CVE-2012-YYYY
[*] 64-bits Kernel found at ofs 0
[*] Using IDT entry: 220 (0xffffffff81694dc0)
[*] Enhancing gate entry...
[*] Triggering payload...
УбитоMessage from syslogd@localhost at Aug 2 01:19:46 ...
kernel:Oops: 0000 [#1] PREEMPT SMPMessage from syslogd@localhost at Aug 2 01:19:46 ...
kernel:Stack:Message from syslogd@localhost at Aug 2 01:19:46 ...
kernel:Call Trace:Message from syslogd@localhost at Aug 2 01:19:46 ...
kernel:Code: Bad RIP value.Message from syslogd@localhost at Aug 2 01:19:46 ...
kernel:CR2: ffffffff81800000# dmesg
BUG: unable to handle kernel paging request at ffffffff81800000
IP: [<000000000040197d>] 0x0000000040197d
PGD 15bc067 PUD 15c0063 PMD 0
Oops: 0000 [#1] PREEMPT SMP
CPU 3
Modules linked in: ipt_ECN ipt_REJECT xt_recent iptable_filter iptable_mangle xt_DSCP et131x(C) evdev nvidia(O) ohci_hcdPid: 6290, comm: a.out Tainted: G C O 3.2.24 #6 TYAN Computer Corp. S2895/S2895
RIP: 0010:[<000000000040197d>] [<000000000040197d>] 0x0000000040197d
RSP: 0000:ffff88001f0c7d08 EFLAGS: 00010006
RAX: ffffffff81800000 RBX: 0000000000000064 RCX: 0000003007eaa837
RDX: 000000300818be80 RSI: 0000000000000064 RDI: 00000000000003e8
RBP: ffff88001f0c7fc8 R08: 2e2e2e64616f6c79 R09: 000000000040310d
R10: 00007fffc23ca5a0 R11: 0000000000000202 R12: 0000000000400c10
R13: 00007fffc23cab00 R14: 0000000000000000 R15: 0000000000000000
FS: 00007ff23ded4700(0000) GS:ffff88017fd00000(0000) knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: ffffffff81800000 CR3: 000000016e13c000 CR4: 00000000000006e0
DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
Process a.out (pid: 6290, threadinfo ffff88001f0c6000, task ffff880079b850c0)
Stack:
0000000000000064 00000000000003e8 ffff880079b850c0 ffff8801241041f8
0000000000000000 00000000000000aa ffffea0001bf6670 0000000000000000
ffffea0001bf6670 ffffffff810bfdea ffff88001f0c7d58 ffff880176ddfe40
Call Trace:
[<ffffffff810bfdea>] ? 0xffffffff810bfdea
[<ffffffff810c334c>] ? 0xffffffff810c334c
[<ffffffff810f725d>] ? 0xffffffff810f725d
[<ffffffff810c3623>] ? 0xffffffff810c3623
[<ffffffff81021222>] ? 0xffffffff81021222
[<ffffffff811039a6>] ? 0xffffffff811039a6
[<ffffffff814ca27b>] ? 0xffffffff814ca27b
Code: Bad RIP value.
RIP [<000000000040197d>] 0x0000000040197d
RSP <ffff88001f0c7d08>
CR2: ffffffff81800000
---[ end trace 0000000000000002 ]---
В свете этих всех событий малось по иному оцениваеш слова Линуса а адрес Nvidia ....
Разве? Сравни:В программе Блокнот.exe найдена уязвимость, позволяющая пользователю получить root-доступ к системе.
В gnome3 найдена уязвимость, позволяющая пользователю получить root-доступ к системе.
В драйвере мыши найдена уязвимость, позволяющая пользователю получить root-доступ к системе.
В драйвере видеоадаптера найдена уязвимость, позволяющая пользователю получить root-доступ к системе.
---
Только я один вижу что контроль root-доступа - это прямая обязанность ОС?
Драйвер - часть ядра ОС (хоть и отделяемая). Его действия сложнее контролировать (особенно если код закрыт)
Вы не понимаете о чём говорите.> Драйвер - часть ядра ОС
Нет. Драйвер - отдельная программа, такая же как и напр. скачанная с хакерского сайта.
> Его действия сложнее контролировать
А чем контроль программы А отличается от контроля программы Б? Если архитектура ОС построена правильно, то никакой.
> (особенно если код закрыт)
Да будет вам известно, что после компиляции открытый и закрытый код выглядят одинаково, и процессор, исполняющий бинарный код, об открытости, закрытости, СПО и человеке-столе ничего не знает.
> Только я один вижу что контроль root-доступа - это прямая обязанность ОС?Ну так драйвер работает в режиме ядра (как минимум частично). По поводу чего становится как часть ОС. По поводу чего да, драйвер обязан быть без багов позволяющих эскалировать привилегии.
> драйвер работает в режиме ядраЭто архитектурная ошибка реализации. В Windows драйвер НЕ работает в режиме ядра и даже преднамеренное нарушение работы системы невозможно.
> драйвер обязан быть без багов позволяющих эскалировать привилегии
А программы не должны быть вирусами и троянами. А пользователи не должны обращаться к данным к которым у них нет доступа, даже если доступ у них есть. Если бы все ОБЯЗАНЫ выполнялись - никаких привилегий не было бы в принципе.
> В Windows драйвер НЕ работает в режиме ядра и даже преднамеренное нарушение работы системы невозможно.Друг мой, а HAL где работает, напомнить ? На 0-м уровне .... с соот. последсвиями. .... кроме того есть понятия "Kernel mode drivers" ... Вам ЭТО ничего не говорит ?
Речь о драйвере видеоадаптера, "друг мой", или вы предпочли сменить тему? HAL - не драйвер, а неотделимая часть ОС.
> Речь о драйвере видеоадаптера, "друг мой", или вы предпочли сменить тему? HAL
> - не драйвер, а неотделимая часть ОС.К сожалению Вы не дочитали до конца мое сообщение.
Потому, что тему я не менял, иначе с чего бы я у Вам спрашивал про "Kernel mode drivers" ? Теперь по поводу HAL .... вопрос в том, что сам HAL можено рассматривать как один мега драйвер, который также работает в kernel mode.
>> драйвер работает в режиме ядра
> Это архитектурная ошибка реализации. В Windows драйвер НЕ работает в режиме ядра
> и даже преднамеренное нарушение работы системы невозможно.Вы о чём? А в каком же CPU-ring-е оно работает? Скажите, пожалуйста. Да, есть ещё 1-ое и 2-ое кольцо, которые были придуманы специально для драйверов, но по своим причинам они обычно не используются (и которые, кстати, тоже слишком излишне привилегированы для избежания подобных эксплойтов). Никогда не задумывались, почему кривые драйвера в вашем любимом "Windows" приводят частенько к синим окнам? Я в курсе что в windows есть возможность запускать драйвера в user-mode. Но как вы себе представляете работу _видеодрайвера_ вынесенного в user-space. Насколько большой будет overhead, чтобы выполнялись операции требующие ring0?
И ещё момент, что такое правильная архитектура? Когда там уже этот MINIX или что там микроядерное станет целесообразным для использования? Разве что QNX показался забавным, но для моих целей бесполезным.
> В свете этих всех событий
>оцениваеш слова Линуса а адрес Nvidia ....Если Вы думаете, что Линус говорил что-то про локал рута _или проприертарные дырверы нВ, то Вы ничего не поняли.
Если Вы думаете, что наличие, "качество" или некачественность проприертарных дырверов нВ _могут или должны как-то влиять на оценку эскапады гр.Т., то ...
Не, ну, мож и я, конечно, чего не пониаю.
Монолитное ядро - приглашение для трояна.
это вообще не релевантно монолитности/микроядерности
> это вообще не релевантно монолитности/микроядерностиНу почему? Никто не мешает драйвер вынести в отдельный user-mode-процесс и обрабатывать в CPU ring3, постоянно обмениваясь сообщениями с микроядром. Будет контроль над действиями в сообщениях и подобные баги будет менее вероятны. С другой стороны кто будет выносить драйвер видеокарты в user-mode?
> Монолитное ядро - приглашение для трояна.Да уж. Микроядерные ОС обычно настолько недопилены и обкоцаны что там ничего не работает. Ни трояны, ни нормальные программы.
debian/wheezyii 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
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