Het bedrijf Qualys heeft de derde gevaarlijke kwetsbaarheid (CVE-2022-3328) van dit jaar ontdekt in de snap-confine utility, die met de SUID root-vlag wordt geleverd en door het snapd-proces wordt aangeroepen om een uitvoeringsomgeving voor applicaties te creƫren die worden verspreid in zelfvoorzienende pakketten in snap-formaat. Deze kwetsbaarheid stelt een lokale niet-geprivilegieerde gebruiker in staat om code met root-rechten uit te voeren in de standaard configuratie van Ubuntu. Het probleem is opgelost in versie snapd 2.57.6. Pakketupdates zijn uitgebracht voor alle ondersteunde Ubuntu-takken.
Interessant is dat de door ons onderzochte kwetsbaarheid is ontstaan tijdens het verhelpen van een soortgelijke kwetsbaarheid in snap-confine in februari. Onderzoekers slaagden erin een werkende exploit voor te bereiden die root-toegang biedt op Ubuntu Server 22.04, waarin naast de kwetsbaarheid in snap-confine ook twee kwetsbaarheden in het multipathd-proces (CVE-2022-41974, CVE-2022-41973) zijn betrokken, die verband houden met het omzeilen van autorisatiecontrole bij het versturen van geprivilegieerde opdrachten en onveilige handelingen met symbolische links.
De kwetsbaarheid in snap-confine wordt veroorzaakt door een raceconditie in de functie must_mkdir_and_open_with_perms(), die is toegevoegd ter bescherming tegen directory-injectie van /tmp/snap.$SNAP_NAME naar een symbolische link, op een moment na de controle van de eigenaar, maar vóór de aanroep van de mount-systeemoproep voor het bind-mounten van mappen voor het snap-pakket. De toegevoegde bescherming hield in dat er een hernoeming van de map /tmp/snap.$SNAP_NAME plaatsvond naar een andere map in /tmp met een willekeurige naam, als deze bestond en niet toebehoorde aan de gebruiker root.
Bij het exploiteren van de hernoemingsoperatie van de map /tmp/snap.$SNAP_NAME maakten onderzoekers gebruik van het feit dat snap-confine ook de map /tmp/snap.rootfs_XXXXXX aanmaakt voor de root van de inhoud van het snap-pakket. Het deel 'XXXXXX' in de naam wordt willekeurig geselecteerd met mkdtemp(), maar een pakket met de naam 'rootfs_XXXXXX' kan de controle door de functie sc_instance_name_validate doorstaan (d.w.z. het idee is dat de naam $SNAP_NAME de waarde 'rootfs_XXXXXX' aanneemt en dan leidt de hernoemingsoperatie tot het overschrijven van de map /tmp/snap.rootfs_XXXXXX met de root van snap).
Om gelijktijdige gebruik van /tmp/snap.rootfs_XXXXXX en het hernoemen van /tmp/snap.$SNAP_NAME te bereiken, werden er twee instanties van snap-confine gestart. Zodra de eerste instantie /tmp/snap.rootfs_XXXXXX aanmaakte, werd het proces geblokkeerd en werd de tweede instantie met de naam van het pakket rootfs_XXXXXX gestart, wat ertoe leidde dat de tijdelijke map /tmp/snap.$SNAP_NAME van de tweede instantie de rootmap /tmp/snap.rootfs_XXXXXX van de eerste werd. Direct na het uitvoeren van de herbenaming werd de tweede instantie gedwongen beƫindigd en werd /tmp/snap.rootfs_XXXXXX vervangen door een raceconditie-exploitatie, zoals gezien in de kwetsbaarheid van februari. Na de vervangingen werd de uitvoeringsblokkade van de eerste instantie opgeheven en kregen de aanvallers volledige controle over de rootmap van snap.
In de laatste fase werd er een symbolische link /tmp/snap.rootfs_XXXXXX/tmp aangemaakt, die werd gebruikt door de functie sc_bootstrap_mount_namespace() voor het bind-mounten van de writable echte map /tmp naar elke FS-map, aangezien de aanroep mount() symbolische links volgt vóór het monteren. Een dergelijke montage wordt geblokkeerd door AppArmor-beperkingen, maar om deze blokkade te omzeilen, werden er in de exploit twee aanvullende kwetsbaarheden in multipathd gebruikt.
Bron: opennet.ru
