PolKit ranjivost je omogućila da se dobije root pristup na većini Linux distribucija

Nedavno Qualy's objavio vijest da je identifikovao ranjivost (CVE-2021-4034) en komponentu sistema polkit (ranije PolicyKit), koji se koristi u distribucijama kako bi se omogućilo neprivilegiranim korisnicima da izvode radnje koje zahtijevaju povišena prava pristupa.

Ranjivost omogućava neprivilegovanom lokalnom korisniku da podigne svoje privilegije na root korisnika i steći potpunu kontrolu nad sistemom. Problem je kodnog naziva PwnKit i značajan je po stvaranju radnog exploit-a koji radi u zadanoj konfiguraciji na većini Linux distribucija.

To se spominje problem postoji u pkexec uslužnom programu uključenom u PolKit, koji dolazi sa SUID root zastavicom i dizajniran je da izvršava komande uz privilegije drugih korisnika prema PolKit pravilima.

Zbog nepravilne obrade argumenata iz komandne linije proslijeđene na pkexec, a neprivilegirani korisnik mogao bi zaobići autentifikaciju i pokrenuti vaš kod kao root, bez obzira na utvrđena pravila pristupa. Za napad, bez obzira koja su podešavanja i ograničenja postavljena u PolKit-u, dovoljno je da je SUID root atribut postavljen za izvršnu datoteku pomoću pkexec uslužnog programa.

Pkexec ne provjerava ispravnost broja argumenata komandne linije (argc) koji je proslijeđen prilikom pokretanja procesa. Programeri pkexec-a pretpostavili su da prvi unos u argv nizu uvijek sadrži ime procesa (pkexec), a drugi unos je NULL ili ime naredbe koja se izvršava preko pkexec-a.

Pošto brojač argumenata nije uspoređen sa stvarnim sadržajem niza i pretpostavlja se da je uvijek veći od 1, ako je prazan argv niz proslijeđen procesu, što Linux execve funkcija dozvoljava, pkexec je tretirao NULL kao prvi argument ( ime procesa), a sljedeće poslije bez memorijskog bafera, kao sljedeći sadržaj niza.

Problem je u tome što se iza argv niza u memoriji nalazi envp niz koji sadrži varijable okruženja. Stoga, sa praznim argv nizom, pkexec izdvaja podatke o naredbi koja se izvršava sa povišenim privilegijama iz prvog elementa niza sa varijablama okruženja (argv[1] je postao identičan envp[0]), čijim se sadržajem može kontrolisati napadača.

Nakon što je primio vrijednost argv[1], pkexec pokušava odrediti punu putanju do izvršne datoteke koristeći putanje datoteke u PATH i upisuje pokazivač na niz s punom putanjom natrag do argv[1], što dovodi do prepisivanja vrijednosti i prva varijabla okruženja, pošto je argv[1] identičan envp[0]. Manipulirajući imenom prve varijable okruženja, napadač može zamijeniti drugu varijablu okruženja u pkexec-u, na primjer, zamijeniti varijablu okruženja "LD_PRELOAD", koja nije dozvoljena u suid programima, i uzrokovati da proces učita svoju zajedničku biblioteku u proces.

Radni exploit koristi zamjenu varijable GCONV_PATH, koja se koristi za određivanje putanje do biblioteke za transkodiranje simbola koja se dinamički učitava kada pozovete funkciju g_printerr(), koja koristi iconv_open() u vašem kodu.

Redefinisanjem putanje u GCONV_PATH, napadač može uspeti da učita ne normalnu biblioteku iconv, već svoju sopstvenu biblioteku, čiji će drajveri biti izvršeni tokom poruke o grešci u fazi kada pkexec još uvek radi kao root i pre verifikacije dozvole za pokretanje.

Primjećuje se da, iako je problem uzrokovan oštećenjem memorije, može se pouzdano i ponovljeno iskoristiti, bez obzira na korišćenu hardversku arhitekturu.

Eksploatacija pripremljena uspješno testiran na Ubuntu, Debian, Fedora i CentOS, ali se može koristiti i u drugim distribucijama. Originalni exploit još nije javno dostupan, što ukazuje da je trivijalan i da ga drugi istraživači mogu lako rekreirati, tako da je važno instalirati ažuriranje hitne ispravke što je prije moguće na višekorisničkim sistemima.

Polkit je takođe dostupan za BSD i Solaris sisteme, ali nije istražen za eksploataciju. Ono što je poznato je da se napad ne može izvesti na OpenBSD, pošto OpenBSD kernel ne dozvoljava prosljeđivanje null argc vrijednosti prilikom pozivanja execve().

Problem je prisutan od maja 2009. godine kada je dodana komanda pkexec. Ispravka za ranjivost u PolKit-u je još uvijek dostupna kao zakrpa (verzija popravka nije formirana), ali budući da su programeri distribucije unaprijed obaviješteni o problemu, većina distribucija je objavila ažuriranje u isto vrijeme kada je otkrivena ranjivost informacije.

Konačno ako ste zainteresirani da saznate više o tome, detalje možete provjeriti u sljedeći link.


Ostavite komentar

Vaša e-mail adresa neće biti objavljena. Obavezna polja su označena sa *

*

*

  1. Za podatke odgovoran: Miguel Ángel Gatón
  2. Svrha podataka: Kontrola neželjene pošte, upravljanje komentarima.
  3. Legitimacija: Vaš pristanak
  4. Komunikacija podataka: Podaci se neće dostavljati trećim stranama, osim po zakonskoj obavezi.
  5. Pohrana podataka: Baza podataka koju hostuje Occentus Networks (EU)
  6. Prava: U bilo kojem trenutku možete ograničiti, oporaviti i izbrisati svoje podatke.