Pagrindinis pažeidžiamumas Snap Package Management Toolkit

„Qualys“ šiais metais nustatė trečią pavojingą pažeidžiamumą (CVE-2022-3328) „snap-confine“ programoje, kuri pateikiama kartu su SUID šaknies vėliava ir kurią iškviečia snapd procesas, siekiant sukurti vykdomąją aplinką programoms, platinamoms savarankiškuose paketuose. snap formatu. Pažeidžiamumas leidžia vietiniam neprivilegijuotam vartotojui pasiekti kodo vykdymą kaip root pagal numatytąją Ubuntu konfigūraciją. Problema išspręsta snapd 2.57.6 leidime. Paketo naujinimai buvo išleisti visoms palaikomoms Ubuntu šakoms.

Įdomu tai, kad aptariamas pažeidžiamumas buvo įvestas taisant panašų vasario mėn. pažeidžiamumą tiesioginio ryšio metu. Tyrėjai sugebėjo parengti darbinį išnaudojimą, suteikiantį pagrindinę prieigą prie Ubuntu Server 22.04, kuris, be snap-confine pažeidžiamumo, taip pat apima du kelių kelių proceso pažeidžiamumus (CVE-2022-41974, CVE-2022-41973). , susijęs su autoriteto patikrinimo apėjimu, kai perduodamos privilegijuotos komandos ir nesaugus darbas naudojant simbolines nuorodas.

Snap-confine pažeidžiamumą sukelia lenktynių sąlyga funkcijoje must_mkdir_and_open_with_perms(), kuri pridėta siekiant apsaugoti nuo /tmp/snap.$SNAP_NAME katalogo pakeitimo simboline nuoroda patikrinus savininką, bet prieš iškviečiant montavimo sistemą skambinti, kad į jį būtų prijungti katalogai, skirti paketui snap formatu. Papildoma apsauga buvo pervadinti /tmp/snap.$SNAP_NAME katalogą į kitą katalogą /tmp atsitiktiniu pavadinimu, jei jis egzistuoja ir nepriklauso root.

Naudodami /tmp/snap.$SNAP_NAME katalogo pervadinimo operaciją, mokslininkai pasinaudojo tuo, kad snap-confine taip pat sukuria /tmp/snap.rootfs_XXXXXX katalogą, skirtą snap paketo turinio šaknims. Vardo dalis „XXXXXX“ parenkama atsitiktinai naudojant mkdtemp(), tačiau paketą pavadinimu „rootfs_XXXXXX“ galima patvirtinti naudojant funkciją sc_instance_name_validate (t. y. idėja yra ta, kad $SNAP_NAME bus nustatyta kaip „rootfs_XXXXXX“, o tada bus atlikta pervadinimo operacija). dėl to /tmp/snap.rootfs_XXXXXX katalogas bus perrašytas šakniniu snapu).

Siekiant vienu metu naudoti /tmp/snap.rootfs_XXXXXX ir pervadinti /tmp/snap.$SNAP_NAME, buvo paleisti du snap-confine egzemplioriai. Kai pirmasis egzempliorius sukuria /tmp/snap.rootfs_XXXXXX, procesas bus blokuojamas, o antrasis egzempliorius prasidės paketo pavadinimu rootfs_XXXXXX, todėl antrojo egzemplioriaus laikinasis katalogas /tmp/snap.$SNAP_NAME taps šakniniu katalogu /tmp/snap .rootfs_XXXXXX iš pirmojo. Iš karto po to, kai buvo atliktas pervadinimas, antrasis egzempliorius sudužo, o /tmp/snap.rootfs_XXXXXX buvo pakeistas lenktynių sąlygų manipuliavimu, kaip ir išnaudojant vasario pažeidžiamumą. Po pakeitimo vykdymo užraktas buvo pašalintas iš pirmo karto, o užpuolikai įgijo visišką snap šakninio katalogo kontrolę.

Paskutinis veiksmas buvo sukurti simbolinę nuorodą /tmp/snap.rootfs_XXXXXX/tmp, kurią naudojo funkcija sc_bootstrap_mount_namespace() rašomam realiam katalogui /tmp prijungti prie bet kurio failų sistemos katalogo, nes iškvietimas mount() prieš montuodami seka simbolius. Tokį montavimą blokuoja „AppArmor“ apribojimai, tačiau, kad apeitų šį bloką, išnaudojimas panaudojo du pagalbinius kelių kelių pažeidžiamumus.

Šaltinis: opennet.ru

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