Динамички натоварувач
Суштината на проблемот: за време на работата, ld.so прво ја извлекува вредноста на променливата LD_LIBRARY_PATH од околината и, користејќи ја функцијата _dl_split_path(), ја претвора во низа низи - патеки до директориумите. Ако подоцна се покаже дека тековниот процес е започнат од апликација SUID/SGID, тогаш креираната низа и, всушност, променливата LD_LIBRARY_PATH се бришат. Во исто време, ако _dl_split_path() снема меморија (што е тешко поради експлицитното ограничување од 256 kB на големината на променливите на животната средина, но теоретски е можно), тогаш променливата _dl_libpath ќе ја добие вредноста NULL и последователните проверки на вредноста на оваа променлива ќе принуди да го прескокнете повикот до _dl_unsetenv("LD_LIBRARY_PATH").
Ранливост пронајдена од експерти
Дополнување: На проблемот му е доделен број
amd64 и i386 (експлоатот може да се прилагоди за други архитектури).
Проблемот може да се експлоатира во стандардната инсталација и му дозволува на непривилегираниот локален корисник да изврши код како root преку замена на библиотеката при извршување на услужните програми chpass или passwd suid. За да создадете услови за ниска меморија потребни за работа, поставете го ограничувањето RLIMIT_DATA преку setrlimit.
Извор: opennet.ru