LINUX.ORG.RU
ФорумTalks

[решето!] Уязвимость в ядре Linux позволяет получить повышенные привилегии


0

0

http://www.securitylab.ru/news/382677.php

Ъ: Исходный код для эксплуатации весьма необычной уязвимости в ядре Linux был опубликован сегодня Бредом Спенглером (Brad Spengler) – автором модуля grsecurity.

<......>

Опубликованный эксплоит способен обойти защиту разыменования нулевого указателя в ядре, на системах с SELinux и без него, и отключить SELinux/AppArmor/LSM/auditing.

Подробности по ссылке, видео прилагается

З.Ы. В комментах виндузятники писают кипятком

★★★★★

А я всегда говорил: нехер кого ни попадя к машине подпускать.

Ну а кроме того, кому обычные пользователи нужны?

wyldrodney
()

struct sock *sk = tun->sk; // initialize sk with tun->sk

if (!tun)
return POLLERR;

странный код, если tun == NULL, то как можно сделать sk = tun->sk;

lester ★★★★
()
Ответ на: комментарий от xorik

Типа поизвращаться, чтобы поиметь десятые доли процента от всех машин? Спасибо, не верю.

wyldrodney
()
Ответ на: комментарий от lester

хз. кроме того, это ошибка в компиляторе, что-ли?

vahvarh ★★★
()
Ответ на: комментарий от lester

Там вообще новость как-то странно написано. Как будто виноват GCC с неправильной оптимизацией. На самом деле там код некорректный и выглядит он тоже некорректно. А GCC сделал вполне логичное предположение.

> странный код, если tun == NULL, то как можно сделать sk = tun->sk;


В пространстве ядра - можно =).

/* смотреть drivers/net/tun.c */

Deleted
()
Ответ на: комментарий от Deleted

>> странный код, если tun == NULL, то как можно сделать sk = tun->sk;

> В пространстве ядра - можно =).


Тем более что &tun->sk != NULL, если tun == NULL.

Deleted
()
Ответ на: комментарий от hizel

> трололо> следующий релиз OpenBSD будет собран с -O0

Православным компилятором tcc!

Deleted
()

анонимные аналитики секлаба не смогли его заставить работать. Этот эксплойт зачем-то требует pulseaudio.

matich
()
Ответ на: комментарий от matich

> Этот эксплойт зачем-то требует pulseaudio.

/me представил хакера, качающего на вражеский боевой сервер четвертые кеды в качестве зависимости...

n01r ★★
()
Ответ на: комментарий от tailgunner

> Тоже нельзя.

Разве? А как это контролируется? Ведь поле tun->sk не по нулевому адресу расположено.

Deleted
()
Ответ на: комментарий от Deleted

> А как это контролируется?

Деталей не знаю, но как минимум страница виртуального пространства даже в режиме ядра предназначена для отлова как раз такой фигни.

> Ведь поле tun->sk не по нулевому адресу расположено.

Оно стопудово в пределах страницы.

tailgunner ★★★★★
()

Что за система! Даже эксплойты нормально не работают!

xorik ★★★★★
() автор топика

Это что-то! Его ещё и патчить надо чтобы заработал!

if [ "$RESULT" != "Disabled" ]; then
    pulseaudio --log-level=0 -L /home/spender/exploit.so
  else



Еще и под разные ядры разными способами компилить.

for 2.6.30 without SELinux enabled, compile with:
   cc -fPIC -fno-stack-protector -shared -o exploit.so exploit.c
   (on a 64bit system -m64 may be necessary to compile a 64bit .so)
   cc -o pwnkernel pwnkernel.c
   then just ./cheddar_bay.sh
   for 2.6.30 with SELinux enabled, compile with:
   cc -fno-stack-protector -o exploit exploit.c
   then just ./exploit
   for RHEL5 2.6.18 compile with:
   cc -fno-stack-protector -DRHEL5_SUCKS -o exploit exploit.c
   then just ./exploit


Вот вам и совместимость дистрибутивов линукса :D

#ifdef RHEL5_SUCKS


И на закуску рак!
fprintf(stdout, "           ,        ,\n");
fprintf(stdout, "          /(_,    ,_)\\\n");
fprintf(stdout, "          \\ _/    \\_ /\n");
fprintf(stdout, "          //        \\\\\n");
fprintf(stdout, "          \\\\ (@)(@) //\n");
fprintf(stdout, "           \\'=\"==\"='/\n");
fprintf(stdout, "       ,===/        \\===,\n");
fprintf(stdout, "      \",===\\        /===,\"\n");
fprintf(stdout, "      \" ,==='------'===, \"\n");
fprintf(stdout, "       \"                \"\n");

matich
()
Ответ на: комментарий от matich

> Частично. Просто надо несколько версий скомпилить и установить pulseaudio.

Плюс надо чтобы был подгружен ядрёный модуль TUN/TAP-интерфейса.

