CVE-2026-92948: vm2 3.9.6 through 3.11.5 Sandbox Escape via node:test

Published Sep 17, 2026
·
Updated

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 DANGEROUSBUILTINS 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 receives a readonly proxy to the host module. Calls to node:test.run() are forwarded to the host implementation, which spawns a separate Node process for process-isolated test execution and passes through attacker-controlled execArgv values; supplying --eval=<JavaScript> therefore executes arbitrary JavaScript in an unrestricted host Node process outside the NodeVM sandbox. Fixed in vm2 3.11.7.

Affected Software

1 affected component
vm2>=3.9.6<=3.11.6

Remediation

Recommended actions to resolve this vulnerability, in priority order.

  1. Upgrade

    Upgrade vm2 to a version that resolves this vulnerability.

    Fixed in 3.11.7
  2. Compensating control

    If you are using vm2 on Node.js 24+ and have an explicit require allowlist that includes builtin ['node:test'] (e.g., require: { builtin: ['node:test'] }), remove/avoid allowing the node:test builtin to prevent the sandbox escape described for vm2 versions >= 3.9.6 and <= 3.11.6.

Event History

Sep 17, 2026
CVE Published
via MITRE·01:46 PM
Data Sourced
via MITRE·01:46 PM
DescriptionSeverityWeakness

Frequently Asked Questions

1

Which deployments are exposed to this escape path?

The affected path requires Node.js 24 or newer and a NodeVM configuration that explicitly permits the node:test builtin, such as require: { builtin: ['node:test'] }. Deployments that do not allow node:test are not exposed through this specific bypass.

2

What access does an attacker need to exploit it?

An attacker needs the ability to execute JavaScript inside the affected NodeVM sandbox. They can then require node:node:test and supply attacker-controlled execArgv to node:test.run() to execute JavaScript in an unrestricted host Node process.

3

Is a default NodeVM builtin configuration affected?

This issue depends on the embedder explicitly allowlisting node:test. The described bypass does not apply unless that builtin has been enabled.

4

What can be done before upgrading?

Remove node:test from the NodeVM builtin allowlist. The described exploit path also requires Node.js 24 or newer, so environments not running Node.js 24+ are not affected by this specific condition; upgrade vm2 to 3.11.7 when possible.

5

How can I identify vulnerable configurations?

Identify vm2 installations from 3.9.6 through 3.11.6 running on Node.js 24 or newer, then review NodeVM require.builtin settings for node:test. Also search sandboxed code for require('node:node:test') and calls to node:test.run() with controlled execArgv values.

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203