Biblioteka vm2 dla Node.js w wersjach przed 3.11.0 zawiera krytyczną podatność umożliwiającą atakującemu ucieczkę z izolowanego środowiska sandbox. Luka pozwala na wykonanie dowolnego kodu poza środowiskiem sandboxa, co całkowicie kompromituje bezpieczeństwo izolacji.
▸ Pokaż oryginał (EN)
vm2 is an open source vm/sandbox for Node.js. Prior to version 3.11.0, SuppressedError allows attackers to escape the sandbox and run arbitrary code. This issue has been patched in version 3.11.0.
Podatność wynika z nieprawidłowej obsługi mechanizmu SuppressedError, który umożliwia atakującemu obejście zabezpieczeń sandboxa (CWE-693 — Protection Mechanism Failure). Poprzez odpowiednio spreparowany kod przekazany do vm2, atakujący może wyjść poza izolowane środowisko wykonywania i uzyskać dostęp do kontekstu hosta Node.js. Mechanizm ten klasyfikowany jest również jako CWE-94 — Code Injection, gdyż efektem jest możliwość wstrzyknięcia i wykonania arbitralnego kodu na poziomie systemu bazowego.
Atakujący może uciec z sandboxa vm2 i wykonać dowolny kod w kontekście procesu Node.js hosta, co w konsekwencji może prowadzić do pełnego przejęcia serwera, ujawnienia danych lub przerwania działania usług.
Należy zaktualizować bibliotekę vm2 do wersji 3.11.0 lub nowszej, w której podatność została usunięta. Szczegóły dostępne w referencjach producenta: https://github.com/patriksimek/vm2/releases/tag/v3.11.0
Vm2 Project vm2 we wszystkich wersjach przed 3.11.0
Podatność zgłoszona i załatana w ramach GitHub Security Advisory GHSA-55hx-c926-fr95. Biblioteka vm2 jest szeroko stosowana w aplikacjach Node.js wymagających izolowanego wykonywania niezaufanego kodu — każda aplikacja używająca vm2 do sandboxingu powinna traktować aktualizację priorytetowo.
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.0
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)