Biblioteka vm2 — sandbox dla Node.js — w wersjach przed 3.11.0 umożliwia atakującemu wydostanie się z izolowanego środowiska wykonania kodu poprzez uzyskanie dostępu do dowolnych prototypów JavaScript. Ze względu na maksymalny wynik CVSS (10.0) podatność stanowi krytyczne zagrożenie dla aplikacji korzystających z vm2 do izolacji niezaufanego kodu.
▸ Pokaż oryginał (EN)
vm2 is an open source vm/sandbox for Node.js. Prior to 3.11.0, It is possible to reach BaseHandler.getPrototypeOf, which can be used to get arbitrary prototypes. This vulnerability is fixed in 3.11.0.
Podatność polega na możliwości wywołania metody BaseHandler.getPrototypeOf w sposób niezamierzony przez mechanizmy sandbox. Atakujący może za jej pomocą uzyskać referencję do dowolnego prototypu obiektu JavaScript spoza izolowanego środowiska. Prowadzi to do przełamania granicy sandbox i potencjalnego wykonania dowolnego kodu w kontekście procesu Node.js hosta (code injection, CWE-94).
Atakujący może całkowicie wyrwać się z izolacji sandbox i wykonać dowolny kod w kontekście aplikacji hostującej vm2, co w praktyce oznacza pełne przejęcie kontroli nad serwerem — naruszenie poufności, integralności danych oraz dostępności systemu.
Należy zaktualizować bibliotekę vm2 do wersji 3.11.0 lub nowszej, w której podatność została naprawiona. Jeśli natychmiastowa aktualizacja nie jest możliwa, należy rozważyć alternatywne mechanizmy izolacji niezaufanego kodu.
Biblioteka vm2 dla Node.js w wersjach przed 3.11.0
Podatność została zgłoszona i naprawiona przez autora projektu vm2 (Patrik Simek) — informacja wynika z referencji do repozytorium GitHub projektu oraz opublikowanego security advisory GHSA-qcp4-v2jj-fjx8.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:HVm2 Project Vm2
APPVm2 Project< 3.11.0
Powiązane podatności
vm2: mutacja prototypów hosta z poziomu sandbox (prototype pollution)
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