Podatności vm2
64 znanych podatności CVE w vm2, przetłumaczonych i ocenionych.
- CVE-2026-92959Wysokie
vm2 przed wersją 3.11.8 nie egzekwuje w pełni opcji allowAsync: false w VM i NodeVM. Mimo że localPromise.prototype.then jest zastąpione procedurą rzucającą błąd 'Async not available', statyczne metody Promise w sandboxie (Promise.resolve, Promise.all, Promise.race, Promise.any, Promise.allSettled) nadal asymilują dostarczone przez atakującego thenable, co pozwala na zaplanowanie pracy po zakończeniu VM.run() lub NodeVM.run() i poza skonfigurowanym limitem czasu.
- CVE-2026-92958Wysokie
vm2 do wersji 3.11.6 zawiera obejście listy zablokowanych modułów wbudowanych w NodeVM. Gdy osadzający używa symbolu wieloznacznego builtin wraz z wpisami negatywnymi (np. require: { builtin: ['*', '-fs', '-child_process'] }), wpisy negatywne są dopasowywane po dokładnej nazwie modułu, więc -fs usuwa tylko moduł fs, a nie jego podścieżki, takie jak fs/promises. Kod w sandboxie może wywołać require('fs/promises') lub require('node:fs/promises') i uzyskać dostęp do API systemu plików opartego na obietnicach.
- CVE-2026-92954Wysokie
vm2 w wersjach od 3.10.0 do 3.11.7 nie oznacza jako obsłużonych obietnic zwracanych z realm hosta do sandboxa na granicy mostu. Tylko obietnice utworzone wewnątrz sandboxa są opakowywane w procedurę pochłaniającą odrzucenie, a most instaluje sanitizery odrzuceń po stronie hosta tylko wtedy, gdy kod sandboxa wywoła .then/.catch/.finally. W rezultacie kod w sandboxie może wywołać funkcję hosta zwracającą odrzuconą obietnicę i zignorować wartość zwracaną, pozostawiając obietnicę hosta nieobsłużoną, co powoduje zakończenie procesu hosta przez domyślne zachowanie Node.js.
- CVE-2026-92949Średnie
W vm2 w wersjach od 3.9.6 przed 3.11.7 nieprawidłowo ograniczono dostęp do właściwości akcesorów na zamrożonych obiektach, co pozwala skryptom w piaskownicy obejść zabezpieczenia vm.freeze() i vm.readonly(). Atakujący może użyć Object.getOwnPropertyDescriptor() lub __lookupSetter__() do wyodrębnienia i wywołania setterów obiektów hosta bezpośrednio, modyfikując właściwości oznaczone przez osadzającego jako tylko do odczytu.
- CVE-2026-92942Wysokie
W wersjach vm2 ≤ 3.11.6 opcja VM({ timeout }) nie jest egzekwowana dla kodu wykonywanego poza synchronicznym wywołaniem VM#run(). Sandboxowany kod może zarejestrować wywołanie zwrotne FinalizationRegistry i po zwolnieniu obiektu zablokować pętlę zdarzeń hosta na nieograniczony czas, powodując denial of service.
- CVE-2026-92933Średnie
vm2 w wersjach <= 3.11.7 udostępnia hostowy moduł util w sandboxie jako niefiltrowaną płytką kopię, a przestarzały wbudowany moduł sys (alias hostowego util) jest udostępniany przez ogólny loader wbudowany. W Node.js >= 22.9 daje to kodowi w sandboxie dostęp do util.getCallSites(), który zwraca pełny stos wywołań procesu hosta, w tym bezwzględne ścieżki plików, nazwy funkcji i numery linii. Podatność została naprawiona w vm2 3.11.8.
- CVE-2026-47683Wysokie
vm2 przed wersją 3.11.6 zawiera podatność, gdzie egzekwowanie limitu bufferAllocLimit nie obejmuje funkcji Buffer.concat(list, totalLength) ani Buffer.from(arrayLike) z kontrolowaną długością, co pozwala kodowi w sandboxie na duże synchroniczne alokacje pamięci poza limitem, mogące wyczerpać proces hosta.
- CVE-2026-47209Wysokie
W wersjach przed 3.11.4 biblioteka vm2 ma lukę w metodzie BaseHandler.set, która ignoruje parametr receiver i nieprawidłowo zapisuje do obiektu docelowego. To prowadzi do wycieku właściwości dziedziczonych do obiektu hosta, co stwarza możliwość ataku na klucze Symbol w różnych kontekstach.
- CVE-2026-47141Średnie
vm2 to otwarte źródło vm/sandbox dla Node.js. W wersjach przed 3.11.4, NodeVM udostępnia niektóre wbudowane funkcje obserwacji, które mogą być używane przez kod w piaskownicy do obserwacji danych aplikacji hosta.
- CVE-2026-47139Wysokie
vm2 to otwarte źródło vm/sandbox dla Node.js. W wersjach przed 3.11.4, NodeVM umożliwiało wykluczenie publicznych modułów sieciowych, jednak wewnętrzne moduły HTTP z podkreśleniem, takie jak _http_client i _http_server, nie były blokowane, co pozwalało na wykonywanie żądań HTTP mimo wykluczenia publicznych modułów.
- CVE-2026-47135Wysokie
vm2 to otwarte źródło vm/sandbox dla Node.js. W wersjach przed 3.11.4, nadpisanie Symbol.for w setup-sandbox.js przechwytuje tylko 2 z 9 niebezpiecznych symboli cross-realm Node.js, co pozwala na uzyskanie rzeczywistych symboli cross-realm i kontrolowanie zachowania po stronie hosta.
- CVE-2026-44004Wysokie
Podatność w bibliotece vm2 dla Node.js przed wersją 3.11.0 pozwala uruchomionemu w sandboxie kodowi na wywołanie funkcji Buffer.alloc() z dowolnym rozmiarem, co prowadzi do alokacji pamięci bezpośrednio na stercie hosta. Ponieważ Buffer.alloc jest synchronicznym natywnym wywołaniem C++, opcja timeout w vm2 nie jest w stanie przerwać tej operacji, co umożliwia wyczerpanie pamięci hosta i awarię procesu.
- CVE-2026-44001Wysokie
Podatność w vm2 przed wersją 3.11.0 pozwala na ucieczkę z sandboksa poprzez konstruktor Promise, co powoduje nieobsłużone odrzucenie propagujące do hosta i crash procesu Node.js. Problem dotyczy wersji 3.10.5 i został załatany w 3.11.0.
- CVE-2026-43998Wysokie
W vm2 3.10.5, ograniczenie ścieżki require.root w NodeVM może zostać ominięte za pomocą dowiązań symbolicznych systemu plików, co pozwala kodowi w piaskownicy na ładowanie modułów spoza dozwolonego katalogu głównego w kontekście hosta. Ponieważ walidacja ścieżki używa path.resolve() (która nie rozwiązuje dowiązań symbolicznych), a ładowanie modułów używa natywnego require() Node.js (który je rozwiązuje), atakujący może załadować dowolne moduły hosta i uzyskać zdalne wykonanie kodu.
Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS

