Beveiligingsonderzoekers hebben een kwetsbaarheid ontdekt in een veelgebruikte RISC-V-cpu. De bug maakt het mogelijk om volledige controle over de XuanTie C910 en de C920 te krijgen, zoals het uitvoeren van code of het achterhalen van informatie. Er is een mitigatie, maar de onderzoekers vertellen aan Tweakers dat het niet mogelijk is het probleem met een microcodepatch op te lossen.
Het onderzoek werd uitgevoerd door een groep beveiligingsonderzoekers van het CISPA Helmholtz Center in Duitsland. De groep heeft de bug GhostWrite genoemd. GhostWrite is een bug in de XuanTie C910 en C920 die door het Chinese bedrijf T-Head wordt gemaakt. Dat is een van de meestvoorkomende chips op basis van de RISC-V-architectuur, die in onder andere in servers en singleboardcomputers wordt gebruikt. Maar, benadrukken de onderzoekers, het gaat niet om een kwetsbaarheid in RISC-V. "Het gaat hier specifiek om deze chips", zegt Fabian Thomas tegen Tweakers. De onderzoekers presenteren hun bevindingen op de BlackHat-securityconferentie in Las Vegas.
De kwetsbaarheid maakt het mogelijk voor een normale gebruiker om instructies te schrijven naar iedere willekeurige locatie in het fysieke geheugen. "Dat maakt het bijvoorbeeld mogelijk om gegevens uit te lezen, authenticatie te omzeilen of gegevens aan te passen", leggen de onderzoekers uit. "De bug maakt het mogelijk om code uit te voeren vanuit ieder punt in de user space. Daar is dus ook geen authenticatie voor nodig."
GhostWrite verschilt volgens de onderzoekers van andere cpu-bugs, die in de laatste jaren steeds vaker aan het licht kwamen. Heartbleed en Zenbleed waren speculative execution-bugs en dat is volgens Thomas hier niet het geval. "Bij speculative of transitive execution-bugs probeer je informatie te onderscheppen tijdens het uitvoeren van een actie. Dat is op zichzelf al ingewikkeld om uit te voeren; je moet bijvoorbeeld meerdere exploitstappen uitvoeren voor je iets kunt achterhalen en je moet gebruikmaken van timings en caches. Dat is hier niet het geval." Dat maakt het ook meteen veel simpeler om de aanval uit te voeren, zegt Thomas.
Fuzzing
De onderzoekers vonden de bug via differential fuzzing. "Daarbij pakken we allerlei verschillende hardware zoals cpu's, gooien we er output doorheen en kijken we hoe het zich gedraagt." Als vervolgens een van de cpu's afwijkend gedrag vertoont, weet de onderzoeker dat daar ergens iets gebeurt dat niet de bedoeling is. "Dat is wat ook hier gebeurde", zegt Thomas. "Ik begon een proces en al na een minuut crashte de machine waar de C910-cpu in zat. Toen wist ik dat daar iets mis was; dat zou niet moeten gebeuren. Het enige dat we deden was het draaien van een rechtenloos proces; daar zou een heel systeem niet van moeten crashen."
Het opvallende aan de kwetsbaarheid is dat Thomas en zijn team de details ervan niet helemaal begrijpen. "We hebben alleen een hypothese, maar omdat we niet de broncode van deze cpu hebben, weten we ook niet precies wat er misgaat. We weten wat er gebeurt, namelijk dat als we een bepaalde instructie opgeven, er direct naar fysiek geheugen wordt geschreven. Maar we weten niet waarom dat gebeurt. Mijn idee is dat we een integer overflow veroorzaken."
Disclosure
Thomas en het team deelden hun bevindingen begin dit jaar met de fabrikant als onderdeel van het responsibledisclosureproces. "We kregen niet echt gedetailleerde informatie terug. Toen zei de fabrikant dat die het kon reproduceren en in een volgende versie van de chip met een fix zou komen." Ondertussen is er geen goede patch beschikbaar. Omdat het niet om een bug in de microcode gaat, is een microcodepatch ook niet aan de orde. De enige manier om uitbuiting te voorkomen is om de volledige vectorfunctionaliteit uit te schakelen. Dat betekent dat de chip in de praktijk de helft minder efficiënt wordt.