Դինամիկ բեռնիչ
Խնդրի էությունը. շահագործման ընթացքում ld.so-ն նախ հանում է LD_LIBRARY_PATH փոփոխականի արժեքը շրջակա միջավայրից և օգտագործելով _dl_split_path() ֆունկցիան, այն վերածում է տողերի զանգվածի՝ ուղի դեպի դիրեկտորիաներ: Եթե ավելի ուշ պարզվի, որ ընթացիկ գործընթացը սկսել է SUID/SGID հավելվածը, ապա ստեղծված զանգվածը և, փաստորեն, LD_LIBRARY_PATH փոփոխականը մաքրվում է։ Միևնույն ժամանակ, եթե _dl_split_path()-ի հիշողությունը սպառվում է (ինչը դժվար է շրջակա միջավայրի փոփոխականների չափի բացահայտ 256 կԲ սահմանափակման պատճառով, բայց տեսականորեն հնարավոր է), ապա _dl_libpath փոփոխականը կստանա NULL արժեքը և հետագա ստուգում: այս փոփոխականի արժեքի պատճառով բաց կթողնվի զանգը դեպի _dl_unsetenv("LD_LIBRARY_PATH"):
Փորձագետների կողմից հայտնաբերված խոցելիություն
Հավելում. Խնդիրին տրվել է համար
amd64 և i386 (շահագործումը կարող է հարմարեցվել այլ ճարտարապետությունների համար):
Խնդիրը շահագործելի է լռելյայն տեղադրման մեջ և թույլ է տալիս ոչ արտոնյալ տեղային օգտագործողին chpass կամ passwd suid կոմունալ ծառայություններն աշխատելիս կատարել կոդը որպես արմատ գրադարանի փոխարինման միջոցով: Գործարկման համար անհրաժեշտ ցածր հիշողության պայմաններ ստեղծելու համար սահմանեք RLIMIT_DATA սահմանաչափը setrlimit-ի միջոցով:
Source: opennet.ru