Saknes ievainojamība Snap pakotņu pārvaldības rīkkopā

Qualys šogad ir identificējis trešo bīstamo ievainojamību (CVE-2022-3328) snap-confine utilītprogrammā, kas nāk ar SUID saknes karogu un tiek izsaukta snapd procesā, lai izveidotu izpildāmu vidi lietojumprogrammām, kas izplatītas pašpietiekamās pakotnēs. snap formātā. Ievainojamība ļauj vietējam nepiešķirtam lietotājam panākt koda izpildi kā root noklusējuma Ubuntu konfigurācijā. Problēma ir novērsta snapd 2.57.6 laidienā. Pakešu atjauninājumi ir izlaisti visām atbalstītajām Ubuntu filiālēm.

Interesanti, ka attiecīgā ievainojamība tika ieviesta līdzīgas februāra ievainojamības novēršanas procesā snap-confine. Pētnieki varēja sagatavot darba izmantošanu, kas nodrošina root piekļuvi Ubuntu Server 22.04, kas papildus snap-confine ievainojamībai ietver arī divas ievainojamības daudzceļu procesā (CVE-2022-41974, CVE-2022-41973). , kas saistīts ar autoritātes pārbaudes apiešanu, pārsūtot priviliģētas komandas un nedrošu darbu ar simboliskām saitēm.

Snap-confine ievainojamību izraisa sacensību nosacījums funkcijā must_mkdir_and_open_with_perms(), kas pievienota, lai aizsargātu pret direktorija /tmp/snap.$SNAP_NAME aizstāšanu ar simbolisku saiti pēc īpašnieka pārbaudes, bet pirms montāžas sistēmas izsaukšanas. izsaukums, lai tajā iekļautu iesaiņojuma direktorijus pakotnei snap formātā. Papildu aizsardzība bija direktorija /tmp/snap.$SNAP_NAME pārdēvēšana par citu direktoriju /tmp ar nejaušu nosaukumu, ja tas pastāv un nepieder saknei.

Izmantojot direktorija /tmp/snap.$SNAP_NAME pārdēvēšanas darbību, pētnieki izmantoja faktu, ka snap-confine izveido arī /tmp/snap.rootfs_XXXXXX direktoriju snap pakotnes satura saknei. Nosaukuma daļu "XXXXXX" izvēlas nejauši ar mkdtemp(), bet pakotni ar nosaukumu "rootfs_XXXXXX" var pārbaudīt funkcijā sc_instance_name_validate (t.i., ideja ir tāda, ka $SNAP_NAME tiks iestatīts uz "rootfs_XXXXXX", un pēc tam tiks veikta pārdēvēšanas darbība. rezultātā /tmp/snap.rootfs_XXXXXX direktorijs tiks pārrakstīts ar saknes snap).

Lai vienlaicīgi izmantotu /tmp/snap.rootfs_XXXXXX un pārdēvētu /tmp/snap.$SNAP_NAME, tika palaisti divi snap-confine gadījumi. Kad pirmā instance ir izveidojusi /tmp/snap.rootfs_XXXXXX, process tiks bloķēts un otrā instance sāksies ar pakotnes nosaukumu rootfs_XXXXXX, tādējādi otrās instances pagaidu direktorijs /tmp/snap.$SNAP_NAME kļūst par saknes direktoriju /tmp/snap. .rootfs_XXXXXX no pirmā. Tūlīt pēc pārdēvēšanas pabeigšanas otrā instance avarēja, un /tmp/snap.rootfs_XXXXXX tika aizstāts ar sacīkšu nosacījumu manipulāciju, tāpat kā tad, kad tika izmantota februāra ievainojamība. Pēc aizstāšanas izpildes bloķēšana tika noņemta no pirmās instances, un uzbrucēji ieguva pilnu kontroli pār snap saknes direktoriju.

Pēdējais solis bija izveidot saiti /tmp/snap.rootfs_XXXXXX/tmp, ko izmantoja funkcija sc_bootstrap_mount_namespace(), lai saistītu-mount ierakstāmo reālo direktoriju /tmp ar jebkuru direktoriju failu sistēmā, kopš mount() izsaukums. pirms uzstādīšanas seko simbolu saitēm. Šādu montāžu bloķē AppArmor ierobežojumi, taču, lai apietu šo bloku, ekspluatācija izmantoja divas vairāku ceļu papildu ievainojamības.

Avots: opennet.ru

Pievieno komentāru