The OpenNET Project / Index page

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

Эксплоит для неисправленной в Linux ядре 2.6.30 критической уязвимости

17.07.2009 21:13

Brad Spengler, автор grsecurity, набора патчей к Linux ядру для увеличение безопасности, опубликовал эксплоит, использующий для повышения привилегий локального пользователя в системе (активность SELinux не влияет на работу эксплоита), неисправленную уязвимость в Linux ядре 2.6.30, вызванную судя по всему ошибкой в оптимизаторе компилятора GCC.

  1. Главная ссылка к новости (http://isc.sans.org/diary.html...)
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/22644-security
Ключевые слова: security, kernel, linux
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (34) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (-), 22:03, 17/07/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • –4 +/
    и почему я не удивлён?
     
     
  • 2.7, XoRe (ok), 00:04, 18/07/2009 [^] [^^] [^^^] [ответить]  
  • +2 +/
    >и почему я не удивлён?

    Наверное потому что вы давно это ждали?
    Чтобы позлорадствовать)

     
  • 2.14, User294 (ok), 09:10, 19/07/2009 [^] [^^] [^^^] [ответить]  
  • +/
    > и почему я не удивлён?

    Потому что аноним :D

     
  • 2.15, User294 (ok), 09:33, 19/07/2009 [^] [^^] [^^^] [ответить]  
  • –3 +/
    P S интересно, кто так новости пишет и какая его левая пятка расставляет степен... большой текст свёрнут, показать
     
     
  • 3.19, pentarh (ok), 12:10, 19/07/2009 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Уязвимость ох$$$$но критическая. Ломаем вордпресс на хосте, получаем шелл непривилегированного пользователя, компиляем этот эксплойт, запускаем, получаем рута, вешаем руткит.
     
     
  • 4.22, Хоменко (ok), 18:29, 19/07/2009 [^] [^^] [^^^] [ответить]  
  • +1 +/
    ... предварительно убедившись, что там присутствует что-то суидное, позволяющее грузить внешние модули, типа pulseaudio. Пара пустяков.

    Там все не так просто. Линус на LKML аргументирует, что лажа не в ядре, но прежде всего в суидном бинарнике (выбор авторов пал на pulseaudio), позволяющем делать -L внешний модуль, что позволяет получить локальный рут чуть менее чем абсолютно просто. Это раз.

    Полтора. Попутно вскрылось безобразие в SELinux, позволяющее обойтись и без SUID.

    Второе. Лажа, несомненно, и код в ядре типа



    a = fafa->dada;
    if ( !fafa ) return;



    найденный где-то в файлах, относящемся до tun. Ее и пофиксили, причем хронологически уже никто не разберет, нашел ли Спендер, как обратить данную лажу в эффектный эксплойт независимо и самостоятельно, либо же его эта идея посетила как раз при просмотре LKML.

    И третье -- поведение GCC, элиминирующего вторую строчку в указанном фрагменте уж десять лет как (http://gcc.gnu.org/news/null.html), что дает повод валить вину друг на друга, отмазываясь "неопределенным поведением" в стандартах C.

    Рекомендую желающим почитать коменты на http://lwn.net/Articles/341773/, где сам автор высказывается и много весьма осведомленных товарищей, а также http://blog.cr0.org/2009/06/bypassing-linux-null-pointer.html, где сами авторы разбирают и объясняют, что к чему и отчего.

    Очень, очень познавательно, товарищи!

    ПС. Присоединяюсь к товарищам, высказавшимся о посте юзера294. От себя: кто-нибудь обращал внимание, почему он не ставит пробелов после оканчивающих предложение точек? Это наблюдение уже несколько недель не дает мне покоя, поскольку найти этому объяснение я никак не могу.

     
     
  • 5.24, XoRe (ok), 19:52, 19/07/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >От себя: кто-нибудь обращал
    >внимание, почему он не ставит пробелов после оканчивающих предложение точек? Это
    >наблюдение уже несколько недель не дает мне покоя, поскольку найти этому
    >объяснение я никак не могу.

    $answer =~ s/ /(rand 1 > 0.5) ? '.' : ' '/egs;

    Может так? =)

     
     
  • 6.26, Хоменко (ok), 21:30, 19/07/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >$answer =~ s/ /(rand 1 > 0.5) ? '.' : ' '/egs;
    >
    >Может так? =)

    Да нет, он стабильно их не ставит. Но почему? Как в том анекдоте про профессора с бородой и студента -- просто уснуть не могу! :}

     
  • 3.23, Maxim Chirkov (ok), 19:36, 19/07/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Локальную уязвимость в ядре, позволяющую обычному пользователю стать рутом, я отношу и буду относить к разряду критических с максимальной степенью опасности. Разжевывать причины и проводить ликбез у меня сейчас нет времени.
     
     
  • 4.29, User294 (ok), 21:53, 20/07/2009 [^] [^^] [^^^] [ответить]  
  • +/
    А сайты по части секурити с вами обычно на этот счет не согласны - обычно они не... большой текст свёрнут, показать
     
     
  • 5.33, Maxim Chirkov (ok), 08:22, 21/07/2009 [^] [^^] [^^^] [ответить]  
  • +/
    При оценке степени критичности учитывается масса сопутствующих факторов, например, удаленный root через редкоиспользуемый ethernet драйвер может получить среднюю степень опасности, а ошибки приводящие к запуску кода в Firefox - названы критическими.

    В случае обсуждаемой ошибки, ее критичность не в локальности и Linux ядре, а в самой концепции возможности такого рода уязвимостей. Кстати, у того же secunia 3 градации уровня критических ошибок - умеренная, высокая и экстремальная. Можете считать, что упоминание на opennet "критической" ошибки примерно соответствует high critical из рейтинга secunia.

     
     
  • 6.34, User294 (ok), 18:29, 21/07/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Именно Что все ресурсы по безопасности и делают В частности - один из этих факто... большой текст свёрнут, показать
     
     
  • 7.35, mr.morze (?), 19:25, 21/07/2009 [^] [^^] [^^^] [ответить]  
  • +/
    > Я вижу тут только 1 проблему: secunia рейтингует это как "Not critical" (1 of 5).
    > Пруфлинк = http://secunia.com/advisories/35801

    это ссылка на совершенно другую ошибку, не связанную с обсуждаемым экспоитом. Насколько я помню, прочитав новость на opennet полез на secunia.com и там для этой ошибки было поставлено high critical. Возможно сейчас, когда страсти поутихли, поменяли уровень на более низкий, в secunia нередко постфактум правят записи.

     
     
  • 8.37, User294 (ok), 21:04, 21/07/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Другую - это какую Я думал что в данном случае кернелу вменяется в вину обход за... текст свёрнут, показать
     

  • 1.2, Ky6uk (?), 22:21, 17/07/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    ky6uk@desu:/tmp/cheddar_bay$ ./cheddar_bay.sh
    pulseaudio: no process found
    [+] Personality set to: PER_SVR4
    Pulseaudio does not exist!

    ='(

     
  • 1.3, Capth (?), 23:06, 17/07/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Почему неисправленной?

    http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=3c8a9c63d5fd738c261bd0ceece04d9c8357ca1

    Уже 5 июля патч был.

     
  • 1.4, Amranello (?), 23:07, 17/07/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    заметьте он сказал что не поможет SELinux, но про grsecurity ничего не сказал, улавливаете мою мысль :-)
     
  • 1.5, hhg (ok), 23:38, 17/07/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    читал код сплойта. вижу что это локальный эксплойт для повышения привилегий в системе через криво написанный код в суидном pulseaudio. и причём тут ядро, которое патчится уже с рутовыми правами?

    или так: код, выполняемый с рутовыми правами через суидный pulseaudio, патчит ядро и позволяет выполнить код с рутовыми правами через ошибку программиста при работе с указателями в dev/tun?

     
     
  • 2.10, Хоменко (ok), 04:12, 18/07/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Товарищ исчерпывающе осветил вопрос. Заседание можно считать закрытым.
     
     
  • 3.20, pentarh (ok), 12:16, 19/07/2009 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >Товарищ исчерпывающе осветил вопрос. Заседание можно считать закрытым.

    Как вам та же херня но под tun?
    http://www.securitylab.ru/news/382677.php

     
     
  • 4.25, hhg (ok), 20:15, 19/07/2009 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Это обсуждение этой же новости, но только в духе современного секлаба - 90% "юмора" и 2% по-теме.
     
  • 4.30, User294 (ok), 22:49, 20/07/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >Как вам та же херня но под tun?
    >http://www.securitylab.ru/news/382677.php

    Позволю себе отметить что даже такой желтопрессный и про-виндузятнический ресурс как секлаб почему-то не додумался назвать все это критичным, выставив какую-то ерундовую степень опасности этой уязвимости. Зато опеннет в i-й раз отжигает забойным заголовком с мягко говоря не соответствующим многообещающему заголовку содержанием.

     

  • 1.6, Аноним (-), 23:48, 17/07/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    чет не получается
    при компиляции выдает
    exploit.c: Assembler messages:
    exploit.c:455: Error: Incorrect register '%rax' used with 'l' suffix
    gcc -v
    Целевая архитектура: x86_64-redhat-linux
    gcc версия 4.4.0 20090506 (Red Hat 4.4.0-4) (GCC)
    Ругается на
    asm volatile (
    " movl %%esp, %Йx;"
    " andl %1, %Йx;"
    " movl (%Йx), %0;"
    : "=r" (current)
    : "i" (0xfffff000)
    );
    если заменить
    " movl (%Йx), %0;"
    на
    " mov (%Йx), %0;"
    компилится, но exploit тогда не работает
    ./exploit
    [+] MAPPED ZERO PAGE!
    [+] Resolved tun_fops to 0xffffffffa0b74830
    [+] Resolved selinux_enforcing to 0xffffffff81872374
    [+] Resolved nf_unregister_hooks to 0xffffffff8132b9fa
    [+] Resolved security_ops to 0xffffffff8186fb20
    [+] Resolved default_security_ops to 0xffffffff8159f090
    [+] Resolved sel_read_enforce to 0xffffffff81189104
    [+] Resolved audit_enabled to 0xffffffff8182c804
    [+] Resolved commit_creds to 0xffffffff81061597
    [+] Resolved init_cred to 0xffffffff8158fa10
    [+] *0xffffffffa0b74888 |= 1
    [+] b00m!
    [+] Disabled security of : nothing, what an insecure machine!
    [+] Failed to get root :( Something's wrong.  Maybe the kernel isn't vulnerable?

    Где что не так?

     
     
  • 2.9, alex (??), 00:49, 18/07/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Во всем, конечно, виноваты x64. Новы не расстраивайтесь. Дефолтный RHEL5 не уязвим. Уязвимость добавили ( бэкпортировали :-) ) в тестовых ядрах, которые могли попасть в 5.4.
    Но теперь не попадет.

     
  • 2.13, pavlinux (ok), 08:02, 18/07/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >чет не получается
    >при компиляции выдает
    >exploit.c: Assembler messages:
    >exploit.c:455: Error: Incorrect register '%rax' used with 'l' suffix
    >Где что не так?

    gcc -m32 exploit.c -o exploit

    А 64 битная будя так

    static inline unsigned long get_current(void)
    {
            unsigned long current;

            asm volatile (
            " movq %%rsp, %%rax;"
            " andq %1, %%rax;"
            " movq (%%rax), %0;"
            : "=r" (current)
            : "i" (0xfffff000)  /* вот тут надо разбираться,  старшие нужны или младшие */
            );
            return current;
    }

     

  • 1.8, XoRe (ok), 00:06, 18/07/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    Шо за система!
    Даже эксплойты не компилятся!
    Не то, что в windows - там даже оптимизаторы добавили)


     
     
  • 2.12, pavlinux (ok), 08:01, 18/07/2009 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >Шо за система!
    >Даже эксплойты не компилятся!
    >Не то, что в windows - там даже оптимизаторы добавили)

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

     
     
  • 3.36, User294 (ok), 19:44, 21/07/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >В смысле, сразу поставляется отэксплойтодрюченной, с дырами...

    Типа того.А как еще назвать сервисы работающие под SYSTEM зачем-то и большой кус GDI в ядре?В итоге поломав в i-й раз RPC сервис хакерью даже права поднимать не надо.

     

  • 1.11, аноним (?), 07:00, 18/07/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > вызванную судя по всему ошибкой в оптимизаторе компилятора GCC.

    Неправда! Ошибка явно на стороне ядра, -fdelete-null-pointer-checks прекрасно документирован. Линус почему-то врет, стыдно наверное.

     
  • 1.18, Zenitur (?), 11:49, 19/07/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    У меня 2.6.28.1 январского обновления. Мне стоит беспокоиться?
     
  • 1.28, Аноним (-), 12:53, 20/07/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    именно по поводу этой уязвимости?
    ну чтоооо вы
    забейте.
     
  • 1.31, аноним (?), 23:41, 20/07/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > struct sock *sk = tun->sk;  // initialize sk with tun->sk
    > …
    > if (!tun)
    >     return POLLERR;  // if tun is NULL return error
    >
    >This code looks perfectly ok, right?

    Хрена себе ok. Сначала разыменовываем указатель, потому проверяем его валидность, так что-ли? Я смотрю ядро и gcc друг друга стоят.

     
     
  • 2.32, аноним (?), 06:14, 21/07/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Да gcc здесь вообще не виноват.
     

  • 1.38, i (??), 15:28, 29/07/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    а с grsecurity патченным ядром наверняка работать не будет.
    Или это тока на редхате работает ?
     

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



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

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