Root-kwetsbaarheid in de Snap-pakketbeheertoolkit

Qualys heeft de derde gevaarlijke kwetsbaarheid dit jaar (CVE-2022-3328) geïdentificeerd in het snap-confine-hulpprogramma, dat wordt geleverd met de SUID-rootvlag en wordt aangeroepen door het snapd-proces om een ​​uitvoerbare omgeving te creëren voor applicaties die in op zichzelf staande pakketten worden gedistribueerd. in het snap-formaat. Door het beveiligingslek kan een lokale gebruiker zonder rechten code uitvoeren als root in de standaard Ubuntu-configuratie. Het probleem is opgelost in snapd 2.57.6 release. Er zijn pakketupdates uitgebracht voor alle ondersteunde takken van Ubuntu.

Interessant is dat de kwetsbaarheid in kwestie werd geïntroduceerd tijdens het proces van het repareren van een soortgelijke kwetsbaarheid in februari in snap-confine. Onderzoekers hebben een werkende exploit kunnen voorbereiden die root-toegang biedt tot Ubuntu Server 22.04, die naast de kwetsbaarheid in snap-confine ook twee kwetsbaarheden in het multipath-proces met zich meebrengt (CVE-2022-41974, CVE-2022-41973) , geassocieerd met het omzeilen van de autoriteitscontrole bij de overdracht van bevoorrechte opdrachten en onveilig werken met symbolische links.

De kwetsbaarheid in snap-confine wordt veroorzaakt door een race condition in de must_mkdir_and_open_with_perms() functie, toegevoegd om te beschermen tegen de vervanging van de map /tmp/snap.$SNAP_NAME door een symbolische link na het controleren van de eigenaar, maar voordat het mount-systeem wordt aangeroepen oproep om mappen erin te binden voor een pakket in snap-formaat. De toegevoegde bescherming was het hernoemen van de map /tmp/snap.$SNAP_NAME naar een andere map in /tmp met een willekeurige naam als deze bestaat en geen eigendom is van root.

Bij het exploiteren van de /tmp/snap.$SNAP_NAME maphernoemingsoperatie profiteerden de onderzoekers van het feit dat snap-confine ook een /tmp/snap.rootfs_XXXXXX map aanmaakt voor de root van de inhoud van het snappakket. Het "XXXXXX" deel van de naam wordt willekeurig gekozen door mkdtemp(), maar een pakket met de naam "rootfs_XXXXXX" kan worden gevalideerd in de sc_instance_name_validate functie (dat wil zeggen het idee is dat $SNAP_NAME wordt ingesteld op "rootfs_XXXXXX" en vervolgens de hernoemingsbewerking zal resulteren in het overschrijven van de map /tmp/snap.rootfs_XXXXXX met de root-snap).

Om gelijktijdig gebruik van /tmp/snap.rootfs_XXXXXX en het hernoemen van /tmp/snap.$SNAP_NAME te bereiken, zijn twee exemplaren van snap-confine gelanceerd. Zodra het eerste exemplaar /tmp/snap.rootfs_XXXXXX had aangemaakt, werd het proces geblokkeerd en begon een tweede exemplaar met de pakketnaam rootfs_XXXXXX, waardoor de tijdelijke map /tmp/snap.$SNAP_NAME van het tweede exemplaar de hoofdmap /tmp/snap werd .rootfs_XXXXXX van de eerste. Onmiddellijk nadat het hernoemen was voltooid, crashte de tweede instantie en werd /tmp/snap.rootfs_XXXXXX vervangen door manipulatie van racecondities, zoals bij het misbruiken van de kwetsbaarheid van februari. Na de vervanging werd de uitvoeringsvergrendeling van de eerste instantie verwijderd en kregen de aanvallers volledige controle over de snaproot-map.

De laatste stap was het maken van een symlink /tmp/snap.rootfs_XXXXXX/tmp, die werd gebruikt door de functie sc_bootstrap_mount_namespace() om de beschrijfbare echte map /tmp aan een willekeurige map in het bestandssysteem te koppelen, sinds de aanroep van mount() volgt symlinks vóór montage. Een dergelijke montage wordt geblokkeerd door AppArmor-beperkingen, maar om deze blokkering te omzeilen, maakte de exploit gebruik van twee aanvullende kwetsbaarheden in multipathd.

Bron: opennet.ru

Voeg een reactie