Kritisk sÄrbarhet i PolKit som gör det möjligt att fÄ root-Ätkomst i de flesta Linux-distributioner

Företaget Qualys har upptÀckt en sÄrbarhet (CVE-2021-4034) i systemkomponenten Polkit (tidigare PolicyKit), som anvÀnds i distributioner för att möjliggöra icke-privilegierade anvÀndare att utföra ÄtgÀrder som krÀver höga rÀttigheter. SÄrbarheten gör att en icke-privilegierad lokal anvÀndare kan höja sina privilegier till root-anvÀndare och fÄ full kontroll över systemet. Problemet har kodnamnet PwnKit och Àr anmÀrkningsvÀrt för att ha förberett en fungerande exploit som fungerar med standardkonfigurationen i de flesta Linux-distributioner.

Problemet finns i verktyget pkexec som ingÄr i PolKit, som levereras med SUID root-flagga och Àr avsett för att köra kommandon med privilegier frÄn en annan anvÀndare i enlighet med de angivna reglerna i PolKit. PÄ grund av felaktig hantering av de argument som skickas till pkexec kunde en icke-privilegierad anvÀndare kringgÄ autentisering och fÄ sitt kod att köras med root-rÀttigheter, oavsett vilka Ätkomstregler som Àr instÀllda. För att attacken ska lyckas spelar det ingen roll vilka instÀllningar och begrÀnsningar som finns i PolKit, det rÀcker att filen för pkexec har SUID root-flaggan aktiv.

Pkexec kontrollerar inte korrekt argumentrÀknaren (argc) som skickas vid körning av processen. Utvecklarna av pkexec förutsatte att den första posten av arrayen argv alltid innehöll processens namn (pkexec), och den andra antingen vÀrdet NULL eller namnet pÄ kommandot som körs via pkexec. Eftersom argumentrÀknaren inte kontrollerades mot det faktiska innehÄllet i arrayen och man förlitade sig pÄ att den alltid var större Àn 1, i fall av att ett tomt array argv skickades till processen, vilket funktionen execve i Linux tillÄter, tolkade pkexec vÀrdet NULL som det första argumentet (processens namn) och minnet bortom bufferten som det efterföljande innehÄllet i arrayen.

Problemet Àr att direkt efter arrayen argv i minnet placeras arrayen envp, som innehÄller miljövariabler. DÀrmed, nÀr arrayen argv Àr tom, hÀmtar pkexec information om kommandot som körs med förhöjda privilegier frÄn det första elementet i miljövariabelarrayen (argv[1] blir identisk med envp[0]), vars innehÄll kan kontrolleras av en angripare.

NÀr pkexec fÄr vÀrdet av argv[1], försöker det, med hÀnsyn till filvÀgar i PATH, att bestÀmma den fullstÀndiga sökvÀgen till körbar fil och skriva pekaren till strÀngen med den fullstÀndiga sökvÀgen tillbaka till argv[1], vilket leder till att vÀrdet av den första miljövariabeln skrivs över, eftersom argv[1] Àr identisk med envp[0]. Genom att manipulera namnet pÄ den första miljövariabeln kan angriparen göra en substitution av en annan miljövariabel i pkexec, till exempel substituera miljövariabeln 'LD_PRELOAD', som inte tillÄts i suid-program, och organisera inladdning av sitt eget delade bibliotek i processen.

I det fungerande utnyttjandet görs en substitution av miljövariabeln GCONV_PATH, som anvÀnds för att bestÀmma sökvÀgen till biblioteket för teckenkodning som dynamiskt laddas vid anrop av funktionen g_printerr(), i vilken iconv_open() anvÀnds. Genom att ÄsidosÀtta sökvÀgen i GCONV_PATH kan angriparen fÄ laddning av ett icke-standardbibliotek för iconv, utan sitt eget bibliotek vars handtag kommer att utföras nÀr ett felmeddelande visas under den tid som pkexec fortfarande körs med root-rÀttigheter och innan behörighetskontrollen för körning.

Det noteras att trots att problemet orsakas av minneskorruption, kan det pÄ ett tillförlitligt och repeterbart sÀtt utnyttjas oavsett vilken hÄrdvaruarkitektur som anvÀnds. Den förberedda exploiten har framgÄngsrikt testats pÄ Ubuntu, Debian, Fedora och CentOS, men kan Àven anvÀndas pÄ andra distributioner. Den ursprungliga exploiten Àr Ànnu inte tillgÀnglig offentligt, vilket tyder pÄ att den Àr trivial och kan enkelt Äterskapas av andra forskare, dÀrför Àr det viktigt att installera patchen sÄ snart som möjligt pÄ flersystem. Polkit Àr ocksÄ tillgÀngligt för BSD-system och Solaris, men möjligheten till utnyttjande i dessa har inte undersökts. Det Àr endast kÀnt att attacken inte kan genomföras i OpenBSD, eftersom OpenBSD-kÀrnan inte tillÄter överföring av nollvÀrde för argc vid anrop av execve().

Problemet har funnits sedan maj 2009, dÄ kommandot pkexec lades till. En patch för att ÄtgÀrda sÄrbarheten i PolKit Àr för nÀrvarande tillgÀnglig, men eftersom utvecklarna av distributioner har blivit informerade om problemet i förvÀg, publicerade de flesta distributioner en uppdatering samtidigt med att informationen om sÄrbarheten offentliggjordes. Problemet Àr ÄtgÀrdat i RHEL 6/7/8, Debian, Ubuntu, openSUSE, SUSE, Fedora, ALT Linux, ROSA, Gentoo, Void Linux, Arch Linux och Manjaro. Som en tillfÀllig ÄtgÀrd för att blockera sÄrbarheten kan SUID-root-flaggan tas bort frÄn programmet /usr/bin/pkexec ("chmod 0755 /usr/bin/pkexec").



KĂ€lla: opennet.ru
Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster