Root vulnerability sa Snap package management toolkit

Natukoy ng Qualys ang ikatlong mapanganib na kahinaan sa taong ito (CVE-2022-3328) sa snap-confine utility, na kasama ng SUID root flag at tinatawag ng snapd process upang lumikha ng isang executable na kapaligiran para sa mga application na ipinamahagi sa mga self-contained na pakete sa snap format. Ang kahinaan ay nagbibigay-daan sa isang lokal na unprivileged user na makamit ang code execution bilang root sa default na configuration ng Ubuntu. Ang isyu ay naayos sa snapd 2.57.6 release. Ang mga update sa package ay inilabas para sa lahat ng suportadong sangay ng Ubuntu.

Kapansin-pansin, ang pinag-uusapang kahinaan ay ipinakilala sa panahon ng proseso ng pag-aayos ng isang katulad na kahinaan noong Pebrero sa snap-confine. Ang mga mananaliksik ay nakapaghanda ng isang gumaganang pagsasamantala na nagbibigay ng root access sa Ubuntu Server 22.04, na, bilang karagdagan sa kahinaan sa snap-confine, ay nagsasangkot din ng dalawang kahinaan sa proseso ng multipathd (CVE-2022-41974, CVE-2022-41973) , na nauugnay sa pag-bypass sa pagsusuri ng awtoridad kapag nagpapadala ng mga privileged command at hindi ligtas na trabaho na may mga simbolikong link.

Ang kahinaan sa snap-confine ay sanhi ng kundisyon ng lahi sa must_mkdir_and_open_with_perms() function, na idinagdag upang maprotektahan laban sa pagpapalit ng /tmp/snap.$SNAP_NAME na direktoryo ng simbolikong link pagkatapos suriin ang may-ari, ngunit bago tawagan ang mount system tumawag upang i-bind-mount ang mga direktoryo dito para sa isang pakete sa snap na format. Ang idinagdag na proteksyon ay ang palitan ang pangalan ng /tmp/snap.$SNAP_NAME na direktoryo sa isa pang direktoryo sa /tmp na may random na pangalan kung mayroon ito at hindi pagmamay-ari ng ugat.

Kapag pinagsamantalahan ang /tmp/snap.$SNAP_NAME na pagpapatakbo ng pagpapalit ng pangalan ng direktoryo, sinamantala ng mga mananaliksik ang katotohanan na ang snap-confine ay lumilikha din ng isang /tmp/snap.rootfs_XXXXXX na direktoryo para sa ugat ng mga nilalaman ng snap package. Ang "XXXXXX" na bahagi ng pangalan ay random na pinili ng mkdtemp(), ngunit ang isang package na pinangalanang "rootfs_XXXXXX" ay maaaring mapatunayan sa sc_instance_name_validate function (ibig sabihin, ang ideya ay ang $SNAP_NAME ay itatakda sa "rootfs_XXXXXX" at pagkatapos ay ang pagpapalit ng pangalan. ay magreresulta sa pag-overwrite sa /tmp/snap.rootfs_XXXXXX na direktoryo gamit ang root snap).

Upang makamit ang sabay-sabay na paggamit ng /tmp/snap.rootfs_XXXXXX at pagpapalit ng pangalan sa /tmp/snap.$SNAP_NAME, dalawang instance ng snap-confine ang inilunsad. Kapag nalikha na ng unang instance ang /tmp/snap.rootfs_XXXXXX, haharangin ang proseso at magsisimula ang pangalawang instance sa pangalan ng package na rootfs_XXXXXX, na magiging sanhi ng pansamantalang direktoryo ng pangalawang instance /tmp/snap.$SNAP_NAME na maging root directory /tmp/snap .rootfs_XXXXXX ng una. Kaagad pagkatapos makumpleto ang pagpapalit ng pangalan, ang pangalawang pagkakataon ay nag-crash, at /tmp/snap.rootfs_XXXXXX ay pinalitan ng pagmamanipula ng kundisyon ng lahi, tulad ng kapag pinagsasamantalahan ang kahinaan noong Pebrero. Pagkatapos ng pagpapalit, ang lock ng pagpapatupad ay tinanggal mula sa unang pagkakataon at ang mga umaatake ay nakakuha ng ganap na kontrol sa snap root na direktoryo.

Ang huling hakbang ay lumikha ng isang symlink /tmp/snap.rootfs_XXXXXX/tmp, na ginamit ng sc_bootstrap_mount_namespace() function upang i-bind-mount ang nasusulat na totoong direktoryo /tmp sa anumang direktoryo sa file system, dahil ang mount() ay tumawag sumusunod sa mga symlink bago i-mount. Ang nasabing pag-mount ay na-block ng mga paghihigpit ng AppArmor, ngunit upang ma-bypass ang block na ito, ang pagsasamantala ay gumamit ng dalawang auxiliary vulnerabilities sa multipathd.

Pinagmulan: opennet.ru

Magdagdag ng komento