Onderzoekers op het gebied van cyberbeveiliging hebben een kritieke beveiligingsfout onthuld geïsoleerd-vmeen populaire open-source sandbox met meer dan 2.900 sterren en 190 forks op GitHub, waarmee aanvallers aan de grenzen van de geïsoleerde omgeving konden ontsnappen.
De kwetsbaarheid (“GHSA-864f-rcv7-6rh4”), waaraan nog geen CVE-identificatie moet worden toegewezen, heeft gevolgen voor alle versies van de bibliotheek vóór en inclusief 7.0.0. Het is gepatcht in versies 6.2.0 en 7.0.1 die eerder deze maand zijn uitgebracht.
Geïsoleerde-vm is een Node.js-bibliotheek voor het uitvoeren van niet-vertrouwd JavaScript in een V8 Isolate, een onafhankelijk exemplaar van de Google V8 JavaScript-engine, waardoor meerdere JavaScript-omgevingen in een sandbox tegelijkertijd kunnen worden uitgevoerd zonder gegevens te delen of elkaar te hinderen. Het npm-pakket is de afgelopen week bijna 1 miljoen keer gedownload.
Omdat elke V8 Isolate een afzonderlijke status heeft en zijn eigen heap onderhoudt, is het niet mogelijk om JavaScript-objecten rechtstreeks vanuit de hoofdthread van Node.js door te geven aan een worker-isolaat. Geïsoleerde-vm stelt een klasse bloot met de naam Externe kopie om JavaScript-objecten veilig uit het host-isolaat te serialiseren en ze te deserialiseren naar het gast-isolaat.
De door Endor Labs geïdentificeerde kwetsbaarheid bevindt zich in dit onderdeel, waardoor code die in de sandbox wordt uitgevoerd, kan uitbreken en het geheugen in de hosttoepassing kan beschadigen.
“Een soort verwarring in de manier waarop ExternalCopy omgaat met de transferList-optie zorgt ervoor dat code die in de sandbox wordt uitgevoerd het geheugen in het hostproces beschadigt”, zegt Endor Labs-onderzoeker Cristian-Alexandru Staicu, die wordt gecrediteerd voor het ontdekken en rapporteren van de fout, in een technisch artikel gedeeld met The Hacker News.

“Beginnend met niets anders dan een enkele ivm.Referentie, de standaard manier waarop hosts een sandbox enige mogelijkheid geven, hebben we de bug geëscaleerd van een crash met gecontroleerde adressen tot aan het kapen van de controlestroom van de host, waarmee een volledige ontsnapping van gast naar host-sandbox werd gedemonstreerd.”
Succesvol misbruik van de fout maakt geheugenbeschadiging in het hostproces mogelijk, waardoor het hostproces crasht met een segmentatiefout (SIGSEGV). Het kan ook leiden tot een ontsnapping van de sandbox tussen gasten en een erosie van de vertrouwensgrens, waardoor het doel van geïsoleerde vm wordt ondermijnd.
“De minimale aangetoonde impact is een betrouwbare, gecontroleerde adrescrash (denial-of-service) die kan worden geactiveerd door elke gast die een ivm.Reference heeft gekregen (de standaardmanier om een sandbox enige mogelijkheid te geven)”, zei projectbeheerder Marcel Laverdet in een advies.
“De maximaal aangetoonde impact is de control-flow kaping van het hostproces, dat wil zeggen de mogelijke uitvoering van externe code op de host.”
Gebruikers die geïsoleerde-vm in hun ontwikkelomgeving hebben geïnstalleerd, worden geadviseerd om te updaten naar de nieuwste versie voor optimale bescherming. Aanvullende details over de volledige exploit zijn achtergehouden om te voorkomen dat slechte actoren hun eigen aanvallen lanceren.
“De belangrijkste conclusie is dat wat niet werd verbroken de primitieve isolatie zelf was”, zei Staicu. “De Isolate-grens van V8 hield stand. Wat faalde was de C++-lijmcode die waarden over die grens heen bundelt. Een perfect solide bouwsteen werd ondermijnd door de bindende laag die eromheen was gewikkeld.”