Biblioteka vm2 dla Node.js w wersjach od 3.9.6 do 3.10.5 umożliwia kod działający wewnątrz sandbox na modyfikację współdzielonych prototypów hosta (Object.prototype, Array.prototype, Function.prototype). Jest to podatność o maksymalnym wyniku CVSS 10.0, pozwalająca na przełamanie izolacji sandbox.
▸ Pokaż oryginał (EN)
vm2 is an open source vm/sandbox for Node.js. From 3.9.6 to 3.10.5, vm2's bridge exposes mutable proxies for real host-realm intrinsic prototypes and then forwards sandbox writes into the underlying host objects with otherReflectSet() and otherReflectDefineProperty(), which lets attacker-controlled JavaScript running in a default VM or inherited NodeVM mutate shared host Object.prototype, Array.prototype, and Function.prototype from inside the sandbox This vulnerability is fixed in 3.11.0.
Mostek (bridge) vm2 udostępnia wewnątrz sandbox modyfikowalne proxy wskazujące na rzeczywiste prototypy środowiska hosta. Kiedy kod w sandbox wykonuje zapis na takim proxy, vm2 przekazuje tę operację bezpośrednio do obiektów hosta za pomocą wewnętrznych funkcji otherReflectSet() oraz otherReflectDefineProperty(). W efekcie atakujący może z poziomu domyślnego VM lub dziedziczącego NodeVM modyfikować globalne prototypy JavaScript hosta, co stanowi klasyczny atak prototype pollution wykraczający poza granice sandbox.
Atakujący może zmodyfikować współdzielone prototypy hosta (Object.prototype, Array.prototype, Function.prototype), co może prowadzić do zakłócenia działania aplikacji, wykonania niezamierzonego kodu w kontekście hosta oraz naruszenia integralności i dostępności całego procesu Node.js.
Należy zaktualizować vm2 do wersji 3.11.0, w której podatność została naprawiona. Jeśli natychmiastowa aktualizacja jest niemożliwa, należy ograniczyć lub całkowicie zrezygnować z uruchamiania niezaufanego kodu w ramach vm2 do czasu wdrożenia patcha.
vm2 w wersjach od 3.9.6 do 3.10.5 (włącznie) dla Node.js
Podatność została zgłoszona i naprawiona przez zespół projektu vm2. Szczegóły dostępne w oficjalnym security advisory na GitHub: GHSA-vwrp-x96c-mhwq.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:N/I:H/A:HVm2 Project Vm2
APPVm2 Project3.9.6 – 3.11.0 (bez)
Powiązane podatności
vm2 (Node.js): ucieczka z sandbox przez BaseHandler.getPrototypeOf (RCE)
vm2 (Node.js): ucieczka z sandbox przez zagnieżdżony NodeVM (RCE)
Ucieczka z sandboxa w bibliotece vm2 dla Node.js (RCE)
vm2: ominięcie listy dozwolonych modułów i RCE przez builtin 'module'
Ucieczka z sandboxu vm2 poprzez getter na prototypie tablicy