Biblioteka vm2, służąca do izolowanego uruchamiania niezaufanego kodu Node.js, nieprawidłowo obsługiwała obiekty hosta przekazywane do `Error.prepareStackTrace` przy nieobsłużonych błędach asynchronicznych. Podatność umożliwia całkowite ominięcie mechanizmów sandbox i uzyskanie możliwości RCE na serwerze hosta.
▸ Pokaż oryginał (EN)
vm2 is a sandbox that can run untrusted code with whitelisted Node's built-in modules. Prior to version 3.9.15, vm2 was not properly handling host objects passed to `Error.prepareStackTrace` in case of unhandled async errors. A threat actor could bypass the sandbox protections to gain remote code execution rights on the host running the sandbox. This vulnerability was patched in the release of version 3.9.15 of vm2. There are no known workarounds.
vm2 implementuje środowisko sandbox mające na celu izolację niezaufanego kodu od systemu hosta. W wersjach przed 3.9.15 biblioteka nieprawidłowo walidowała obiekty hosta przekazywane do funkcji `Error.prepareStackTrace` w kontekście nieobsłużonych błędów asynchronicznych (async errors). Atakujący mógł spreparować odpowiedni payload, który poprzez tę lukę w obsłudze błędów wydostawał się poza granice sandbox i uzyskiwał pełny dostęp do środowiska Node.js hosta. Wektor ataku jest sieciowy, nie wymaga uwierzytelnienia ani interakcji użytkownika, a zasięg ataku wykracza poza komponent podatny (Scope: Changed).
Atakujący może całkowicie ominąć izolację sandbox i uzyskać RCE na maszynie hostującej środowisko vm2, co w praktyce oznacza pełną kompromitację serwera — możliwość odczytu i modyfikacji danych, instalacji złośliwego oprogramowania oraz dalszego lateral movement w sieci.
Należy zaktualizować bibliotekę vm2 do wersji 3.9.15 lub nowszej, w której podatność została załatana (commit d534e5785f38307b70d3aac1945260a261a94d50). Producent nie wskazuje żadnych obejść (workarounds) dla starszych wersji — aktualizacja jest jedynym rozwiązaniem.
Biblioteka vm2 (projekt Vm2 Project) we wszystkich wersjach przed 3.9.15
Publiczny proof-of-concept exploit jest dostępny pod adresem wskazanym w referencjach (gist.github.com/seongil-wi). Podatność sklasyfikowana jako CVSS 10.0 (maksymalny wynik) — mimo braku wpisu w CISA KEV jej charakter (brak wymaganych uprawnień, brak interakcji użytkownika, pełne RCE) nakazuje traktować ją priorytetowo.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:HVm2 Project Vm2
APPVm2 Project< 3.9.15
Powiązane podatności
vm2: mutacja prototypów hosta z poziomu sandbox (prototype pollution)
vm2 (Node.js): ucieczka z sandbox przez BaseHandler.getPrototypeOf (RCE)
Ucieczka z sandboxa w bibliotece vm2 dla Node.js (RCE)
vm2: ominięcie listy dozwolonych modułów i RCE przez builtin 'module'
vm2 (Node.js): ucieczka z sandbox przez zagnieżdżony NodeVM (RCE)