En sikkerhedsforsker af GitHub gjort det kendt for nylig du har identificeret en sårbarhed (CVE-2020-16125) i GNOME Display Manager (GDM), som er ansvarlig for at vise loginskærmen.
Kombineret med en anden sårbarhed i kontosporingstjenesten (kontodæmon), problemet tillader koden at køre som root. Sårbarheden er forbundet med den forkerte start af det oprindelige konfigurationsværktøj, hvis det er umuligt at få adgang til kontodæmontjenesten via DBus.
Om sårbarhed
En uprivilegeret bruger kan gå ned i kontoudemon-processen eller læg på, hvad der vil skabe betingelserne for at gnome-initial-setup-værktøjet køres fra GDM, hvorigennem en ny bruger kan registrere sig som medlem af sudo-gruppen, dvs. have evnen til at køre programmer som root.
normalt, GDM kalder gnome-initial-setup for at indstille den første bruger hvis der ikke er nogen konti i systemet. Bekræftelse af eksistensen af konti sker ved at kontakte accounts-daemon. Hvis den angivne proces mislykkes, antager GDM, at kontiene mangler, og starter den indledende konfigurationsproces.
Forskeren identificerede to måder at forstyrre daemon-kontoprocessen på- Den første (CVE-2020-16126) skyldes forkert nulstilling af rettigheder og den anden (CVE-2020-16127) fejl under behandling af en ".pam_environment" -fil.
Derudover en anden sårbarhed blev fundet i dæmonkonti (CVE-2018-14036) forårsaget af forkerte filsti-kontrol og tillader indholdet af vilkårlige filer at blive læst på systemet.
Sårbarhederne i kontodæmonen skyldes ændringer foretaget af Ubuntu-udviklere og vises ikke i hovedkontodæmonkoden i FreeDesktop-projektet og Debian-pakken.
CVE-2020-16127-problemet er til stede i en patch tilføjet i Ubuntu, der implementerer is_in_pam_environment-funktionen, som læser indholdet af .pam_environment-filen fra brugerens hjemmekatalog. Hvis du sætter et symbolsk link til / dev / zero i stedet for denne fil, hænger konto-dæmonprocessen på uendelige læseoperationer og holder op med at svare på anmodninger via DBus.
Det er usædvanligt, at en sårbarhed i et moderne operativsystem er så let at udnytte. Ved nogle lejligheder har jeg skrevet tusindvis af linjer med kode for at udnytte en sårbarhed.
De fleste moderne udnyttelser involverer komplicerede tricks, såsom at bruge en hukommelseskorruptionssårbarhed til at falske falske objekter i bunken eller erstatte en fil med et symlink til mikrosekunders præcision for at udnytte en TOCTOU-sårbarhed.
Så i disse dage er det relativt sjældent at finde en sårbarhed, der ikke kræver kodningsfærdigheder at udnytte. Jeg synes også, at sårbarheden er let at forstå, selvom du ikke har nogen forudgående viden om, hvordan Ubuntu fungerer eller har erfaring med sikkerhedsforskning.
CVE-2020-16126 sårbarhed er forårsaget af en anden patch der nulstiller den aktuelle brugers rettigheder under behandling af nogle DBus-opkald (f.eks. org.freedesktop.Accounts.User.SetLanguage).
Kontodemon-processen kører normalt som root, hvilket forhindrer en normal bruger i at sende signaler.
Men takket være den tilføjede patch, procesrettigheder kan nulstilles og brugeren kan afslutte denne proces ved at sende et signal. For at udføre et angreb skal du blot oprette betingelserne for at fjerne privilegier (RUID) og sende et SIGSEGV- eller SIGSTOP-signal til konto-dæmonprocessen.
Brugeren afslutter den grafiske session og går til tekstkonsollen (Ctrl-Alt-F1).
Når den grafiske session er afsluttet, forsøger GDM at vise loginskærmen, men hænger, når du prøver at få et svar fra kontodæmonen.
SIGSEGV- og SIGCONT-signalerne sendes fra konsollen til konto-dæmonprocessen og får den til at hænge.
Du kan også sende signaler, før du afslutter den grafiske session, men du skal gøre det med en forsinkelse for at have tid til at afslutte sessionen, og før signalet sendes, havde GDM tid til at starte.
Anmodningen til kontoudemonen i GDM mislykkes, og GDM kalder hjælpeprogrammet gnome-initial-setup, i hvis interface det er tilstrækkeligt at oprette en ny konto.
Sårbarheden er rettet i GNOME 3.36.2 og 3.38.2. Udnyttelse af sårbarheden er bekræftet i Ubuntu og dets derivater.
kilde: https://securitylab.github.com