Mga lokal na kahinaan sa ugat sa toolkit ng pamamahala ng package ng Snap

Natukoy ng Qualys ang dalawang kahinaan (CVE-2021-44731, CVE-2021-44730) sa snap-confine utility, na ibinigay kasama ng SUID root flag at tinawag ng snapd process upang lumikha ng isang executable na kapaligiran para sa mga application na inihatid sa mga self-contained na pakete sa snap format. Ang mga kahinaan ay nagbibigay-daan sa isang lokal na unprivileged user na magsagawa ng code na may mga pribilehiyo sa ugat sa system. Ang mga isyu ay nalutas sa snapd package update ngayon para sa Ubuntu 21.10, 20.04 at 18.04.

Ang unang kahinaan (CVE-2021-44730) ay nagbibigay-daan sa isang pag-atake sa pamamagitan ng pagmamanipula ng hard link, ngunit nangangailangan ng hindi pagpapagana ng proteksyon ng hard link ng system (i-set ang sysctl fs.protected_hardlinks sa 0). Ang problema ay sanhi ng hindi tamang pag-verify ng lokasyon ng mga executable na file ng snap-update-ns at snap-discard-ns helper program na tumatakbo bilang root. Ang landas sa mga file na ito ay kinakalkula sa sc_open_snapd_tool() function na batay sa sarili nitong landas mula sa /proc/self/exe, na nagpapahintulot sa iyo na lumikha ng isang hard link upang snap-confine sa iyong direktoryo at ilagay ang iyong sariling mga bersyon ng snap- update-ns at snap-utility sa direktoryong ito. discard-ns. Pagkatapos tumakbo sa pamamagitan ng hard link, ilulunsad ng snap-confine with root rights ang snap-update-ns at snap-discard-ns na mga file mula sa kasalukuyang direktoryo, na papalitan ng attacker.

Ang pangalawang kahinaan ay sanhi ng kundisyon ng lahi at maaaring samantalahin sa default na configuration ng Ubuntu Desktop. Para matagumpay na gumana ang pagsasamantala sa Ubuntu Server, dapat kang pumili ng isa sa mga pakete mula sa seksyong "Mga Itinatampok na Server Snaps" kapag nag-i-install. Ang kundisyon ng karera ay makikita sa setup_private_mount() function na tinatawag sa panahon ng paghahanda ng mount point namespace para sa snap package. Lumilikha ang function na ito ng pansamantalang direktoryo na "/tmp/snap.$SNAP_NAME/tmp" o gumagamit ng umiiral nang isa upang i-bind-mount ang mga direktoryo para sa isang snap package dito.

Dahil predictable ang pangalan ng pansamantalang direktoryo, maaaring palitan ng isang attacker ang mga nilalaman nito ng simbolikong link pagkatapos suriin ang may-ari, ngunit bago tumawag sa mount system call. Halimbawa, maaari kang lumikha ng symlink "/tmp/snap.lxd/tmp" sa /tmp/snap.lxd na direktoryo na tumuturo sa isang di-makatwirang direktoryo, at ang isang tawag sa mount() ay susundan ang symlink at i-mount ang direktoryo sa snap namespace. Sa katulad na paraan, maaari mong i-mount ang iyong mga nilalaman sa /var/lib at, sa pamamagitan ng pagpapalit sa /var/lib/snapd/mount/snap.snap-store.user-fstab, ayusin ang pag-mount ng iyong /etc na direktoryo sa namespace ng ang snap package upang ayusin ang paglo-load ng iyong library mula sa gamit ang mga karapatan sa ugat sa pamamagitan ng pagpapalit sa /etc/ld.so.preload.

Napansin na ang paglikha ng isang pagsasamantala ay naging isang hindi maliit na gawain, dahil ang snap-confine na utility ay nakasulat sa Go gamit ang mga secure na diskarte sa programming, may proteksyon batay sa mga profile ng AppArmor, sinasala ang mga tawag sa system batay sa mekanismo ng seccomp, at gumagamit ang mount namespace para sa paghihiwalay. Gayunpaman, nakapaghanda ang mga mananaliksik ng isang gumaganang pagsasamantala upang makakuha ng mga karapatan sa ugat sa system. Ipa-publish ang exploit code sa loob ng ilang linggo pagkatapos i-install ng mga user ang mga ibinigay na update.

Pinagmulan: opennet.ru

Magdagdag ng komento