Description
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.
Published: 2026-09-17
Score: 6.3 Medium
EPSS: < 1% Very Low
KEV: No
Impact: Bypass of frozen and read‑only object protections
Action: Immediate Update
AI Analysis

Impact

The vm2 library, versions 3.9.6 through 3.11.6, does not correctly enforce the restrictions defined by vm.freeze() and vm.readonly(). When a sandboxed script interrogates the property descriptor of a frozen object, the accessor descriptor can be retrieved even if the object is marked read‑only. The attacker can then invoke the underlying host setter to modify the property.

Affected Systems

The issue affects the patriksimek vm2 package, a Node.js sandboxing utility. Any application that imports vm2 within the affected version range can expose host objects to sandboxed code; the vulnerability applies to all released builds between 3.9.6 and 3.11.6 inclusive, and the fix is implemented in 3.11.7.

Risk and Exploitability

With a CVSS score of 6.3, the vulnerability has moderate severity. There is no EPSS data, and the vulnerability is not listed in KEV, suggesting limited exploitation awareness. Exploitation requires the attacker to control or influence code that is executed in the vm2 sandbox, using JavaScript functions like Object.getOwnPropertyDescriptor or __lookupSetter__ to retrieve the host setter and modify a frozen property. Because of these prerequisites, the attack is likely limited to scenarios where the sandboxed code is granted access to host objects.

Generated by OpenCVE AI on September 17, 2026 at 23:38 UTC.

Remediation

No solution or workaround provided in the CVE record.

OpenCVE Recommended Actions

  • Upgrade vm2 to version 3.11.7 or later, ensuring the property‑descriptor limitation bug is fixed.
  • If an upgrade cannot be performed immediately, do not expose host objects with setter functions to sandboxed code; remove or replace setters with no‑op functions before passing objects into vm2.
  • Apply additional runtime checks to verify that frozen or read‑only objects remain unchanged, for example by deep‑freezing objects after removal of setters and validating that setter calls throw or no‑op.
  • Verify that any host interfaces used by the sandbox do not provide accessor descriptors that can be exploited; sanitize inputs and limit the surface area of exposed host objects.

Generated by OpenCVE AI on September 17, 2026 at 23:38 UTC.

Tracking

Sign in to view the affected projects.

Advisories
Source ID Title
Github GHSA Github GHSA GHSA-633r-hq9m-c4ff vm2: vm.freeze()/vm.readonly() bypass via accessor descriptor
History

Wed, 23 Sep 2026 03:30:00 +0000

Type Values Removed Values Added
Metrics ssvc

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


Fri, 18 Sep 2026 00:15:00 +0000

Type Values Removed Values Added
Weaknesses CWE-807
References
Metrics threat_severity

None

threat_severity

Moderate


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

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

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

Type Values Removed Values Added
Description 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.
Title vm2 3.9.6 before 3.11.7 Sandbox Bypass via Accessor Descriptor
Weaknesses CWE-471
References
Metrics cvssV3_1

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

cvssV4_0

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


cve-icon MITRE

Status: PUBLISHED

Assigner: VulnCheck

Published:

Updated: 2026-09-21T17:14:33.106Z

Reserved: 2026-09-17T12:43:03.568Z

Link: CVE-2026-92949

cve-icon Vulnrichment

Updated: 2026-09-21T17:14:27.043Z

cve-icon NVD

Status : Deferred

Published: 2026-09-17T14:18:00.463

Modified: 2026-09-21T18:17:15.850

Link: CVE-2026-92949

cve-icon Redhat

Severity : Moderate

Publid Date: 2026-09-17T13:46:09Z

Links: CVE-2026-92949 - Bugzilla

cve-icon OpenCVE Enrichment

Updated: 2026-09-17T23:45:17Z

Weaknesses
  • CWE-471

    Modification of Assumed-Immutable Data (MAID)

  • CWE-807

    Reliance on Untrusted Inputs in a Security Decision