Kritikus súlyosságú típuskonfúziós sérülékenységet azonosítottak az isolated-vm Node.js könyvtárban, amely sikeres kihasználás esetén távoli ódfuttatást (RCE) tehet lehetővé a gazdarendszeren.
Az isolated-vm a V8 JavaScript-motor Isolate interfészére építve biztosít egymástól elkülönített JavaScript-futtatási környezeteket. Minden Isolate saját memóriával, végrehajtási állapottal és garbage collectorral rendelkezik, így a megoldást széles körben használják nem megbízható JavaScript-kód sandboxolt futtatására konténer vagy virtuális gép nélkül.
A CVE-azonosítóval még nem rendelkező hiba az ExternalCopy funkciót érinti, amely az adatok Isolate-ok közötti átviteléért felel. A teljesítmény növelése érdekében a mechanizmus egy transferList segítségével mozgat nagyobb ArrayBuffer objektumokat a különböző környezetek között.
A probléma abból adódott, hogy az adatokat rekonstruáló kód kétszer járta be a listát, miközben a második ellenőrzés során feltételezte, hogy az elemek értéke nem változott. JavaScript getterek használatával azonban egy támadó eltérő értékeket adhat vissza a két bejárás során, és ezzel time-of-check/time-of-use (TOCTOU) hibát idézhet elő. Ez végül támadó által kontrollált pointer dereferálásához vezethet.
Bár az ExternalCopy konstruktort közvetlenül csak a host érheti el, egy sandboxban futó támadó az ivm.Reference mechanizmuson keresztül is előidézheti a sérülékenységet. Sikeres kihasználás esetén a gazdafolyamat összeomolhat, ami szolgáltatásmegtagadást (DoS) eredményezhet, súlyosabb esetben pedig a vezérlési folyamat eltérítésével RCE válhat lehetővé a host rendszeren.
A fejlesztői közlemény szerint minden olyan alkalmazás érintett lehet, amely nem megbízható kódot futtat Isolate-ban, és akár egyetlen Reference objektumot is megoszt vele. A sérülékenységet az isolated-vm 6.2.0 és 7.0.1 verziókban javították, megakadályozva, hogy a másolási folyamat közben felhasználói JavaScript fusson.
Az Endor Labs szerint a hiba a natív C++ összekötő rétegben volt, amely közvetlenül kezeli a V8 belső objektumait és memóriamutatóit. Egyetlen nem megfelelően ellenőrzött típuskonverzió elegendő volt ahhoz, hogy a támadó áttörje az izolációs határt, és potenciálisan kódot futtasson a gazdarendszeren.