Ładowarka dynamiczna
Istota problemu: ld.so w trakcie działania najpierw pobiera ze środowiska wartość zmiennej LD_LIBRARY_PATH i przy pomocy funkcji _dl_split_path() zamienia ją na tablicę stringów - ścieżek do katalogów. Jeśli później okaże się, że bieżący proces jest uruchamiany przez aplikację SUID/SGID, wówczas utworzona tablica, a właściwie zmienna LD_LIBRARY_PATH zostaną wyczyszczone. Jednocześnie, jeśli w _dl_split_path() zabraknie pamięci (co jest trudne ze względu na jawne ograniczenie wielkości zmiennych środowiskowych do 256 kB, ale teoretycznie możliwe), wówczas zmienna _dl_libpath otrzyma wartość NULL, a kolejne sprawdzenia wartość tej zmiennej wymusi pominięcie wywołania _dl_unsetenv("LD_LIBRARY_PATH").
Luka znaleziona przez ekspertów
Dodatek: Problemowi został przypisany numer
amd64 i i386 (exploit można dostosować do innych architektur).
Problem można wykorzystać w domyślnej instalacji i umożliwia nieuprzywilejowanemu użytkownikowi lokalnemu wykonanie kodu jako root poprzez podstawienie biblioteki podczas uruchamiania narzędzi suid chpass lub passwd. Aby stworzyć warunki małej ilości pamięci niezbędne do działania, ustaw limit RLIMIT_DATA za pomocą setrlimit.
Źródło: opennet.ru