Een groep onderzoekers van Amerikaanse, Australische en Israƫlische universiteiten heeft een nieuwe techniek ontwikkeld voor aanvallen via zijkanalen om kwetsbaarheden van de Spectre-klasse in browsers op basis van de Chromium-engine uit te buiten. De aanval, die de codenaam Spook.js heeft gekregen, stelt een aanvaller in staat om via het uitvoeren van JavaScript-code de site-isolatiemechanismen te omzeilen en de inhoud van het volledige adresruimte van het huidige proces te lezen, dat wil zeggen toegang te krijgen tot gegevens van pagina's die in andere tabbladen zijn geopend, maar in ƩƩn proces worden verwerkt.
Omdat Chrome verschillende websites in verschillende processen uitvoert, is de mogelijkheid om praktische aanvallen uit te voeren beperkt tot services die verschillende gebruikers toestaan hun pagina's te hosten. De methode stelt een aanvaller in staat via een pagina waarin hij zijn JavaScript-code kan integreren, vast te stellen of er andere door de gebruiker geopende pagina's van dezelfde site zijn en vertrouwelijke informatie uit deze pagina's te extraheren, zoals inloggegevens of bankgegevens die door de auto-aanvulsystemen in webformulieren zijn ingevoerd. Ter demonstratie is laten zien hoe een blog op Tumblr kan worden aangevallen als de eigenaar in een ander tabblad de blog van de aanvaller opent die op dezelfde service is gehost.

Een andere toepassing van de methode is een aanval op browserextensies, wat het bij installatie van een door de aanvaller gecontroleerde extensie mogelijk maakt om gegevens uit andere extensies te extraheren. Als voorbeeld is aangetoond hoe bij installatie van een kwaadaardige extensie vertrouwelijke informatie kan worden verkregen uit de wachtwoordmanager LastPass.

Onderzoekers hebben een prototype van een exploit gepubliceerd die werkt in Chrome 89 op systemen met een Intel i7-6700K en i7-7600U CPU. Bij het creƫren van de exploit zijn eerder gepubliceerde prototypes van JavaScript-code van Google gebruikt om Spectre-aanvallen uit te voeren. Er wordt opgemerkt dat de onderzoekers erin zijn geslaagd om werkende exploits voor systemen op basis van Intel- en Apple M1-processors te ontwikkelen, waarmee het mogelijk is om geheugen te lezen met een snelheid van 500 bytes per seconde en een nauwkeurigheid van 96%. Er wordt aangenomen dat de methode ook toepasbaar is op AMD-processors, maar een volledig werkende exploit kon niet worden voorbereid.
De aanval is toepasbaar op alle browsers die zijn gebaseerd op de Chromium-engine, inclusief Google Chrome, Microsoft Edge en Brave. Onderzoekers denken ook dat de methode kan worden aangepast voor Firefox, maar omdat de Firefox-engine sterk verschilt van Chrome, is het werk aan het creƫren van een dergelijke exploit uitgesteld naar de toekomst.
Om browseraanvallen die verband houden met speculatieve uitvoering van instructies te voorkomen, heeft Chrome adresruimte-segmentatie geĆÆmplementeerd - sandbox-isolatie staat alleen JavaScript met 32-bits pointers toe en scheidt het geheugen van handlers in niet-overlappende 4GB heaps. Om toegang te krijgen tot de gehele adresruimte van het proces en de 32-bits beperking te omzeilen, gebruiken onderzoekers de techniek Type Confusion, waarmee JavaScript-engine wordt gedwongen om een object met een onjuiste type te verwerken, wat de mogelijkheid biedt om een 64-bits pointer te vormen op basis van een combinatie van twee 32-bits waarden.
Het doel van de aanval is dat bij het verwerken van een speciaal ontworpen kwaadaardig object in de JavaScript-engine condities ontstaan die leiden tot speculatieve uitvoering van instructies die toegang verlenen tot een array. Het object wordt zo samengesteld dat de door de aanvallers gecontroleerde velden zich bevinden in een gebied waar een 64-bits pointer wordt gebruikt. Aangezien het type van het kwaadaardige object niet overeenkomt met het type van de verwerkte array, worden dergelijke acties normaal gesproken geblokkeerd in Chrome door het mechanisme voor code-deoptimalisatie dat wordt toegepast voor toegang tot arrays. Om dit probleem op te lossen, wordt de code voor de Type Confusion-aanval in een voorwaardelijke 'if'-block geplaatst dat niet wordt geactiveerd onder normale omstandigheden, maar wordt uitgevoerd in de speculatieve modus, bij een onjuiste voorspelling van de CPU over de verdere vertakking.
Uiteindelijk maakt de processor speculatief gebruik van de gevormde 64-bits aanwijzer en herstelt de staat na het vaststellen van een mislukte voorspelling, maar de uitvoeringssporen blijven in de algemene cache hangen en kunnen worden hersteld met behulp van methoden om de inhoud van de cache via zijkanalen te bepalen die de toegangstijd tot gecachete en niet-gecachete gegevens analyseren. Voor de analyse van de cache-inhoud bij onvoldoende nauwkeurigheid van de timer die beschikbaar is in JavaScript, wordt de door Google voorgestelde methode gebruikt, die de in processors toegepaste datastrategie voor cache-ontsnapping Tree-PLRU misleidt en aanzienlijk de tijdsverschillen vergroot bij aanwezig en niet-aanwezig zijn van een waarde in de cache door het aantal cycli te verhogen.
Bron: opennet.ru
