p PatchFirst

PatchFirst · Latest vulnerabilities

vm2 3.10.5: known vulnerabilities

Known vulnerabilities affecting vm2 3.10.5: 54. Compare the fixes below with your installed release.

RSS ↗
Filter vulnerabilities
Clear filters

Vulnerabilities: 54

  1. CVE-2026-100723

    Medium · CVSS 6.9EPSS 0.32%Public exploitFix available

    vm2 before 3.12.2 Memory Disclosure via zlib Buffer Pool

    vm2 before 3.12.2 does not apply its Buffer backing-store ownership invariant (byteOffset === 0 and buffer.byteLength === length) to Buffers returned from host builtin modules. When an application explicitly exposes Node's zlib module through NodeVM's builtin allowlist (require: { builtin: ['zlib'] }), zlib.deflateSync can return a Buffer backed by Node's shared small-buffer pool whose .buffer is the entire pool. Untrusted guest code can construct a full-width view of that ArrayBuffer (Buffer.from(result.buffer, 0, result.buffer.byteLength)) to read and modify bytes belonging to unrelated host buffers, disclosing and corrupting host-realm mem

    • Update to 3.12.2
    Published Updated
  2. CVE-2026-100722

    High · CVSS 8.9EPSS 0.26%Public exploitFix available

    vm2 before 3.12.2 Host Process Termination via Construct Trap

    vm2 before 3.12.2 does not apply host-side Promise rejection handling in the sandbox-to-host construct trap. In BaseHandler, the apply trap calls markHostPromiseHandled() on the returned value, but the adjacent construct path returns the result of Reflect.construct without the same sanitization. If an embedder exposes a constructable host function whose constructor returns a native rejected Promise, an untrusted script executed via VM.run can invoke it with `new` and ignore the result; the rejected host Promise crosses the bridge unhandled and, under Node's strict unhandled-rejection policy, is promoted to an uncaught exception that terminate

    • Update to 3.12.2
    Published Updated
  3. CVE-2026-100721

    Critical · CVSS 9.5EPSS 0.4%Public exploitFix available

    vm2 before 3.12.2 Authorization Bypass via Custom Resolver

    vm2 before 3.12.2 contains an authorization bypass in the NodeVM external-module resolver. When an embedder configures `require.external` with a custom resolver (and `context: 'host'`), `LegacyResolver.customResolve` in lib/resolver-compat.js records the resolved module directory in `this.externals` as `new RegExp('^' + escapeRegExp(resolvedPath))`, without requiring a path separator or end-of-string boundary. Untrusted guest code can therefore require the allowlisted module (e.g. `foo`) and then require the absolute path of a non-allowlisted sibling whose path merely shares the resolved prefix (e.g. `.../node_modules/foo2/index.js`); the sib

    • Update to 3.12.2
    Published Updated
  4. CVE-2026-93605

    Critical · CVSS 10.0EPSS 0.73%Public exploitFix available

    vm2 NodeVM before 3.12.1 Remote Code Execution via child_process

    vm2 NodeVM versions before 3.12.1 contain a sandbox escape vulnerability where the DANGEROUS_BUILTINS denylist omits child_process despite blocking other host-spawning modules. Attackers can require child_process and execute arbitrary commands on the host system when NodeVM is configured with builtin:['*'] or explicit child_process allowance.

    • Update to 3.12.1
    Published Updated
  5. CVE-2026-92963

    Medium · CVSS 6.9EPSS 0.34%Fix available

    vm2 before 3.11.2 Information Disclosure via Internal State

    vm2 versions before 3.11.2 fail to properly restrict access to the VM2_INTERNAL_STATE_DO_NOT_USE_OR_PROGRAM_WILL_FAIL global variable. Attackers can access this internal state object through globalThis to retrieve sensitive sandbox internals.

    • Update to 3.11.2
    Published Updated
  6. CVE-2026-92962

    Low · CVSS 2.1EPSS 0.15%Fix available

    vm2 before 3.11.4 Defense Invariant Violation via setup-sandbox.js

    vm2 is a sandbox for running untrusted JavaScript. In vm2 versions up to and including 3.11.3, the defaultSandboxPrepareStackTrace function in lib/setup-sandbox.js builds its output array using prototype-walking index assignment (lines[lines.length] = value) rather than a prototype-bypassing define-property primitive. Because this bridge-internal array is allocated in the sandbox realm, code inside the sandbox can install an accessor on Array.prototype for the relevant index; the accessor is then invoked whenever the sandbox reads error.stack (or otherwise triggers Error.prepareStackTrace), allowing sandbox code to observe and intercept each

    • Update to 3.11.4
    Published Updated
  7. CVE-2026-92961

    High · CVSS 8.7EPSS 0.53%Fix available

    vm2 before 3.11.6 Memory Exhaustion DoS via bufferAllocLimit Bypass

    vm2 before 3.11.6 fails to enforce bufferAllocLimit on ArrayBuffer, SharedArrayBuffer, and TypedArray constructors, allowing attackers to allocate arbitrary host memory. Attackers can bypass the buffer allocation cap by using these V8 intrinsics to exhaust host process memory and trigger out-of-memory conditions.

    • Update to 3.11.6
    Published Updated
  8. CVE-2026-92960

    Critical · CVSS 10.0EPSS 0.47%Fix available

    vm2 before 3.11.6 Process-wide State Exposure via os and dns

    vm2 before 3.11.6 fails to restrict access to os and dns builtins under the builtin: ['*'] configuration, allowing sandbox code to read host process identity and network topology. Attackers can invoke dns.setServers() to hijack the host process DNS resolver globally, redirecting all subsequent host DNS queries through an attacker-controlled resolver.

    • Update to 3.11.6
    Published Updated
  9. CVE-2026-92959

    High · CVSS 7.1EPSS 0.45%Public exploitFix available

    vm2 before 3.11.8 allowAsync Bypass via Promise Thenable

    vm2 before 3.11.8 does not fully enforce the allowAsync: false option in VM and NodeVM. While localPromise.prototype.then is replaced with a handler that throws 'Async not available', the sandbox's Promise static methods (Promise.resolve, Promise.all, Promise.race, Promise.any, and Promise.allSettled) still assimilate attacker-supplied thenables: native promise resolution performs PromiseResolveThenableJob and invokes the sandboxed code's then method in a microtask without passing through the patched then, so the async restriction is never applied. As a result, sandboxed script can schedule work that runs after VM.run() or NodeVM.run() has re

    • Update to 3.11.8
    Published Updated
  10. CVE-2026-92958

    High · CVSS 8.4EPSS 0.38%Fix available

    vm2 before 3.11.7 Denylist Bypass via fs/promises

    vm2 through 3.11.6 contains a builtin-module denylist bypass in NodeVM. When the embedder uses the builtin wildcard together with negative entries (e.g. require: { builtin: ['*', '-fs', '-child_process'] }), negative entries are matched by exact module name in lib/builtin.js, so -fs removes only the builtin named fs and does not remove builtin subpaths such as fs/promises. Sandboxed code can therefore call require('fs/promises') or require('node:fs/promises') and reach the promise-based filesystem API despite fs being denied; node: prefix handling is likewise inconsistent (a -node:fs/promises entry does not block require('fs/promises')). Host

    • Update to 3.11.7
    Published Updated
  11. CVE-2026-92957

    Critical · CVSS 9.4EPSS 0.54%Fix available

    vm2 before 3.11.7 NodeVM Builtin Deny-List Bypass via node: Prefix

    vm2 through 3.11.6 does not normalize `node:`-prefixed builtin specifiers when evaluating user-supplied negative (deny) entries in a NodeVM wildcard require policy. Although NodeVM strips the `node:` prefix during require() resolution, negative wildcard entries are matched by exact string comparison against the canonical builtin names, so a policy such as `new NodeVM({ require: { builtin: ['*', '-node:child_process'] } })` fails to deny the canonical `child_process` module. Sandboxed code can therefore obtain the host `child_process` builtin via `require('child_process')` or `require('node:child_process')`, gaining references to process-spawn

    • Update to 3.11.7
    Published Updated
  12. CVE-2026-92956

    Critical · CVSS 10.0EPSS 0.59%Public exploitFix available

    vm2 3.10.1 through 3.11.6 Sandbox Escape via WebAssembly.compileStreaming

    vm2 versions 3.10.1 through 3.11.6 contain a sandbox escape reachable from a default `new VM()` sandbox when running on Node.js 26. WebAssembly.compileStreaming and WebAssembly.instantiateStreaming can produce a raw host-realm Promise that rejects with a host-realm error object; by controlling Symbol.species via Promise.prototype.finally, sandbox code receives that raw host error, walks from the host error constructor to the host Function constructor, and recovers the real host `process` object, gaining host Node.js capabilities (e.g. access to host modules such as fs) in the context of the process running the sandbox. No NodeVM, require perm

    • Update to 3.11.7
    Published Updated
  13. CVE-2026-92955

    Critical · CVSS 10.0EPSS 0.71%Public exploitFix available

    vm2 before 3.11.8 Sandbox Escape via NodeVM

    vm2 before 3.11.8 contains a sandbox escape vulnerability in NodeVM that allows attackers to access the host __proto__ getter/setter through console._stdout and console._stderr. Attackers can overwrite EventEmitter.prototype.emit and trigger process events to execute code with process context, bypassing code generation restrictions.

    • Update to 3.11.8
    Published Updated
  14. CVE-2026-92954

    Critical · CVSS 9.2EPSS 0.49%Public exploitFix available

    vm2 3.10.0 through 3.11.7 Denial of Service via Host Promise

    vm2 is a sandbox library for running untrusted JavaScript in Node.js. In versions >= 3.10.0 and <= 3.11.7, Promises returned from the host realm into the sandbox are not marked as handled at the bridge boundary; only Promises created inside the sandbox are wrapped with a rejection-swallowing handler (lib/setup-sandbox.js), and the bridge only installs host-side rejection sanitizers when sandbox code calls .then/.catch/.finally. As a result, code running in the sandbox can invoke a host function that returns a rejected Promise (for example events.once() exposed via the NodeVM events builtin, or any embedder-provided Promise-returning API) and

    • Update to 3.11.8
    Published Updated
  15. CVE-2026-92951

    Critical · CVSS 9.4EPSS 0.54%Public exploitFix available

    vm2 before 3.11.7 Module Allowlist Bypass via Custom Resolver

    vm2 before 3.11.7 contains an incorrect authorization vulnerability in the external package allowlist check that uses non-exact substring matching instead of full package-name boundary validation. Attackers can bypass the allowlist by requiring a colliding package name that contains an allowlisted package substring, causing vm2 to load and execute unauthorized host packages in the host context.

    • Update to 3.11.7
    Published Updated
  16. CVE-2026-92950

    Critical · CVSS 9.3EPSS 0.2%Public exploitFix available

    vm2 before 3.11.7 Sandbox Escape via CLI require

    vm2 before 3.11.7 contains a sandbox escape vulnerability in the CLI tool that allows attackers to execute arbitrary code in the host Node.js process. Attackers can supply a malicious script file to the vm2 CLI that uses require(__filename) to re-execute itself in the host realm, bypassing sandbox isolation and accessing host modules like fs and child_process.

    • Update to 3.11.7
    Published Updated
  17. CVE-2026-92949

    Medium · CVSS 6.3EPSS 0.32%Public exploitFix available

    vm2 3.9.6 before 3.11.7 Sandbox Bypass via Accessor Descriptor

    vm2 versions from 3.9.6 before 3.11.7 fail to properly restrict access to accessor properties on frozen objects, allowing sandboxed scripts to bypass vm.freeze() and vm.readonly() protections. Attackers can use Object.getOwnPropertyDescriptor() or __lookupSetter__() to extract and invoke host object setters directly, mutating properties the embedder explicitly marked read-only.

    • Update to 3.11.7
    Published Updated
  18. CVE-2026-92948

    Critical · CVSS 9.4EPSS 0.65%Public exploitFix available

    vm2 3.9.6 through 3.11.5 Sandbox Escape via node:test

    vm2 versions >= 3.9.6 and <= 3.11.6 are affected by a NodeVM builtin allowlist bypass that permits a sandbox escape on Node.js 24 and newer when the embedder explicitly allows the node:test builtin (e.g. require: { builtin: ['node:test'] }). On Node.js 24+, module.builtinModules exposes the scheme-only key node:test, which is not covered by vm2's family-based DANGEROUS_BUILTINS protection, so it is stored in the generic host-passthrough loader. Because requireImpl() in lib/setup-node-sandbox.js strips a single 'node:' prefix before the builtin lookup, sandbox code calling require('node:node:test') resolves to the stored node:test key and rece

    • Update to 3.11.7
    Published Updated
  19. CVE-2026-92947

    Critical · CVSS 10.0EPSS 0.48%Public exploitFix available

    vm2 before 3.11.7 Memory Disclosure via Buffer Pool

    vm2 before 3.11.7 exposes Node's shared Buffer pool to sandboxed code, allowing disclosure of host memory used by Buffer.from, Buffer.concat, and related allocations. Sandboxed code can read and write to host-realm buffers by acquiring ArrayBuffers from small allocations, leading to sensitive data exposure and potential denial-of-service.

    • Update to 3.11.7
    Published Updated
  20. CVE-2026-92946

    Critical · CVSS 10.0EPSS 0.86%Public exploitFix available

    vm2 before 3.11.7 Remote Code Execution via require.external

    vm2 before 3.11.7 contains a remote code execution vulnerability when require.external is enabled without an explicit require.root that excludes node_modules. Sandboxed code can require vm2's own package, instantiate an unrestricted NodeVM instance, and execute arbitrary host OS commands via child_process.

    • Update to 3.11.7
    Published Updated

Check your server

Check your installed stack and versions against the current vulnerability feeds.

Check your server →