Päähaavoittuvuus Snap Package Management Toolkitissa

Qualys on tunnistanut kolmannen vakavan haavoittuvuuden tänä vuonna (CVE-2022-3328) snap-confine-apuohjelmassa, joka tulee SUID-juurilipun mukana ja jota snapd-prosessi kutsuu muodostamaan suoritettavan ympäristön sovelluksille, jotka jaetaan erillisissä paketeissa. snap-muodossa. Haavoittuvuuden ansiosta paikallinen etuoikeutettu käyttäjä voi suorittaa koodin pääkäyttäjänä Ubuntun oletuskokoonpanossa. Ongelma on korjattu snapd 2.57.6 -julkaisussa. Pakettipäivitykset on julkaistu kaikille tuetuille Ubuntun haaroille.

Mielenkiintoista on, että kyseinen haavoittuvuus otettiin käyttöön samanlaisen helmikuun haavoittuvuuden korjaamisen yhteydessä snap-confine-sovelluksessa. Tutkijat pystyivät valmistelemaan toimivan hyväksikäytön, joka tarjoaa pääkäyttäjän pääsyn Ubuntu Server 22.04:ään, joka snap-confine-haavoittuvuuden lisäksi sisältää myös kaksi monitieprosessin haavoittuvuutta (CVE-2022-41974, CVE-2022-41973). liittyvät käyttöoikeustarkistuksen ohittamiseen etuoikeutettujen komentojen välittämisessä ja symbolisten linkkien vaaralliseen käsittelyyn.

Snap-confine-haavoittuvuus johtuu kilpailutilanteesta must_mkdir_and_open_with_perms()-funktiossa, joka on lisätty suojaamaan /tmp/snap.$SNAP_NAME-hakemiston korvaamiselta symbolisella linkillä omistajan tarkistuksen jälkeen, mutta ennen asennusjärjestelmän kutsua. kutsutaan liittämään siihen hakemistoja snap-muodossa olevaa pakettia varten. Lisätty suojaus oli nimetä /tmp/snap.$SNAP_NAME-hakemisto uudelleen toiseksi /tmp-hakemiston hakemistoksi satunnaisella nimellä, jos se on olemassa eikä pääkäyttäjän omistaa.

Hyödyntäessään /tmp/snap.$SNAP_NAME-hakemiston uudelleennimeämistoimintoa tutkijat hyödynsivät sitä tosiasiaa, että snap-confine luo myös /tmp/snap.rootfs_XXXXXX-hakemiston snap-paketin sisällön juurelle. Nimen osan "XXXXXX" valitsee satunnaisesti mkdtemp(), mutta paketti nimeltä "rootfs_XXXXXX" voi välittää sc_instance_name_validate (eli idea on, että $SNAP_NAME on asetettu arvoon "rootfs_XXXXXX", jolloin uudelleennimeämistoiminto johtaa korvaamiseen /tmp/snap.rootfs_XXXXXX-hakemisto, jossa on snap-juuri).

Jotta tiedostoa /tmp/snap.rootfs_XXXXXX ja /tmp/snap.$SNAP_NAME voidaan nimetä uudelleen, käynnistettiin kaksi snap-confine-instanssia. Heti kun ensimmäinen ilmentymä loi /tmp/snap.rootfs_XXXXXX, prosessi estyy ja toinen ilmentymä paketin nimellä rootfs_XXXXXX alkaisi, jolloin toisen esiintymän väliaikaisesta hakemistosta /tmp/snap.$SNAP_NAME tulee /tmp/snap. .rootfs_XXXXXX ensimmäisen esiintymän juurihakemisto. Välittömästi uudelleennimeämisen jälkeen toinen ilmentymä kaatui, ja /tmp/snap.rootfs_XXXXXX korvattiin kilpailuolosuhteiden manipuloinnilla, kuten helmikuun haavoittuvuuden hyväksikäytössä. Muutoksen jälkeen suorituslukko poistettiin ensimmäisestä esiintymästä ja hyökkääjät saivat täyden hallinnan snap-juurihakemistosta.

Viimeinen vaihe oli symlinkin luominen /tmp/snap.rootfs_XXXXXX/tmp, jota funktio sc_bootstrap_mount_namespace() käytti kirjoitettavan oikean hakemiston /tmp liittämiseen mihin tahansa tiedostojärjestelmän hakemistoon, koska mount()-kutsu seuraa symlinkit ennen asennusta. AppArmorin rajoitukset estävät tällaisen asennuksen, mutta tämän eston ohittamiseksi hyväksikäyttö hyödynsi kahta monipolun lisähaavoittuvuutta.

Lähde: opennet.ru

Lisää kommentti