Dynamisk laster
Essensen av problemet: under drift trekker ld.so først ut verdien av LD_LIBRARY_PATH-variabelen fra miljøet, og ved å bruke funksjonen _dl_split_path() gjør den om til en rekke strenger - stier til kataloger. Hvis det senere viser seg at den gjeldende prosessen startes av en SUID/SGID-applikasjon, slettes den opprettede matrisen og faktisk LD_LIBRARY_PATH-variabelen. På samme tid, hvis _dl_split_path() går tom for minne (noe som er vanskelig på grunn av den eksplisitte 256 kB-grensen på størrelsen på miljøvariabler, men teoretisk mulig), vil _dl_libpath-variabelen motta verdien NULL, og påfølgende kontroller av verdien av denne variabelen vil tvinge til å hoppe over kallet til _dl_unsetenv("LD_LIBRARY_PATH").
Sårbarhet funnet av eksperter
Tillegg: Problemet har blitt tildelt et nummer
amd64 og i386 (utnyttelsen kan tilpasses for andre arkitekturer).
Problemet kan utnyttes i standardinstallasjonen og lar en uprivilegert lokal bruker kjøre kode som root via bibliotekerstatning når verktøyene chpass eller passwd suid kjøres. For å opprette forholdene med lavt minne som er nødvendige for drift, sett RLIMIT_DATA-grensen via setrlimit.
Kilde: opennet.ru