Lokale root-kwetsbaarheden in de Snap-pakketbeheertoolkit

Qualys heeft twee kwetsbaarheden (CVE-2021-44731, CVE-2021-44730) geïdentificeerd in het snap-confine-hulpprogramma, geleverd met de SUID-rootvlag en aangeroepen door het snapd-proces om een ​​uitvoerbare omgeving te creëren voor applicaties die in op zichzelf staande pakketten worden geleverd. in het snap-formaat. Door de kwetsbaarheden kan een lokale gebruiker zonder rechten code met rootrechten op het systeem uitvoeren. De problemen zijn opgelost in de snapd-pakketupdate van vandaag voor Ubuntu 21.10, 20.04 en 18.04.

De eerste kwetsbaarheid (CVE-2021-44730) maakt een aanval mogelijk via manipulatie van harde links, maar vereist het uitschakelen van de harde linkbescherming van het systeem (door sysctl fs.protected_hardlinks in te stellen op 0). Het probleem wordt veroorzaakt door een onjuiste verificatie van de locatie van de uitvoerbare bestanden van de hulpprogramma's snap-update-ns en snap-discard-ns die als root worden uitgevoerd. Het pad naar deze bestanden werd berekend in de functie sc_open_snapd_tool() op basis van zijn eigen pad vanuit /proc/self/exe, waarmee u een harde link kunt maken om in uw map te klikken en uw eigen versies van de snap-confine te plaatsen. update-ns en snap-hulpprogramma's in deze map dislike-ns. Nadat het via een harde link is uitgevoerd, zal snap-confine met rootrechten de bestanden snap-update-ns en snap-discard-ns starten vanuit de huidige map, vervangen door de aanvaller.

De tweede kwetsbaarheid wordt veroorzaakt door een race condition en kan worden misbruikt in de standaard Ubuntu Desktop-configuratie. Om de exploit succesvol te laten werken in Ubuntu Server, moet u tijdens de installatie een van de pakketten selecteren uit de sectie "Featured Server Snaps". De raceconditie is duidelijk zichtbaar in de functie setup_private_mount() die wordt aangeroepen tijdens de voorbereiding van de mountpuntnaamruimte voor het snappakket. Deze functie maakt een tijdelijke map “/tmp/snap.$SNAP_NAME/tmp” aan of gebruikt een bestaande map om daarin mappen te koppelen voor een snap-pakket.

Omdat de naam van de tijdelijke directory voorspelbaar is, kan een aanvaller de inhoud ervan vervangen door een symbolische link nadat hij de eigenaar heeft gecontroleerd, maar voordat hij de mount-systeemaanroep aanroept. U kunt bijvoorbeeld een symlink "/tmp/snap.lxd/tmp" maken in de map /tmp/snap.lxd die naar een willekeurige map verwijst, en een aanroep naar mount() volgt de symlink en koppelt de map in de map snap-naamruimte. Op een vergelijkbare manier kunt u uw inhoud aankoppelen in /var/lib en, door /var/lib/snapd/mount/snap.snap-store.user-fstab te vervangen, de aankoppeling van uw map /etc organiseren in de naamruimte van het snap-pakket om het laden van uw bibliotheek met rootrechten te organiseren door /etc/ld.so.preload te vervangen.

Opgemerkt wordt dat het creëren van een exploit een niet-triviale taak bleek te zijn, aangezien het snap-confine-hulpprogramma in Go is geschreven met behulp van veilige programmeertechnieken, bescherming biedt op basis van AppArmor-profielen, systeemaanroepen filtert op basis van het seccomp-mechanisme en gebruik maakt van de mount-naamruimte voor isolatie. De onderzoekers waren echter in staat een werkende exploit voor te bereiden om rootrechten op het systeem te verkrijgen. De exploitcode wordt binnen enkele weken gepubliceerd nadat gebruikers de meegeleverde updates hebben geïnstalleerd.

Bron: opennet.ru

Voeg een reactie