Raceconditie in de Linux-kernel garbage collector die kan leiden tot escalatie van bevoegdheden

Jann Horn van het Google Project Zero-team, die ooit de Spectre- en Meltdown-kwetsbaarheden identificeerde, publiceerde een techniek voor het misbruiken van een kwetsbaarheid (CVE-2021-4083) in de Linux-kernel garbage collector. Het beveiligingslek is te wijten aan een race condition bij het opschonen van bestandsdescriptors op Unix-sockets en maakt het mogelijk dat een lokale gebruiker zonder rechten zijn code op kernelniveau kan uitvoeren.

Het probleem is interessant omdat werd geschat dat het tijdsbestek waarin de race condition zich voordoet te klein is om echte exploits te creΓ«ren, maar de auteur van het onderzoek heeft aangetoond dat zelfs zulke aanvankelijk sceptische kwetsbaarheden de bron van echte aanvallen kunnen worden als de maker van de exploit dit heeft gedaan. de nodige vaardigheden en tijd. Yann Horn liet zien hoe je, met behulp van filigrane manipulaties, de race condition die optreedt bij het tegelijkertijd aanroepen van de functies close() en fget() kunt reduceren tot een volledig exploiteerbare use-after-free kwetsbaarheid en toegang kunt krijgen tot reeds vrijgegeven gegevens structuur binnen de kernel.

Er treedt een race condition op tijdens het sluiten van een bestandsdescriptor wanneer close() en fget() tegelijkertijd worden aangeroepen. De aanroep van close() kan vΓ³Γ³r fget() worden uitgevoerd, wat de garbage collector in verwarring zal brengen omdat, volgens de refcount, de bestandsstructuur geen externe referenties zal hebben, maar verbonden zal blijven aan de bestandsdescriptor, d.w.z. De garbage collector zal denken dat hij exclusieve toegang heeft tot de structuur, maar in feite zal de resterende invoer in de bestandsdescriptortabel gedurende een korte periode nog steeds verwijzen naar de structuur die wordt vrijgegeven.

Om de kans op een raceconditie te vergroten, werden verschillende trucs gebruikt, waardoor het mogelijk werd om de kans op succes bij de exploitatie te vergroten tot 30% bij het introduceren van systeemspecifieke optimalisaties. Om bijvoorbeeld de toegangstijd tot een structuur met bestandsdescriptors met enkele honderden nanoseconden te verlengen, werden gegevens uit de processorcache verwijderd door de cache te bezaaien met activiteit op een andere CPU-kern, waardoor het mogelijk werd om de structuur uit het geheugen op te halen in plaats van uit de snelle CPU-cache.

Het tweede belangrijke kenmerk was het gebruik van interrupts gegenereerd door een hardwaretimer om de raceconditietijd te verlengen. Het moment werd zo gekozen dat de interrupthandler zou vuren als er een raceconditie optrad en de uitvoering van de code enige tijd zou onderbreken. Om de terugkeer van de controle verder te vertragen, werden ongeveer 50 vermeldingen in de wachtwachtrij gegenereerd met behulp van epoll, waarvoor het zoeken via de interrupthandler nodig was.

De techniek om het beveiligingslek te misbruiken werd bekendgemaakt na een geheimhoudingsperiode van 90 dagen. Het probleem doet zich voor sinds kernel 2.6.32 en werd begin december opgelost. De oplossing was opgenomen in kernel 5.16 en werd ook overgebracht naar LTS-takken van de kernel en kernelpakketten die in distributies werden geleverd. Het is opmerkelijk dat de kwetsbaarheid werd geΓ―dentificeerd tijdens de analyse van een soortgelijk probleem CVE-2021-0920, dat zich manifesteert in de garbage collector bij het verwerken van de MSG_PEEK-vlag.

Bron: opennet.ru

Voeg een reactie