Koreňová zraniteľnosť v Snap Package Management Toolkit

Qualys tento rok identifikoval tretiu závažnú zraniteľnosť (CVE-2022-3328) v utilite snap-confine, ktorá sa dodáva s koreňovým príznakom SUID a je volaná procesom snapd, aby vytvoril spustiteľné prostredie pre aplikácie distribuované v samostatných balíkoch. vo formáte snap. Táto chyba zabezpečenia umožňuje miestnemu neprivilegovanému používateľovi dosiahnuť spustenie kódu ako root v predvolenej konfigurácii Ubuntu. Problém bol opravený vo vydaní snapd 2.57.6. Aktualizácie balíkov boli vydané pre všetky podporované vetvy Ubuntu.

Zaujímavé je, že daná zraniteľnosť bola zavedená v procese odstraňovania podobnej februárovej zraniteľnosti v snap-confine. Výskumníci boli schopní pripraviť pracovný exploit, ktorý poskytuje root prístup v Ubuntu Server 22.04, ktorý okrem zraniteľnosti snap-confine zahŕňa aj dve zraniteľnosti v multipathd procese (CVE-2022-41974, CVE-2022-41973) súvisiace s obchádzaním kontroly oprávnení pri odovzdávaní privilegovaných príkazov a nebezpečným zaobchádzaním so symbolickými odkazmi.

Zraniteľnosť v snap-confine je spôsobená konfliktom vo funkcii must_mkdir_and_open_with_perms() pridanej na ochranu pred nahradením adresára /tmp/snap.$SNAP_NAME za symbolický odkaz po kontrole vlastníka, ale pred systémovým volaním mount je volaný, aby do neho pripojil adresáre pre balík vo formáte snap. Pridané zabezpečenie spočívalo v premenovaní adresára /tmp/snap.$SNAP_NAME na iný adresár v /tmp s náhodným názvom, ak existuje a nie je vo vlastníctve užívateľa typu root.

Pri využívaní operácie premenovania adresára /tmp/snap.$SNAP_NAME výskumníci využili skutočnosť, že snap-confine vytvára aj adresár /tmp/snap.rootfs_XXXXXX pre koreň obsahu balíka snap. Časť názvu „XXXXXX“ je náhodne vybraná pomocou mkdtemp(), ale balík s názvom „rootfs_XXXXXX“ môže prejsť overením sc_instance_name_validate (t. j. myšlienkou je nastaviť $SNAP_NAME na „rootfs_XXXXXX“ a operácia premenovania bude mať za následok prepísanie adresár /tmp/snap.rootfs_XXXXXX s koreňom snapu).

Aby sa dosiahlo súčasné použitie /tmp/snap.rootfs_XXXXXX a premenovanie /tmp/snap.$SNAP_NAME, boli spustené dve inštancie snap-confine. Hneď ako prvá inštancia vytvorí /tmp/snap.rootfs_XXXXXX, proces sa zablokuje a spustí sa druhá inštancia s názvom balíka rootfs_XXXXXX, čo spôsobí, že sa z dočasného adresára druhej inštancie /tmp/snap.$SNAP_NAME stane /tmp/snap .rootfs_XXXXXX koreňový adresár prvej inštancie. Ihneď po vykonaní premenovania druhá inštancia zlyhala a /tmp/snap.rootfs_XXXXXX bol nahradený manipuláciou so závodom, ako pri zneužití februárovej zraniteľnosti. Po zmene bol zámok vykonania odstránený z prvej inštancie a útočníci získali plnú kontrolu nad koreňovým adresárom snapu.

Posledným krokom bolo vytvorenie symbolického odkazu /tmp/snap.rootfs_XXXXXX/tmp, ktorý použila funkcia sc_bootstrap_mount_namespace() na pripojenie zapisovateľného skutočného adresára /tmp do ľubovoľného adresára v súborovom systéme, pretože nasleduje volanie mount(). symbolické odkazy pred montážou. Takáto montáž je blokovaná obmedzeniami AppArmor, ale aby sa toto blokovanie obišlo, zneužili dve pomocné zraniteľnosti v multipathd.

Zdroj: opennet.ru

Pridať komentár