Динамический загрузчик
Суть проблемы: в ходе работы ld.so сначала извлекает из окружения значение переменной LD_LIBRARY_PATH, с помощью функции _dl_split_path() превращает его в массив строк — путей к каталогам. Если позднее выясняется, что текущий процесс запущен SUID/SGID-приложением, то созданный массив и, собственно, переменная LD_LIBRARY_PATH очищаются. При этом, если в ходе работы _dl_split_path() столкнётся с нехваткой памяти (что трудно из-за наличия явного ограничения на размер переменных окружения в 256 кБайт, но теоретически возможно), то переменная _dl_libpath получит значение NULL, и последующая проверка значения этой переменной заставит пропустить вызов _dl_unsetenv(«LD_LIBRARY_PATH»).
Уязвимость найдена специалистами
Дополнение: Проблеме присвоен номер
amd64 и i386 (эксплоит может быть адаптирован и для других архитектур).
Проблема эксплуатируема в установке по умолчанию и позволяет непривилегированному локальному пользователю выполнить код с правами root через подстановку библиотеки при запуске suid-утилит chpass или passwd. Для создания необходимых для эксплуатации условий нехватки памяти используется установка ограничения RLIMIT_DATA через setrlimit.
orisun: opennet.ru