Deleted
()
Ответ на: комментарий от Deleted

>Плюс надо чтобы был подгружен ядрёный модуль TUN/TAP-интерфейса.

Похоже эта фигня только у автора работает. Кто-нибудь знает почему pulseaudio, а не dbus, hal или что-то более популярное, толлько из-за suid? А если pulseaudio без suid, то опять не работает.

В общем хороший эксплойт достойный награды: http://img132.imageshack.us/img132/9901/worksonmymachinestarbur.png

matich
()
Ответ на: комментарий от lexxus-lex

>Еще вчера обновился.

До новой версии эксплойта? Оно работает? =)

matich
()
Ответ на: комментарий от matich

> Кто-нибудь знает почему pulseaudio, а не dbus, hal или что-то более популярное, толлько из-за suid?

Думаю, из-за (характерного?) использования tun/tap. Интересно было бы, если бы эксплой юзал qemu или kvm.

tailgunner ★★★★★
()

# ./exploit
 [+] MAPPED ZERO PAGE!
 [+] Resolved tun_fops to 0xf8bd42e8
 [+] Resolved selinux_enforcing to 0xc08b9ee8
 [+] Resolved nf_unregister_hooks to 0xc05ee888
 [+] Resolved security_ops to 0xc08b86bc
 [+] Resolved default_security_ops to 0xc074c37c
 [+] Resolved sel_read_enforce to 0xc04e670a
 [+] Resolved audit_enabled to 0xc08830e4
 [+] *0xf8bd4314 |= 1
 [+] b00m!
 [+] Disabled security of : nothing, what an insecure machine!
 [+] Failed to get root :( Something's wrong.  Maybe the kernel isn't vulnerable?

# ./cheddar_bay.sh 
pulseaudio: не завершён ни один процесс
 [+] Personality set to: PER_SVR4
ALSA lib control.c:909:(snd_ctl_open_noupdate) Invalid CTL front:0
ALSA lib control.c:909:(snd_ctl_open_noupdate) Invalid CTL front:0
 [+] MAPPED ZERO PAGE!
 [+] Resolved tun_fops to 0xf8bd42e8
 [+] Resolved selinux_enforcing to 0xc08b9ee8
 [+] Resolved nf_unregister_hooks to 0xc05ee888
 [+] Resolved security_ops to 0xc08b86bc
 [+] Resolved default_security_ops to 0xc074c37c
 [+] Resolved sel_read_enforce to 0xc04e670a
 [+] Resolved audit_enabled to 0xc08830e4
 [+] *0xf8bd4314 |= 1
 [+] b00m!
 [+] Disabled security of : nothing, what an insecure machine!
 [+] Failed to get root :( Something's wrong.  Maybe the kernel isn't vulnerable?


под рутом рут не получается :(

fedora 9
# uname -a
Linux 2.6.27.24-78.2.53.fc9.i686 #1 SMP Wed May 20 23:51:32 EDT 2009 i686 i686 i386 GNU/Linux


dimon555 ★★★★★
()

Короче у кого заработает отпишитесь на какой версии и т.д.
может готовый бинарник выложите?

dimon555 ★★★★★
()
Ответ на: комментарий от tailgunner

> Думаю, из-за (характерного?) использования tun/tap. Интересно было бы, если бы эксплой юзал qemu или kvm.

Хм... А разве в pulseaudio вообще используется tun/tap? У меня вот tun вообще не загружен, а pa работает.

Deleted
()

И да, на amd64 не работает. Уязвимость есть, но эксплоит заточен под x86. Модифицировать - лениво.

Deleted
()
Ответ на: комментарий от Deleted

>Уязвимость есть, но эксплоит заточен под x86.

приведи ассемблерный код рабочего бинарника плиз

dimon555 ★★★★★
()

У кого эксплоит работает, попробуйте такой патч:

diff -ru linux-2.6.30.a/drivers/net/tun.c linux-2.6.30.b/drivers/net/tun.c
--- linux-2.6.30.a/drivers/net/tun.c	2009-06-10 09:05:27.000000000 +0600
+++ linux-2.6.30.b/drivers/net/tun.c	2009-07-17 18:41:26.636496572 +0600
@@ -486,11 +486,12 @@
 {
 	struct tun_file *tfile = file->private_data;
 	struct tun_struct *tun = __tun_get(tfile);
-	struct sock *sk = tun->sk;
+	struct sock *sk;
 	unsigned int mask = 0;
 
 	if (!tun)
 		return POLLERR;
+	sk = tun->sk;
 
 	DBG(KERN_INFO "%s: tun_chr_poll\n", tun->dev->name);

Deleted
()

Не гуглится что-то ничего интересного

dimon555 ★★★★★
()

Что бы он заработал, его надо подтюнить под конкретно собранное ядро. Пульс нужен по всей видимости потому, что обычному йузеру недоступен tun девайс :]

vasily_pupkin ★★★★★
()
Ответ на: комментарий от vasily_pupkin

>обычному йузеру недоступен tun девайс

Автору эксплойта надо было простого демона использующего tun написать.

matich
()

Запостил в новости. Страна должна знать своих героев!

nnz ★★★★
()
Ответ на: комментарий от matich

>Автору эксплойта надо было простого демона использующего tun написать.

Чтобы запускать рут-сплойт из-под рута? :)

nnz ★★★★
()
Ответ на: комментарий от nnz

> Типа багфикс?

Ага. Первое что пришло в голову. Правда проверить не где, так как нет под рукой машины, где бы эксплоит работал =).

Deleted
()
Ответ на: комментарий от vasily_pupkin

>Что бы он заработал, его надо подтюнить под конкретно собранное ядро. Пульс нужен по всей видимости потому, что обычному йузеру недоступен tun девайс :]

