Description
vm2 3.11.3 through 3.11.6 exposes the host Node.js crypto module to a NodeVM sandbox when the crypto builtin is allowed. The module is presented via a recursive read-only proxy, but its callable exports still execute with host-process authority. Sandboxed JavaScript can therefore call crypto.setEngine() with a filesystem path to an attacker-supplied native library (for example, one bundled in an untrusted plugin package already written to disk); OpenSSL asks the operating-system dynamic loader to load the file, and the library's constructor executes native code in the host process before engine-symbol validation rejects it. Exploitation requires only the crypto builtin and does not require fs, process, module, child_process, worker_threads, vm, or inspector access, resulting in a sandbox escape and arbitrary native code execution. Fixed in 3.11.7.
Published: 2026-09-17
Score: 9.4 Critical
EPSS: < 1% Very Low
KEV: No
Impact: Native code execution via sandbox escape
Action: Immediate Patch
AI Analysis

Impact

vm2 3.11.3 through 3.11.6 expose the host Node.js crypto module to a sandboxed NodeVM when the crypto builtin is allowed. The exposed module is wrapped in a read‑only proxy, but its callable exports run with host‑process authority. A malicious script can therefore invoke crypto.setEngine() with a filesystem path to an attacker‑supplied native library. OpenSSL loads the library, executing its constructor code in the host process before performing engine‑symbol validation, which then rejects the library. The result is arbitrary native code execution in the host process, a classic remote code execution vulnerability.

Affected Systems

The affected product is patriksimek vm2. Versions 3.11.3, 3.11.4, 3.11.5, and 3.11.6 are vulnerable. The issue has been fixed in version 3.11.7.

Risk and Exploitability

The CVSS score of 9.4 reflects a critical severity. The EPSS score is not available, and the vulnerability is not listed in CISA’s KEV catalog. Exploitation requires only that the crypto builtin be present in the sandbox; no additional modules such as fs, process, module, child_process, worker_threads, vm, or inspector are needed. This means that any application exposing the crypto builtin through vm2 can be exploited to achieve host‑process code execution, making the attack vector high and the risk significant for systems that run untrusted code.

Generated by OpenCVE AI on September 17, 2026 at 21:44 UTC.

Remediation

No solution or workaround provided in the CVE record.

OpenCVE Recommended Actions

  • Upgrade vm2 to version 3.11.7 or later to apply the official fix.
  • If an immediate upgrade is not feasible, configure NodeVM to exclude the crypto builtin entirely or otherwise prevent sandboxed code from accessing crypto.setEngine.
  • As a last resort, run untrusted sandboxed code in a separate container or isolated process that lacks permission to load host system libraries, ensuring that any attempt to load a native library does not affect the host process.

Generated by OpenCVE AI on September 17, 2026 at 21:44 UTC.

Tracking

Sign in to view the affected projects.

Advisories
Source ID Title
Github GHSA Github GHSA GHSA-46pr-c5wc-xffx vm2 crypto builtin loads attacker native code through setEngine
History

Thu, 17 Sep 2026 21:30:00 +0000

Type Values Removed Values Added
First Time appeared Patriksimek
Patriksimek vm2
Vendors & Products Patriksimek
Patriksimek vm2

Thu, 17 Sep 2026 15:30:00 +0000

Type Values Removed Values Added
Metrics ssvc

{'options': {'Automatable': 'no', 'Exploitation': 'poc', 'Technical Impact': 'total'}, 'version': '2.0.3'}


Thu, 17 Sep 2026 14:00:00 +0000

Type Values Removed Values Added
Description vm2 3.11.3 through 3.11.6 exposes the host Node.js crypto module to a NodeVM sandbox when the crypto builtin is allowed. The module is presented via a recursive read-only proxy, but its callable exports still execute with host-process authority. Sandboxed JavaScript can therefore call crypto.setEngine() with a filesystem path to an attacker-supplied native library (for example, one bundled in an untrusted plugin package already written to disk); OpenSSL asks the operating-system dynamic loader to load the file, and the library's constructor executes native code in the host process before engine-symbol validation rejects it. Exploitation requires only the crypto builtin and does not require fs, process, module, child_process, worker_threads, vm, or inspector access, resulting in a sandbox escape and arbitrary native code execution. Fixed in 3.11.7.
Title vm2 3.11.3 through 3.11.6 Native Code Execution via crypto.setEngine
Weaknesses CWE-114
References
Metrics cvssV3_1

{'score': 9.9, 'vector': 'CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H'}

cvssV4_0

{'score': 9.4, 'vector': 'CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H'}


cve-icon MITRE

Status: PUBLISHED

Assigner: VulnCheck

Published:

Updated: 2026-09-17T14:26:31.623Z

Reserved: 2026-09-17T12:42:34.828Z

Link: CVE-2026-92939

cve-icon Vulnrichment

Updated: 2026-09-17T14:26:25.517Z

cve-icon NVD

Status : Deferred

Published: 2026-09-17T14:17:58.970

Modified: 2026-09-17T15:17:00.650

Link: CVE-2026-92939

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-09-17T21:45:16Z

Weaknesses