En PolKit-sårbarhet tillot root-tilgang på de fleste Linux-distribusjoner

nylig Qualy sin ga ut nyheten om at har identifisert en sårbarhet (CVE-2021-4034) en systemkomponent polkit (tidligere PolicyKit), som brukes i distribusjoner for å la ikke-privilegerte brukere utføre handlinger som krever økte tilgangsrettigheter.

Sårbarhet lar en uprivilegert lokal bruker heve rettighetene sine til rotbrukeren og få full kontroll over systemet. Problemet er kodenavnet PwnKit og er kjent for å produsere en fungerende utnyttelse som kjører i standardinnstillinger på de fleste Linux-distribusjoner.

Det er nevnt at problemet eksisterer i pkexec-verktøyet som følger med PolKit, som kommer med SUID-rotflagget og er designet for å kjøre kommandoer med rettighetene til andre brukere i henhold til PolKit-reglene.

På grunn av feil håndtering av argumenter fra kommandolinjen sendt til pkexec, en ikke-privilegert bruker kan omgå autentisering og få koden din til å kjøre som root, uavhengig av de etablerte tilgangsreglene. For et angrep, uansett hvilke innstillinger og restriksjoner som er satt i PolKit, er det nok at SUID-rotattributtet for den kjørbare filen er satt med pkexec-verktøyet.

Pkexec sjekker ikke riktigheten av antallet kommandolinjeargumenter (argc) som ble bestått når en prosess startet. Pkexec-utviklerne antok at den første oppføringen i argv-matrisen alltid inneholder navnet på prosessen (pkexec), og den andre oppføringen er enten NULL eller navnet på kommandoen utført gjennom pkexec.

Siden argumentantallet ikke ble sammenlignet med det faktiske innholdet i matrisen og ble antatt å alltid være større enn 1, hvis en tom argv-matrise ble sendt til prosessen, som Linuxs execve-funksjon tillater, behandlet pkexec NULL som det første argumentet ( prosess navn), og den neste etter uten bufferminne, som neste matriseinnhold.

Problemet er at etter argv-matrisen i minnet er envp-matrisen som inneholder miljøvariablene. Med en tom argv-matrise trekker pkexec ut dataene om kommandoen som utføres med forhøyede rettigheter fra det første elementet i matrisen med miljøvariabler (argv[1] ble identisk med envp[0]), hvis innhold kan kontrolleres av angriperen.

Etter å ha mottatt verdien argv[1], prøver pkexec å bestemme hele banen til den kjørbare filen ved å bruke filbanene i PATH og skriver pekeren til strengen med hele banen tilbake til argv[1], noe som fører til overskriving av verdien av den første miljøvariabelen også, siden argv[1] er identisk med envp[0]. Ved å manipulere navnet på den første miljøvariabelen, kan en angriper erstatte en annen miljøvariabel i pkexec, for eksempel erstatte "LD_PRELOAD" miljøvariabelen, som ikke er tillatt i suid-programmer, og få prosessen til å laste inn det delte biblioteket i prosessen .

Arbeidsutnyttelsen bruker GCONV_PATH variabelsubstitusjon, som brukes til å bestemme banen til symbolomkodingsbiblioteket som lastes dynamisk når g_printerr()-funksjonen kalles, som bruker iconv_open() i koden.

Ved å redefinere banen i GCONV_PATH, kan angriperen klare å laste ikke det vanlige iconv-biblioteket, men sitt eget bibliotek, hvis drivere vil bli utført under feilmeldingen på stadiet der pkexec fortsatt kjører som root og før verifisering av oppstartstillatelser.

Det observeres at, Selv om problemet skyldes minnekorrupsjon, kan det utnyttes pålitelig og gjentatte ganger, uavhengig av maskinvarearkitekturen som brukes.

Utnyttelsen forberedt vellykket testet på Ubuntu, Debian, Fedora og CentOS, men kan også brukes på andre distribusjoner. Den opprinnelige utnyttelsen er ennå ikke offentlig tilgjengelig, noe som indikerer at den er triviell og lett kan gjenskapes av andre forskere, så det er viktig å installere hurtigreparasjonsoppdateringen så snart som mulig på flerbrukersystemer.

Polkit er også tilgjengelig for BSD- og Solaris-systemer, men har ikke blitt utforsket for utnyttelse. Det som er kjent er at angrepet ikke kan utføres på OpenBSD, siden OpenBSD-kjernen ikke tillater overføring av en null argc-verdi når man kaller execve().

Problemet har eksistert siden mai 2009 da pkexec-kommandoen ble lagt til. Reparasjonen for sårbarheten i PolKit er fortsatt tilgjengelig som en patch (fixversjonen er ikke opprettet), men siden utviklerne av distribusjonen ble varslet om problemet på forhånd, ga de fleste distribusjoner ut en oppdatering samtidig. enn avsløring av sårbarhetsinformasjon.

Endelig hvis du er interessert i å vite mer om det, kan du sjekke detaljene i følgende lenke.


Legg igjen kommentaren

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *

*

*

  1. Ansvarlig for dataene: Miguel Ángel Gatón
  2. Formålet med dataene: Kontroller SPAM, kommentaradministrasjon.
  3. Legitimering: Ditt samtykke
  4. Kommunikasjon av dataene: Dataene vil ikke bli kommunisert til tredjeparter bortsett fra ved juridisk forpliktelse.
  5. Datalagring: Database vert for Occentus Networks (EU)
  6. Rettigheter: Når som helst kan du begrense, gjenopprette og slette informasjonen din.