Արմատային խոցելիություն Snap փաթեթի կառավարման գործիքակազմում

Qualys-ը հայտնաբերել է այս տարվա երրորդ վտանգավոր խոցելիությունը (CVE-2022-3328) snap-confine կոմունալում, որը գալիս է SUID արմատային դրոշակով և կոչված է snapd գործընթացի կողմից՝ ստեղծելու գործարկվող միջավայր՝ ինքնուրույն փաթեթներում բաշխված հավելվածների համար: snap ձևաչափով: Խոցելիությունը թույլ է տալիս տեղական ոչ արտոնյալ օգտագործողին հասնել կոդի կատարման որպես արմատ Ubuntu-ի լռելյայն կազմաձևում: Խնդիրն ամրագրված է snapd 2.57.6 թողարկումում: Փաթեթի թարմացումները թողարկվել են Ubuntu-ի բոլոր աջակցվող մասնաճյուղերի համար:

Հետաքրքիր է, որ խնդրո առարկա խոցելիությունը ներկայացվել է փետրվարյան նմանատիպ խոցելիության շտկման գործընթացի ժամանակ: Հետազոտողները կարողացան պատրաստել աշխատանքային շահագործում, որն ապահովում է արմատային մուտք դեպի Ubuntu Server 22.04, որը, ի լրումն snap-confine խոցելիության, ներառում է նաև երկու խոցելիություն բազմակողմ գործընթացում (CVE-2022-41974, CVE-2022-41973): , կապված արտոնյալ հրամանների փոխանցման ժամանակ լիազորությունների ստուգման շրջանցման և խորհրդանշական հղումներով անապահով աշխատանքի հետ:

Snap-confine-ի խոցելիությունը պայմանավորված է must_mkdir_and_open_with_perms() ֆունկցիայի ռասայական վիճակով, որն ավելացվել է՝ պաշտպանելու համար /tmp/snap.$SNAP_NAME գրացուցակը խորհրդանշական հղումով՝ սեփականատիրոջը ստուգելուց հետո, բայց նախքան mount համակարգը կանչելը: զանգ՝ դիրեկտորիաները դրա մեջ միացնելու համար՝ snap ձևաչափով փաթեթի համար: Ավելացված պաշտպանությունն այն էր, որ վերանվանվի /tmp/snap.$SNAP_NAME գրացուցակը /tmp-ի մեկ այլ գրացուցակ՝ պատահական անունով, եթե այն գոյություն ունի և չի պատկանում root-ին:

Երբ օգտագործում էին /tmp/snap.$SNAP_NAME գրացուցակի վերանվանման գործողությունը, հետազոտողները օգտվեցին այն փաստից, որ snap-confine-ը նաև ստեղծում է /tmp/snap.rootfs_XXXXXX գրացուցակ snap փաթեթի բովանդակության արմատի համար: Անվան «XXXXXX» մասը ընտրվում է պատահականորեն mkdtemp(-ի կողմից), սակայն «rootfs_XXXXXX» անունով փաթեթը կարող է վավերացվել sc_instance_name_validate ֆունկցիայի մեջ (այսինքն՝ գաղափարն այն է, որ $SNAP_NAME-ը կսահմանվի «rootfs_XXXXXX» և այնուհետև վերանվանվի գործողությունը: արդյունքում կվերագրվի /tmp/snap.rootfs_XXXXXX գրացուցակը արմատային snap-ով):

/tmp/snap.rootfs_XXXXXX-ի միաժամանակյա օգտագործման և /tmp/snap.$SNAP_NAME-ի միաժամանակյա օգտագործման հասնելու համար գործարկվեց snap-confine-ի երկու օրինակ: Երբ առաջին օրինակը ստեղծեր /tmp/snap.rootfs_XXXXXX, գործընթացը կարգելափակվի, իսկ երկրորդ օրինակը կսկսվի փաթեթի անունով rootfs_XXXXXX, ինչի հետևանքով երկրորդ ատյանի /tmp/snap.$SNAP_NAME-ի ժամանակավոր գրացուցակը կդառնա /tmp/snap: .rootfs_XXXXXX առաջինից: Վերանվանումն ավարտելուց անմիջապես հետո երկրորդ ատյանը խափանվեց, և /tmp/snap.rootfs_XXXXXX-ը փոխարինվեց ռասայական վիճակի մանիպուլյացիայով, ինչպես փետրվարյան խոցելիությունը շահագործելիս: Փոխարինումից հետո կատարման կողպեքը հանվեց առաջին ատյանից, և հարձակվողները լիակատար վերահսկողություն ձեռք բերեցին snap root գրացուցակի վրա:

Վերջին քայլն էր ստեղծել symlink /tmp/snap.rootfs_XXXXXX/tmp, որն օգտագործվում էր sc_bootstrap_mount_namespace() ֆունկցիայի կողմից՝ գրվող իրական գրացուցակը /tmp-ը ֆայլային համակարգի ցանկացած գրացուցակին կապելու համար, քանի որ mount() կանչը: մոնտաժելուց առաջ հետևում է սիմվոլիկներին: Նման մոնտաժն արգելափակված է AppArmor-ի սահմանափակումներով, սակայն այս բլոկը շրջանցելու համար էքսփլեյթը օգտագործեց երկու օժանդակ խոցելիություն բազմատարածքում:

Source: opennet.ru

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