Насколько я помню, pulseaudio setuid root. Полагаю, все дело в этом.

nnz ★★★★
()
Ответ на: комментарий от Deleted

>Ага. Первое что пришло в голову.

Мне почему-то пришло то же самое :)

>нет под рукой машины, где бы эксплоит работал


Все x86_64 либо без пульса, или сплойт реально фиговый?

nnz ★★★★
()
Ответ на: комментарий от nnz

>или сплойт реально фиговый?

он убогий, как все остальные

reliktt
()
Ответ на: комментарий от n01r

>/me представил хакера, качающего на вражеский боевой сервер четвертые кеды в качестве зависимости...

Кеды уже зависят от pulseaudio?

Deleted
()

вообще наезды на gcc в данном случае абсолютно не обоснованы. компилер очень даже хорошо прооптимизировал (при условии конечно, что tun на стеке). а код в драйвере уг, и надо отрывать руки за такое.

k0l0b0k ★★
()
Ответ на: комментарий от dimon555

>fedora 9 # uname -a Linux 2.6.27.24-78.2.53.fc9.i686 #1 SMP Wed May 20 23:51:32 EDT 2009 i686 i686 i386 GNU/Linux

Он не рассчитан на не поддерживаемые дистрибутивы, обновись.

goose
()

WTF???

Хм. Просмотрел сорцы модуля tun на центосе 5.3 (kernel-2.6.18). Нету там ничего похожего. Возникает резонный вопрос, каким же образом это работает на RHEL5?

Может, чел просто решил приколоться?

nnz ★★★★
()
Ответ на: WTF??? от nnz

>каким же образом это работает на RHEL5?

через #ifdef RHEL5_SUCKS

matich
()
Ответ на: комментарий от xorik

>>P.S. Еще вчера обновился.

>http://www.securitylab.ru/vulnerability/382676.php >Решение: Способов устранения уязвимости не существует в настоящее время.

>По моему одна из черепашек пи...т (ц)

Не существует... для Suse,... на Ubuntu сеня с утра вышли критические обновления... :)))))))

lexxus-lex ★★★
()

А у меня tun задействован для VPN, а вот PulseAudio нету, облом.

mirk
()

чет не работает =(

[~/cheddar_bay][djung@djung-laptop] >: ./cheddar_bay.sh
pulseaudio: Kein Prozess beendet
[+] Personality set to: PER_SVR4
I: caps.c: Limited capabilities successfully to CAP_SYS_NICE.
I: caps.c: Dropping root privileges.
I: caps.c: Limited capabilities successfully to CAP_SYS_NICE.
[+] MAPPED ZERO PAGE!
[+] Resolved tun_fops to 0xf812a740
[+] Resolved selinux_enforcing to 0xc086b3bc
[+] Resolved apparmor_enabled to 0xc06a5d84
[+] Resolved apparmor_complain to 0xc086cfb8
[+] Resolved apparmor_audit to 0xc086cfc0
[+] Resolved apparmor_logsyscall to 0xc086cfc4
[+] Resolved nf_unregister_hooks to 0xc04505f0
[+] Resolved security_ops to 0xc0869b60
[+] Resolved default_security_ops to 0xc06a4b40
[+] Resolved sel_read_enforce to 0xc02933d0
[+] Resolved audit_enabled to 0xc0828564
[+] *0xf812a76c |= 1
[+] b00m!
[+] Disabled security of : nothing, what an insecure machine!
[+] Failed to get root :( Something's wrong. Maybe the kernel isn't vulnerable?
[~/cheddar_bay][djung@djung-laptop] >: uname -a
Linux djung-laptop 2.6.28-11-generic #42-Ubuntu SMP Fri Apr 17 01:57:59 UTC 2009 i686 GNU/Linux
[~/cheddar_bay][djung@djung-laptop] >: lsmod | grep tun
tun 18820 0


жалко, я даже тун загрузил =(

djung ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.