Biblioteka vm2 dla Node.js w wersjach przed 3.11.3 zawiera krytyczną podatność umożliwiającą ucieczkę z izolowanego środowiska (sandbox escape). Atakujący może wykonać dowolne polecenia na systemie hosta bez żadnego uwierzytelnienia.
▸ Pokaż oryginał (EN)
vm2 is an open source vm/sandbox for Node.js. Prior to 3.11.3, it is possible to catch a host exception using the yield* expression inside an async generator. When the generator is closed using the return function, the value is awaited on and exceptions thrown in the then call will be caught by the runtime and passed to the yield* iterator as the next value. This allows attackers to write code which can escape from the VM2 sandbox and execute arbitrary commands on the host system. This vulnerability is fixed in 3.11.3.
Podatność polega na możliwości przechwycenia wyjątku hosta przy użyciu wyrażenia yield* wewnątrz asynchronicznego generatora. Gdy generator jest zamykany funkcją return, zwracana wartość jest oczekiwana (awaited), a wyjątki rzucane w wywołaniu then są przechwytywane przez środowisko uruchomieniowe i przekazywane z powrotem do iteratora yield* jako kolejna wartość. Mechanizm ten pozwala na wydostanie się kodu z izolowanego kontekstu vm2 i uzyskanie dostępu do środowiska hosta. Atak nie wymaga uprawnień ani interakcji użytkownika.
Atakujący może całkowicie opuścić izolowane środowisko vm2 (sandbox escape) i wykonać dowolny kod na systemie hosta, co prowadzi do pełnego naruszenia poufności, integralności i dostępności systemu.
Należy zaktualizować bibliotekę vm2 do wersji 3.11.3 lub nowszej, w której podatność została naprawiona. Szczegóły dostępne w referencjach producenta na GitHub Security Advisories.
Biblioteka vm2 w wersjach wcześniejszych niż 3.11.3 dla Node.js.
Podatność jest tożsama klasą błędu z wcześniej zgłaszanymi problemami sandbox escape w vm2 (mechanizm async generator). Poprawka została dostarczona w wersji 3.11.3 zgodnie z informacją w opisie oryginalnym.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:HVm2 Project Vm2
APPVm2 Project< 3.11.3
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)