Zehmetiya root di amûra rêveberiya pakêtê ya Snap de

Qualys îsal sêyem xirapiya xeternak (CVE-2022-3328) di navgîniya snap-confine de, ku bi ala root SUID ve tê û ji hêla pêvajoya snapd ve tê gazî kirin ku ji bo serîlêdanên ku di pakêtên xweser de têne belav kirin, hawirdorek darveker biafirîne nas kir. di forma snap de. Qelsî dihêle ku bikarhênerek bêdestûr a herêmî bigihîje darvekirina kodê wekî root di veavakirina xwerû ya Ubuntu de. Pirsgirêk di serbestberdana snapd 2.57.6 de tête rast kirin. Nûvekirinên pakêtê ji bo hemî şaxên piştgirî yên Ubuntu hatine berdan.

Balkêş e, qelsiya navborî di dema pêvajoya rastkirina xirapbûnek heman meha Sibatê ya di snap-confine de hate destnîşan kirin. Lekolînwanan karîbûn karûbarek xebatê amade bikin ku gihîştina root ji Ubuntu Server 22.04 re peyda dike, ku ji bilî xirapbûna di snap-confine de, di heman demê de du qelsî di pêvajoya piralî de jî vedihewîne (CVE-2022-41974, CVE-2022-41973) , bi derbaskirina kontrolkirina desthilatdariyê ve girêdayî ye dema veguheztina fermanên îmtiyaz û xebata ne ewle ya bi girêdanên sembolîk re.

Zehfbûna di snap-confine de ji ber rewşek nijadî ya di fonksiyona must_mkdir_and_open_with_perms() de ye, ku ji bo parastina li hember guheztina peldanka /tmp/snap hatî zêdekirin. $SNAP_NAME pelrêça bi girêdanek sembolîk piştî kontrolkirina xwedan, lê berî gazîkirina pergala çîyayê ji bo pakêtek di forma snap-ê de gazî bikin ku pelrêçan di nav wê de girêdin. Parastina lêzêdekirî ew bû ku navê pelrêça /tmp/snap.$SNAP_NAME biguherîne pelrêçeka din a li /tmp bi navekî rasthatî eger hebe û ne xwediyê root be.

Dema ku operasyona binavkirina pelrêça /tmp/snap.$SNAP_NAME bi kar tînin, lêkolîneran ji vê yekê sûd wergirtin ku snap-confine jî pelrêçek /tmp/snap.rootfs_XXXXXX ji bo koka naveroka pakêta snap-ê diafirîne. Parçeya "XXXXXX" ya nav ji hêla mkdtemp() ve bi korfelaqî tê hilbijartin, lê pakêtek bi navê "rootfs_XXXXXX" dikare di fonksiyona sc_instance_name_validate de were pejirandin (ango fikir ev e ku $SNAP_NAME dê wekî "rootfs_XXXXXX" were danîn û dûv re operasyona binavkirinê dê encam bide ku pelrêça /tmp/snap.rootfs_XXXXXX bi snap root ve were nivîsandin).

Ji bo bidestxistina bikaranîna hevdemî ya /tmp/snap.rootfs_XXXXXX û guherandina navê /tmp/snap.$SNAP_NAME, du nimûneyên snap-confine hatin destpêkirin. Dema ku mînaka yekem /tmp/snap.rootfs_XXXXXX hate afirandin, pêvajo dê asteng bike û mînakek duyemîn dê bi navê pakêtê rootfs_XXXXXX dest pê bike, û dibe sedem ku pelrêça demkî ya mînaka duyemîn /tmp/snap.$SNAP_NAME bibe pelrêça root /tmp/snap. .rootfs_XXXXXX ya yekem. Di cih de piştî ku nûvekirin qediya, mînaka duyemîn têk çû, û /tmp/snap.rootfs_XXXXXX bi manîpulasyona rewşa nijadê hate guheztin, wekî dema ku xerabûna Sibatê bikar tîne. Piştî veguheztinê, kilîtkirina darvekirinê ji gava yekem hate rakirin û êrîşkaran kontrola tam li ser pelrêça root snap bi dest xistin.

Pêngava paşîn çêkirina symlinkek /tmp/snap.rootfs_XXXXXX/tmp bû, ku ji hêla fonksiyona sc_bootstrap_mount_namespace() ve hatî bikar anîn da ku pelrêça rastîn /tmp bi her pelrêça di pergala pelê de girêde-mount bike, ji ber ku mount() bang dike. berî çekirinê sîmlînkan dişopîne. Hilberîna wusa ji hêla qedexeyên AppArmor ve tê asteng kirin, lê ji bo derbaskirina vê blokê, îstîsmarê du qelsiyên alîkar di multipathd de bikar anîn.

Source: opennet.ru

Add a comment