Podatność w bibliotece vm2 (sandbox dla Node.js) w wersjach przed 3.10.2 pozwala atakującemu na ucieczkę z izolowanego środowiska wykonawczego i uruchomienie dowolnego kodu. Ze względu na brak uwierzytelnienia i sieciowy wektor ataku podatność jest oceniana jako krytyczna (CVSS 9.8).
▸ Pokaż oryginał (EN)
vm2 is an open source vm/sandbox for Node.js. In vm2 prior to version 3.10.2, `Promise.prototype.then` `Promise.prototype.catch` callback sanitization can be bypassed. This allows attackers to escape the sandbox and run arbitrary code. In lib/setup-sandbox.js, the callback function of `localPromise.prototype.then` is sanitized, but `globalPromise.prototype.then` is not sanitized. The return value of async functions is `globalPromise` object. Version 3.10.2 fixes the issue.
W pliku lib/setup-sandbox.js sanityzacja callbacków jest stosowana wyłącznie dla `localPromise.prototype.then` oraz `localPromise.prototype.catch`, natomiast odpowiedniki na obiekcie `globalPromise` pozostają niezabezpieczone. Ponieważ funkcje asynchroniczne (async) zwracają obiekt `globalPromise`, atakujący może przekazać niesanityzowany callback przez mechanizm Promise, omijając w ten sposób ochronę sandbox. Umożliwia to wykonanie dowolnego kodu JavaScript poza izolowanym kontekstem vm2.
Atakujący może całkowicie uciec z piaskownicy vm2 i wykonać dowolny kod w kontekście procesu Node.js hosta, co potencjalnie prowadzi do pełnego przejęcia kontroli nad serwerem, kradzieży danych oraz naruszenia integralności i dostępności systemu.
Należy zaktualizować bibliotekę vm2 do wersji 3.10.2, która naprawia opisany błąd. Patch dostępny jest w oficjalnym repozytorium GitHub projektu (tag v3.10.2).
vm2 (Vm2 Project) we wszystkich wersjach przed 3.10.2
Podatność opisana w security advisory GHSA-99p7-6v5w-7xg8 w repozytorium GitHub patriksimek/vm2. Fix wprowadzony commitem 4b009c2d4b1131c01810c1205e641d614c322a29.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:HVm2 Project Vm2
APPVm2 Project< 3.10.2
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)