Динамічний завантажувач
Суть проблеми: під час роботи 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.
Джерело: opennet.ru