Lokala rotsårbarheter i Snap-pakethanteringsverktyget

Qualys har identifierat två sårbarheter (CVE-2021-44731, CVE-2021-44730) i snap-confine-verktyget, som levereras med SUID-rotflaggan och anropas av snapd-processen för att skapa en körbar miljö för applikationer som levereras i fristående paket i snap-format. Sårbarheterna tillåter en lokal oprivilegierad användare att exekvera kod med root-privilegier på systemet. Problemen är lösta i dagens snapd-paketuppdatering för Ubuntu 21.10, 20.04 och 18.04.

Den första sårbarheten (CVE-2021-44730) tillåter en attack genom hårdlänksmanipulation, men kräver att systemets hårdlänkskydd avaktiveras (ställ sysctl fs.protected_hardlinks till 0). Problemet orsakas av felaktig verifiering av platsen för de körbara filerna för hjälpprogrammen snap-update-ns och snap-discard-ns som körs som root. Sökvägen till dessa filer beräknades i sc_open_snapd_tool()-funktionen baserat på dess egen sökväg från /proc/self/exe, som låter dig skapa en hårdlänk för att snap-confine i din katalog och placera dina egna versioner av snap- update-ns och snap- utilities i den här katalogen discard-ns. Efter att ha körts via en hård länk kommer snap-confine med roträttigheter att starta snap-update-ns och snap-discard-ns-filerna från den aktuella katalogen, ersatt av angriparen.

Den andra sårbarheten orsakas av ett rastillstånd och kan utnyttjas i standardkonfigurationen för Ubuntu Desktop. För att exploateringen ska fungera framgångsrikt i Ubuntu Server måste du välja ett av paketen från avsnittet "Utvalda Server Snaps" när du installerar. Race-villkoret är uppenbart i setup_private_mount()-funktionen som anropas under förberedelsen av monteringspunktens namnutrymme för snap-paketet. Den här funktionen skapar en tillfällig katalog "/tmp/snap.$SNAP_NAME/tmp" eller använder en befintlig för att binda-montera kataloger för ett snappaket i den.

Eftersom namnet på den tillfälliga katalogen är förutsägbart, kan en angripare ersätta dess innehåll med en symbolisk länk efter att ha kontrollerat ägaren, men innan anropet mount systemanropet. Till exempel kan du skapa en symbollänk "/tmp/snap.lxd/tmp" i katalogen /tmp/snap.lxd som pekar på en godtycklig katalog, och ett anrop till mount() kommer att följa symbollänken och montera katalogen i snap namnutrymme. På liknande sätt kan du montera ditt innehåll i /var/lib och, genom att ersätta /var/lib/snapd/mount/snap.snap-store.user-fstab, organisera monteringen av din /etc-katalog i namnutrymmet för snap-paketet för att organisera laddningen av ditt bibliotek från med roträttigheter genom att ersätta /etc/ld.so.preload.

Det noteras att att skapa en exploit visade sig vara en icke-trivial uppgift, eftersom snap-confine-verktyget är skrivet i Go med säkra programmeringstekniker, har skydd baserat på AppArmor-profiler, filtrerar systemanrop baserat på seccomp-mekanismen och använder monteringsnamnutrymmet för isolering. Men forskarna kunde förbereda en fungerande exploatering för att få roträttigheter på systemet. Exploateringskoden kommer att publiceras inom några veckor efter att användarna har installerat de medföljande uppdateringarna.

Källa: opennet.ru

Lägg en kommentar