Door een PolKit-kwetsbaarheid kon root-toegang worden verkregen op de meeste Linux-distributies

onlangs Qualy's het nieuws vrijgegeven dat heeft een kwetsbaarheid vastgesteld (CVE-2021-4034) en systeemcomponent polkit (voorheen PolicyKit), die wordt gebruikt in distributies om niet-bevoorrechte gebruikers acties uit te laten voeren waarvoor verhoogde toegangsrechten vereist zijn.

Kwetsbaarheid staat een niet-bevoorrechte lokale gebruiker toe om hun privileges te verhogen naar de root-gebruiker en volledige controle over het systeem te krijgen. Het probleem heeft de codenaam PwnKit en is opmerkelijk vanwege het produceren van een werkende exploit die in de standaardinstellingen op de meeste Linux-distributies wordt uitgevoerd.

Er wordt gezegd dat het probleem bestaat in het pkexec-hulpprogramma dat bij PolKit wordt geleverd, die wordt geleverd met de SUID-rootvlag en is ontworpen om opdrachten uit te voeren met de privileges van andere gebruikers volgens PolKit-regels.

Door verkeerde behandeling van argumenten vanaf de opdrachtregel doorgegeven aan pkexec, a niet-bevoorrechte gebruiker kan authenticatie omzeilen en uw code als root laten uitvoeren, ongeacht de vastgestelde toegangsregels. Voor een aanval, ongeacht welke instellingen en beperkingen zijn ingesteld in PolKit, is het voldoende dat het SUID-rootkenmerk voor het uitvoerbare bestand wordt ingesteld met het hulpprogramma pkexec.

Pkexec controleert de juistheid niet van het aantal opdrachtregelargumenten (argc) dat is doorgegeven bij het starten van een proces. De ontwikkelaars van pkexec gingen ervan uit dat het eerste item in de argv-array altijd de naam van het proces (pkexec) bevat en dat het tweede item NULL is of de naam van de opdracht die via pkexec wordt uitgevoerd.

Aangezien het aantal argumenten niet werd vergeleken met de werkelijke inhoud van de array en werd aangenomen dat het altijd groter was dan 1, als een lege argv-array aan het proces werd doorgegeven, wat de execve-functie van Linux toestaat, behandelde pkexec NULL als het eerste argument ( proces name), en de volgende na onvoldoende buffergeheugen, als de volgende array-inhoud.

Het probleem is dat na de argv-array in het geheugen de envp-array is die de omgevingsvariabelen bevat. Dus, met een lege argv-array, extraheert pkexec de gegevens over de opdracht die wordt uitgevoerd met verhoogde privileges van het eerste element van de array met omgevingsvariabelen (argv[1] werd identiek aan envp[0]), waarvan de inhoud kan worden gecontroleerd door de aanvaller.

Nadat de waarde argv[1] is ontvangen, probeert pkexec het volledige pad naar het uitvoerbare bestand te bepalen met behulp van de bestandspaden in PATH en schrijft de aanwijzer naar de tekenreeks met het volledige pad terug naar argv[1], wat leidt tot het overschrijven van de waarde van de eerste omgevingsvariabele, aangezien argv[1] identiek is aan envp[0]. Door de naam van de eerste omgevingsvariabele te manipuleren, kan een aanvaller een andere omgevingsvariabele in pkexec vervangen, bijvoorbeeld de omgevingsvariabele "LD_PRELOAD", wat niet is toegestaan ​​in suid-programma's, en het proces zijn gedeelde bibliotheek laten laden in het proces .

De werkende exploit maakt gebruik van GCONV_PATH variabele substitutie, die wordt gebruikt om het pad te bepalen naar de symbooltranscoderingsbibliotheek die dynamisch wordt geladen wanneer de functie g_printerr() wordt aangeroepen, die iconv_open() in zijn code gebruikt.

Door het pad in GCONV_PATH opnieuw te definiëren, kan de aanvaller erin slagen om niet de normale iconv-bibliotheek te laden, maar zijn eigen bibliotheek, waarvan de stuurprogramma's worden uitgevoerd tijdens de foutmelding in het stadium waarin pkexec nog steeds als root draait en vóór verificatie van opstartrechten.

Opgemerkt wordt dat, hoewel het probleem te wijten is aan geheugenbeschadiging, kan het betrouwbaar en herhaaldelijk worden misbruikt, ongeacht de gebruikte hardware-architectuur.

De exploit voorbereid succesvol getest op Ubuntu, Debian, Fedora en CentOS, maar kan ook op andere distributies worden gebruikt. De originele exploit is nog niet publiekelijk beschikbaar, wat aangeeft dat het triviaal is en gemakkelijk opnieuw kan worden gemaakt door andere onderzoekers, dus het is belangrijk om de hotfix-update zo snel mogelijk te installeren op systemen met meerdere gebruikers.

Polkit is ook beschikbaar voor BSD- en Solaris-systemen, maar is niet onderzocht voor exploitatie. Wat wel bekend is, is dat de aanval niet kan worden uitgevoerd op OpenBSD, aangezien de OpenBSD-kernel niet toestaat dat een null argc-waarde wordt doorgegeven bij het aanroepen van execve().

Het probleem bestaat al sinds mei 2009, toen de opdracht pkexec werd toegevoegd. De fix voor de kwetsbaarheid in PolKit is nog steeds beschikbaar als patch (de fixversie is niet gevormd), maar aangezien de ontwikkelaars van de distributie van tevoren op de hoogte waren van het probleem, brachten de meeste distributies tegelijkertijd een update uit. van kwetsbaarheidsinformatie.

Eindelijk als u er meer over wilt weten, kunt u de details inchecken de volgende link.


Laat je reactie achter

Uw e-mailadres wordt niet gepubliceerd. Verplichte velden zijn gemarkeerd met *

*

*

  1. Verantwoordelijk voor de gegevens: Miguel Ángel Gatón
  2. Doel van de gegevens: Controle SPAM, commentaarbeheer.
  3. Legitimatie: uw toestemming
  4. Mededeling van de gegevens: De gegevens worden niet aan derden meegedeeld, behalve op grond van wettelijke verplichting.
  5. Gegevensopslag: database gehost door Occentus Networks (EU)
  6. Rechten: u kunt uw gegevens op elk moment beperken, herstellen en verwijderen.