Kompania Qualys identifikoi një të tretë të rrezikshëm këtë vit (CVE-2022-3328) në utilitarin snap-confine, i cili ofrohet me flag SUID root dhe thirret nga procesi snapd për të krijuar një ambient ekzekutiv për aplikacionet, të shpërndara në paketat autonome në formatin snap. Vulnerabiliteti i lejon një përdoruesi lokal të paautorizuar të arrijë ekzekutimin e kodit me privilegje root në konfigurimin e parazgjedhur të Ubuntu. Problemi është zgjidhur në lëshimin snapd 2.57.6. Përditësimet e paketave janë lëshuar për të gjithë degët e mbështetura të Ubuntu.
ĂshtĂ« interesante se vulnerabiliteti nĂ« fjalĂ« u shĂ«nua gjatĂ« procesit tĂ« rregullimit tĂ« njĂ« vulnerabiliteti tĂ« ngjashĂ«m nĂ« snap-confine qĂ« ndodhi nĂ« shkurt. Hulumtuesit arrinĂ« tĂ« pĂ«rgatitin njĂ« exploit funksional qĂ« ofron qasje root nĂ« Ubuntu Server 22.04, ku pĂ«rveç vulnerabilitetit nĂ« snap-confine, janĂ« angazhuar gjithashtu dy vulnerabilitete nĂ« procesin multipathd (CVE-2022-41974, CVE-2022-41973), tĂ« lidhura me kalimin e kontrollit tĂ« autorizimeve gjatĂ« transferimit tĂ« komandave me privilegje dhe punĂ«n e pasigurt me lidhjet simbolike.
Vulnerabiliteti në snap-confine shkaktohet nga një gjendje garuese në funksionin must_mkdir_and_open_with_perms(), e cila është shtuar për të mbrojtur nga zëvendësimi i drejtorisë "/tmp/snap.$SNAP_NAME" me një lidhje simbolike pas kontrollit të pronësisë, por para thirrjes së sistemit të thirrjes mount për të bindur drejtoritë për paketën në formatin snap. Mbrojtja e shtuar qëndronte në rinovimin e drejtorisë "/tmp/snap.$SNAP_NAME" në një tjetër direktor në "/tmp" me një emër të rastësishëm, nëse ajo ekziston dhe nuk i përket përdoruesit root.
Gjatë shfrytëzimit të operacionit të rinovimit të drejtorisë "/tmp/snap.$SNAP_NAME" hulumtuesit shfrytëzuan faktin se snap-confine gjithashtu krijon një drejtorinë "/tmp/snap.rootfs_XXXXXX" për rrënjën e përmbajtjes së paketës snap. Pjesa "XXXXXX" në emër zgjidhet rastësisht përmes mkdtemp(), por paketa me emrin "rootfs_XXXXXX" mund të kalojë verifikimin në funksionin sc_instance_name_validate (dmth ideja është që emri $SNAP_NAME të marrë vlerën "rootfs_XXXXXX" dhe atëherë operacioni i rinovimit do të çojë në mbivendosjen e drejtorisë "/tmp/snap.rootfs_XXXXXX" me rrënjën snap).
Për të arritur përdorimin e njëkohshëm të "/tmp/snap.rootfs_XXXXXX" dhe rinovimin e "/tmp/snap.$SNAP_NAME" ishin nisur dy ekzemplarë të snap-confine. Sa herë që ekzemplari i parë krijonte "/tmp/snap.rootfs_XXXXXX", procesi blokonte dhe ekzekutohej ekzemplari i dytë me emrin e paketës rootfs_XXXXXX, e cila rezultonte në atë që direktoria temporale "/tmp/snap.$SNAP_NAME" e ekzemplarit të dytë bëhej rrënja e drejtorisë "/tmp/snap.rootfs_XXXXXX" të ekzemplarit të parë. Menjëherë pas përfundimit të rinovimit, ekzemplari i dytë mbyllej papritur dhe "/tmp/snap.rootfs_XXXXXX" ishte zëvendësuar duke manipuluar gjendjen e garës, siç ndodhte me shfrytëzimin e vulnerabilitetit të shkurtit. Pas zëvendësimit, nga ekzemplari i parë ishte hequr bllokimi i ekzekutimit dhe sulmuesit merrnin kontroll të plotë mbi drejtorinë rrënjë të snap.
Në fazën përfundimtare krijohej një lidhje simbolike "/tmp/snap.rootfs_XXXXXX/tmp", e cila përdorej nga funksioni sc_bootstrap_mount_namespace() për të bindur drejtorinë e vërtetë të shkruarshme "/tmp" në çdo drejtor FS, pasi thirrja mount() ndjek lidhjet simbolike para montimit. Montimi i tillë bllokohet nga kufizimet AppArmor, por për të anashkaluar këtë bllokim, në exploit ishin angazhuar dy vulnerabilitete ndihmëse në multipathd.
Burimi: opennet.ru
