ተለዋዋጭ ጫኚ
የችግሩ ዋና ነገር፡- በሚሰራበት ጊዜ 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 በኩል ያዘጋጁ።
ምንጭ: opennet.ru