Dynamic na loader
Ang kakanyahan ng problema: sa panahon ng operasyon, kinukuha muna ng ld.so ang halaga ng variable na LD_LIBRARY_PATH mula sa kapaligiran at, gamit ang _dl_split_path() function, ginagawa itong hanay ng mga string - mga path sa mga direktoryo. Kung sa ibang pagkakataon ay lumabas na ang kasalukuyang proseso ay sinimulan ng isang SUID/SGID na application, ang ginawang array at, sa katunayan, ang LD_LIBRARY_PATH variable ay iki-clear. Kasabay nito, kung ang _dl_split_path() ay naubusan ng memorya (na mahirap dahil sa tahasang 256 kB na limitasyon sa laki ng mga variable ng kapaligiran, ngunit posible sa teorya), kung gayon ang _dl_libpath variable ay makakatanggap ng halagang NULL, at kasunod na pagsusuri ng halaga ng variable na ito ay magiging sanhi ng paglaktaw sa tawag sa _dl_unsetenv("LD_LIBRARY_PATH").
Natagpuan ng mga eksperto ang kahinaan
Karagdagan: Ang problema ay itinalaga ng isang numero
amd64 at i386 (ang pagsasamantala ay maaaring iakma para sa iba pang mga arkitektura).
Ang isyu ay pinagsamantalahan sa default na pag-install at nagbibigay-daan sa isang walang pribilehiyong lokal na user na magsagawa ng code bilang root sa pamamagitan ng pagpapalit ng library kapag nagpapatakbo ng chpass o passwd suid utilities. Upang lumikha ng mga kondisyong mababa ang memorya na kinakailangan para sa operasyon, itakda ang limitasyon ng RLIMIT_DATA sa pamamagitan ng setrlimit.
Pinagmulan: opennet.ru