Podatność w bibliotece vm2 (wersje przed 3.11.1) pozwala kodowi uruchamianemu w izolowanym środowisku (sandbox) na całkowite ominięcie ograniczeń i wykonanie dowolnych poleceń systemu operacyjnego na hoście. Dotyczy każdej aplikacji, która uruchamia niezaufany kod wewnątrz NodeVM z opcją nesting: true.
▸ Pokaż oryginał (EN)
vm2 is an open source vm/sandbox for Node.js. Prior to 3.11.1, when a NodeVM is created with nesting: true, sandbox code can unconditionally require('vm2') regardless of the outer VM's require configuration — including require: false. With access to vm2, the sandbox constructs a new inner NodeVM with its own unrestricted require settings and executes arbitrary OS commands on the host. Any application that runs untrusted code inside a NodeVM with nesting: true is fully compromised. This vulnerability is fixed in 3.11.1.
Gdy NodeVM jest tworzony z opcją nesting: true, kod wewnątrz sandbox może bezwarunkowo wywołać require('vm2') — niezależnie od konfiguracji zewnętrznej maszyny wirtualnej, nawet gdy ustawiono require: false. Uzyskując w ten sposób dostęp do modułu vm2, złośliwy kod tworzy nową, wewnętrzną instancję NodeVM z własnymi, nieograniczonymi ustawieniami require. Pozwala to na załadowanie dowolnych modułów systemowych i wykonanie nieograniczonych poleceń OS na maszynie hosta.
Atakujący może w pełni skompromitować aplikację hostującą sandbox — wykonać dowolne polecenia na poziomie systemu operacyjnego (RCE), uzyskać dostęp do danych, zmodyfikować system lub zainstalować złośliwe oprogramowanie.
Należy zaktualizować bibliotekę vm2 do wersji 3.11.1 lub nowszej, w której podatność została naprawiona. Do czasu aktualizacji należy unikać używania opcji nesting: true w NodeVM przy uruchamianiu niezaufanego kodu.
Biblioteka vm2 dla Node.js w wersjach poprzedzających 3.11.1, gdy NodeVM jest uruchamiany z opcją nesting: true.
Podatność zgłoszona i naprawiona w wersji 3.11.1. Szczegóły dostępne w oficjalnym security advisory repozytorium GitHub projektu vm2.
CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:C/C:H/I:H/A:HVm2 Project Vm2
APPVm2 Project< 3.11.1
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'
Ucieczka z sandboxu vm2 poprzez getter na prototypie tablicy