Dynamisk læsser
Essensen af problemet: under drift udtrækker ld.so først værdien af variablen LD_LIBRARY_PATH fra miljøet og ved hjælp af funktionen _dl_split_path() omdanner den til en række strenge - stier til mapper. Hvis det senere viser sig, at den aktuelle proces startes af en SUID/SGID-applikation, ryddes det oprettede array og faktisk LD_LIBRARY_PATH-variablen. På samme tid, hvis _dl_split_path() løber tør for hukommelse (hvilket er svært på grund af den eksplicitte 256 kB grænse på størrelsen af miljøvariabler, men er teoretisk muligt), så vil _dl_libpath variablen modtage værdien NULL, og efterfølgende kontrol af værdien af denne variabel vil forårsage springe kaldet til _dl_unsetenv("LD_LIBRARY_PATH").
Sårbarhed fundet af eksperter
Tilføjelse: Problemet er blevet tildelt et nummer
amd64 og i386 (benyttelsen kan tilpasses til andre arkitekturer).
Problemet kan udnyttes i standardinstallationen og tillader en uprivilegeret lokal bruger at udføre kode som root via bibliotekserstatning, når de kører chpass- eller passwd suid-værktøjerne. For at skabe de betingelser med lav hukommelse, der er nødvendige for drift, skal du indstille RLIMIT_DATA-grænsen via setrlimit.
Kilde: opennet.ru