Dynamisk lastare
Kärnan i problemet: under drift extraherar ld.so först värdet på variabeln LD_LIBRARY_PATH från miljön och, med hjälp av funktionen _dl_split_path() förvandlar den till en array av strängar - sökvägar till kataloger. Om det senare visar sig att den aktuella processen startas av en SUID/SGID-applikation, rensas den skapade arrayen och, faktiskt, variabeln LD_LIBRARY_PATH. Samtidigt, om _dl_split_path() tar slut på minne (vilket är svårt på grund av den explicita gränsen på 256 kB för storleken på miljövariabler, men teoretiskt möjlig), så kommer variabeln _dl_libpath att få värdet NULL, och efterföljande kontroller av värdet på denna variabel tvingar att hoppa över anropet till _dl_unsetenv("LD_LIBRARY_PATH").
Sårbarhet hittad av experter
Tillägg: Problemet har tilldelats ett nummer
amd64 och i386 (exploatet kan anpassas för andra arkitekturer).
Problemet kan utnyttjas i standardinstallationen och tillåter en oprivilegierad lokal användare att köra kod som root via biblioteksersättning när de kör verktygen chpass eller passwd suid. För att skapa de låga minnesförhållanden som krävs för drift, ställ in RLIMIT_DATA-gränsen via setrlimit.
Källa: opennet.ru