Incarcator dinamic
Esența problemei: în timpul funcționării, ld.so extrage mai întâi valoarea variabilei LD_LIBRARY_PATH din mediu și, folosind funcția _dl_split_path(), o transformă într-o matrice de șiruri - căi către directoare. Dacă mai târziu se dovedește că procesul curent este pornit de o aplicație SUID/SGID, atunci matricea creată și, de fapt, variabila LD_LIBRARY_PATH sunt șterse. În același timp, dacă _dl_split_path() rămâne fără memorie (ceea ce este dificil din cauza limitei explicite de 256 kB privind dimensiunea variabilelor de mediu, dar teoretic posibil), atunci variabila _dl_libpath va primi valoarea NULL și verificările ulterioare ale valoarea acestei variabile va forța săriți apelul către _dl_unsetenv("LD_LIBRARY_PATH").
Vulnerabilitatea găsită de experți
Adăugare: Problemei i s-a atribuit un număr
amd64 și i386 (exploatația poate fi adaptată pentru alte arhitecturi).
Problema este exploatabilă în instalarea implicită și permite unui utilizator local neprivilegiat să execute cod ca root prin înlocuirea bibliotecii atunci când rulează utilitarele chpass sau passwd suid. Pentru a crea condițiile de memorie scăzută necesare funcționării, setați limita RLIMIT_DATA prin setrlimit.
Sursa: opennet.ru