Дынамічны загрузчык
Сутнасць праблемы: падчас працы 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