En PolKit-sårbarhed gjorde det muligt at opnå root-adgang på de fleste Linux-distributioner

nylig Qualy's udsendte nyheden om, at har identificeret en sårbarhed (CVE-2021-4034) en systemkomponent polkit (tidligere PolicyKit), som bruges i distributioner for at tillade uprivilegerede brugere at udføre handlinger, der kræver forhøjede adgangsrettigheder.

Sårbarhed tillader en uprivilegeret lokal bruger at ophøje deres privilegier til root-brugeren og få fuld kontrol over systemet. Problemet er kodenavnet PwnKit og er kendt for at producere en fungerende udnyttelse, der kører som standard på de fleste Linux-distributioner.

Det nævnes det problemet eksisterer i pkexec-værktøjet, der følger med PolKit, som kommer med SUID-rodflaget og er designet til at udføre kommandoer med andre brugeres privilegier i henhold til PolKit-reglerne.

På grund af forkert håndtering af argumenter fra kommandolinjen videregivet til pkexec, en uprivilegeret bruger kunne omgå godkendelse og få din kode til at køre som root, uanset de fastsatte adgangsregler. For et angreb, uanset hvilke indstillinger og begrænsninger der er angivet i PolKit, er det nok, at SUID-rodattributten er indstillet til den eksekverbare fil med pkexec-værktøjet.

Pkexec kontrollerer ikke rigtigheden af antallet af kommandolinjeargumenter (argc), der blev bestået ved start af en proces. Pkexec-udviklerne antog, at den første post i argv-arrayet altid indeholder navnet på processen (pkexec), og den anden post er NULL eller navnet på kommandoen, der udføres via pkexec.

Da argumenttælleren ikke blev kontrolleret mod det faktiske indhold af arrayet og altid blev antaget at være større end 1, hvis et tomt argv-array blev sendt til processen, hvilket Linux's execve-funktion tillader, behandlede pkexec NULL som det første argument (procesnavn), og det næste efter ude af bufferhukommelsen, som det næste indhold af arrayet.

Problemet er, at efter argv-arrayet i hukommelsen er envp-arrayet, der indeholder miljøvariablerne. Med et tomt argv-array udtrækker pkexec således dataene om kommandoen, der udføres med forhøjede privilegier, fra det første element i arrayet med miljøvariabler (argv[1] blev identisk med envp[0]), hvis indhold kan kontrolleres af angriberen.

Efter at have modtaget værdien argv[1], forsøger pkexec at bestemme den fulde sti til den eksekverbare fil ved hjælp af filstierne i PATH og skriver markøren til strengen med den fulde sti tilbage til argv[1], hvilket også fører til overskrivning af værdien af ​​den første miljøvariabel, da argv[1] er identisk med envp[0]. Ved at manipulere navnet på den første miljøvariabel kan en angriber erstatte en anden miljøvariabel i pkexec, for eksempel erstatte "LD_PRELOAD" miljøvariablen, som ikke er tilladt i suid-programmer, og få processen til at indlæse dets delte bibliotek i processen.

Den arbejdende udnyttelse bruger GCONV_PATH variabel substitution, som bruges til at bestemme stien til symbolomkodningsbiblioteket, som indlæses dynamisk, når funktionen g_printerr() kaldes, som bruger iconv_open() i sin kode.

Ved at omdefinere stien i GCONV_PATH kan angriberen nå at indlæse ikke det normale iconv-bibliotek, men hans eget bibliotek, hvis handlere vil blive udført under fejlmeddelelsen på det stadie, hvor pkexec stadig kører som root, og før kontrollen af ​​opstartstilladelser.

Det bemærkes, at Selvom problemet skyldes hukommelseskorruption, kan det udnyttes på en pålidelig og gentagelig måde, uanset den anvendte hardwarearkitektur.

Den udnyttede forberedt med succes testet på Ubuntu, Debian, Fedora og CentOS, men den kan også bruges i andre distributioner. Den originale udnyttelse er endnu ikke offentlig tilgængelig, hvilket indikerer, at den er triviel og let kan genskabes af andre forskere, så det er vigtigt at installere patchopdateringen så hurtigt som muligt på flerbrugersystemer.

Polkit er også tilgængelig til BSD- og Solaris-systemer, men er ikke blevet undersøgt med henblik på udnyttelse. Hvad der er kendt er, at angrebet ikke kan udføres på OpenBSD, da OpenBSD-kernen ikke tillader at sende en argc null-værdi, når execve() kaldes.

Problemet har eksisteret siden maj 2009, da kommandoen pkexec blev tilføjet. Sårbarhedsrettelsen i PolKit er stadig tilgængelig som en patch (rettelsesversionen er ikke blevet dannet), men da udviklerne af distributionen blev underrettet på forhånd om problemet, udgav de fleste distributioner en opdatering samtidig med offentliggørelsen af ​​oplysninger om sårbarheden.

Endelig hvis du er interesseret i at vide mere om det, kan du tjekke detaljerne i følgende link.


Efterlad din kommentar

Din e-mailadresse vil ikke blive offentliggjort. Obligatoriske felter er markeret med *

*

*

  1. Ansvarlig for dataene: Miguel Ángel Gatón
  2. Formålet med dataene: Control SPAM, management af kommentarer.
  3. Legitimering: Dit samtykke
  4. Kommunikation af dataene: Dataene vil ikke blive kommunikeret til tredjemand, undtagen ved juridisk forpligtelse.
  5. Datalagring: Database hostet af Occentus Networks (EU)
  6. Rettigheder: Du kan til enhver tid begrænse, gendanne og slette dine oplysninger.