Խոցելիություն ld.so OpenBSD-ում

Դինամիկ բեռնիչ ld.so, որը ներառված է OpenBSD-ի հետ, կարող է որոշակի պայմաններում, SUID/SGID- հավելվածները թողնում են LD_LIBRARY_PATH միջավայրի փոփոխականը և այդպիսով թույլ են տալիս երրորդ կողմի կոդը բեռնել բարձր արտոնություններով աշխատող գործընթացի համատեքստում: Կարկատները, որոնք շտկում են խոցելիությունը, հասանելի են թողարկումների համար 6.5 и 6.6. Երկուական բծեր (syspatch) amd64, i386 և arm64 պլատֆորմների համար արդեն արտադրվում են և պետք է հասանելի լինեն ներբեռնման համար մինչև այս նորությունը հրապարակվի։

Խնդրի էությունը. շահագործման ընթացքում 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"):

Փորձագետների կողմից հայտնաբերված խոցելիություն Որակի, Ինչպես նաեւ մի քանիսը նախկինում բացահայտված խնդիրներ. Անվտանգության հետազոտողները, ովքեր հայտնաբերել են խոցելիությունը, նշել են, թե որքան արագ է խնդիրը լուծվել. պատրաստվել է կարկատել, և թարմացումները թողարկվել են OpenBSD նախագծի ծանուցում ստանալուց հետո երեք ժամվա ընթացքում:

Հավելում. Խնդիրին տրվել է համար CVE-2019-19726- ը. Պատրաստված է oss-security փոստային ցուցակում պաշտոնական հայտարարություն, ներառյալ OpenBSD 6.6, 6.5, 6.2 և 6.1 ճարտարապետություններով աշխատող նախատիպը:
amd64 և i386 (շահագործումը կարող է հարմարեցվել այլ ճարտարապետությունների համար):
Խնդիրը շահագործելի է լռելյայն տեղադրման մեջ և թույլ է տալիս ոչ արտոնյալ տեղային օգտագործողին chpass կամ passwd suid կոմունալ ծառայություններն աշխատելիս կատարել կոդը որպես արմատ գրադարանի փոխարինման միջոցով: Գործարկման համար անհրաժեշտ ցածր հիշողության պայմաններ ստեղծելու համար սահմանեք RLIMIT_DATA սահմանաչափը setrlimit-ի միջոցով:

Source: opennet.ru

Добавить комментарий