De Nederlandse beveiligingsonderzoeker Thijs Alkemade vond een ernstige kwetsbaarheid in macOS. Het ging om een vrij doorsnee process injection, maar met een belangrijke kanttekening: hij kon er niet alleen een applicatie, maar het hele OS mee overnemen. Op hackersconferentie DEF CON vertelde hij Tweakers meer over het lek.
Alkemade werkt als securityonderzoeker bij beveiligingsbedrijf Computest. Hij presenteerde zijn bevindingen tijdens securityconferenties Black Hat en DEF CON in Las Vegas. Tweakers sprak hem daar over zijn bevindingen, vlak na een presentatie van een andere beveiligingsonderzoeker, die over DLL-hijacking in Windows sprak. Alkemade zat ook in die zaal te luisteren, vooral uit interesse. Zijn onderzoek naar een lek in macOS heeft namelijk veel weg van DLL-hijacking. "Er zit wel verschil in", zegt Alkemade. "DLL-hijacking werkt niet op macOS, omdat daar bescherming in zit. Als je een library laadt, controleert het besturingssysteem de signature daarvan; dat kun je niet zomaar overnemen." Toch lijkt de kwetsbaarheid die hij in macOS vond, veel op dat proces, legt hij uit.
Tweakers op Black Hat en DEF CON
Tweakers is deze week op de beveiligingsconferenties Black Hat en DEF CON in Las Vegas. Black Hat is een conferentie voor securityprofessionals, waar onderzoek wordt gepresenteerd, maar waar ook bedrijven nieuwe tools presenteren. DEF CON vindt in de dagen erna plaats en is een typisch hackersfeest met hackathons en villages waar hard- en software worden gekraakt.
Alkemade vond de kwetsbaarheid al in december 2020 en gaf dat aan via Apples bugbountyprogramma. De bug, CVE-2021-30873, werd een jaar later gerepareerd in macOS Monterey. De communicatie met Apple verliep moeizaam, zegt Alkemade. "Ze zeiden bijvoorbeeld wel dat ze het zouden oplossen, maar lieten niet weten of de bug ook in oudere versies van het besturingssysteem zat." Apples bugbountyprogramma staat bij hackers bekend als stroperig en onoverzichtelijk. Alkemade zei dat vorig jaar al tegen Tweakers. "Ze deden er nu tien maanden over om het te repareren, maar dat is voor Apple nog best snel", zegt hij. Een aanvaller kon met een succesvolle exploit toegang krijgen tot bestanden op een systeem.
Saved State
De kwetsbaarheid zit in de Saved State-functie van macOS. Dat is een feature van macOS waarmee programma's bij het starten weer de vensters kunnen openen die openstonden bij het uitzetten. De functie is het zichtbaarst in de pop-up die gebruikers zien als ze hun computer afsluiten. Daarnaast zit Saved State ook in de App Nap-feature. "Dat ziet er dan uit alsof apps gewoon nog actief zijn in de Dock, maar dat zijn ze niet", zegt Alkemade. "Als de app te lang op de achtergrond blijft en focus verliest, schrijft die zich weg naar de Saved State."
Daar komt het proces van serialisatie om de hoek kijken, legt Alkemade uit. "De meeste programmeertalen hebben ondersteuning voor binaryserialisatie, maar in veel gevallen zit daar een kwetsbaarheid in. Daardoor is het bijvoorbeeld niet veilig om geserialiseerde objecten in te laden die via het netwerk zijn ontvangen. Bij deze kwetsbaarheid is het probleem dat de app een geserialiseerd object inlaadt dat aangemaakt is door een andere app. Normaal kan een applicatie een andere applicatie niet aanpassen, omdat hier een codesignature op zit, maar door die te omzeilen is het toch mogelijk om code uit te voeren in een andere app. Dit type aanval heet process injection.
Electron vs. de rest
Proces injections zijn vaker te vinden in macOS, maar nooit zo betrouwbaar en veelvoorkomend
Dat is normaal mogelijk in specifieke applicaties. Zo noemt Alkemade in een blogpost Electron-apps als voorbeeld. Een aanvaller kan in dat geval alleen die ene app misbruiken. Het opvallende aan Alkemades ontdekking in Saved State is dat hij de aanval altijd kan uitbuiten, ongeacht de gebruikte app. Dat maakt een aanval een stuk betrouwbaarder en daarmee gevaarlijker. "Je ziet proces injections vaker, maar dat is dan incidenteel. Dat kan soms nuttig zijn, als je als aanvaller bijvoorbeeld een webcam wilt aanzetten of een bepaalde tool wilt deïnstalleren, maar het is niet consistent. Dat is deze kwetsbaarheid wel."
Sandbox-escape en chain
Met de process injection kreeg Alkemade het voor elkaar om uit de sandbox van macOS te ontsnappen, maar daarmee was hij er nog niet. "Eerst lukte het om bepaalde functies aan te roepen zonder argumenten, daarna mét argumenten en zo lukte er stap voor stap steeds meer, totdat ik uiteindelijk op een punt kwam waarop ik scripts kon aanroepen. Daarmee kon ik alles doen wat die applicatie ook kan." Uiteindelijk deed Alkemade er lang over om die chain te vinden, zegt hij. "Ik moest misschien wel tien stappen zetten voordat ik er was, maar dat is ook het leuke aan het proces." In zijn presentatie en blogpost beschrijft hij hoe hij na het ontsnappen uit de sandbox ook een privilege escalation moest uitvoeren door code te injecteren in een app met een specifieke entitlement. Daarna was het nodig om de System Integrity Protection, of SIP, in macOS te omzeilen. Apple repareerde de eerste sandbox-escapekwetsbaarheid overigens al in april van 2021. De latere patch maakte ook de vervolgstappen onmogelijk.
Alkemade werd vorig jaar bekend toen hij samen met zijn collega Daan Keuper de Pwn2own-hackcompetitie won. Het tweetal vond toen een bug in Zoom waarmee het mogelijk was om zonder tussenkomst van de gebruiker een sessie over te nemen. Tweakers sprak met hen over het winnen van de wedstrijd en het maken van succesvolle exploits.