Skip to content
Heist/ feed
Back to feed
High

vm2 before 3.11.7 Denylist Bypass via fs/promises

Type: advisorySources: OSV

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 file creation and writing were confirmed via fsp.writeFile(), and other fs/promises operations (cp, mkdir, rename, rm, rmdir, truncate, read operations, etc.) are also reachable. This issue is fixed in vm2 3.11.7.

Products
Not specified
Affected versions
Not specified
Fixed versions
Not specified
CVEs
CVE-2026-92958
Confirmed fixed CVEs
Not specified
Updated in this feed
3 Nov 2026, 02:48 UTC · Revision 1

Source evidence

vm2 before 3.11.7 Denylist Bypass via fs/promises

core-osv · Original source

Published 17 Sept 2026, 13:46 UTC

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 file creation and writing were confirmed via fsp.writeFile(), and other fs/promises operations (cp, mkdir, rename, rm, rmdir, truncate, read operations, etc.) are also reachable. This issue is fixed in vm2 3.11.7.

osv:CVE-2026-92958
Complete source record
{
  "id": "a47fd8b14ce49d999e58154e09b0548fd40e44c70e1ad58680a35fbd0da34988",
  "url": "https://osv.dev/vulnerability/CVE-2026-92958",
  "method": "structured",
  "payload": {
    "kind": "advisory",
    "title": "vm2 before 3.11.7 Denylist Bypass via fs/promises",
    "summary": "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 file creation and writing were confirmed via fsp.writeFile(), and other fs/promises operations (cp, mkdir, rename, rm, rmdir, truncate, read operations, etc.) are also reachable. This issue is fixed in vm2 3.11.7.",
    "evidence": "osv:CVE-2026-92958",
    "products": [],
    "severity": "high",
    "structured": {
      "id": "CVE-2026-92958",
      "aliases": [
        "CVE-2026-92958",
        "GHSA-6rh5-qq4q-97xh"
      ],
      "metrics": [
        {
          "type": "CVSS_V4",
          "score": "CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:H/VA:L/SC:N/SI:H/SA:L"
        }
      ],
      "affected": [
        {
          "ranges": [
            {
              "repo": "https://github.com/patriksimek/vm2",
              "type": "GIT",
              "events": [
                {
                  "introduced": "0"
                },
                {
                  "fixed": "0c5b63a228c0af88d4a0d364ab0b90df278d710e"
                }
              ],
              "database_specific": {
                "extracted_events": [
                  {
                    "range": [
                      {
                        "introduced": "0"
                      },
                      {
                        "fixed": "3.11.7"
                      }
                    ],
                    "source": "AFFECTED_FIELD",
                    "strategy": "StandardRange"
                  },
                  {
                    "range": [
                      {
                        "introduced": "2"
                      },
                      {
                        "last_affected": "3.11.6"
                      }
                    ],
                    "source": "DESCRIPTION"
                  }
                ]
              }
            }
          ],
          "versions": [
            "3.11.6",
            "v3.11.5",
            "v3.11.4",
            "v3.11.3",
            "v3.11.2",
            "v3.11.1",
            "v3.11.0",
            "v3.10.5",
            "v3.10.4",
            "v3.10.3",
            "v3.10.2",
            "v3.10.1",
            "v3.10.0",
            "3.9.19",
            "3.9.18",
            "3.9.17",
            "3.9.16",
            "3.9.15",
            "3.9.14",
            "3.9.13",
            "3.9.12",
            "3.9.11",
            "3.9.10",
            "3.9.9",
            "3.9.8",
            "3.9.7",
            "3.9.6",
            "3.9.5",
            "3.9.4",
            "3.9.3",
            "v3.9.2",
            "v3.9.1",
            "v3.9.0"
          ],
          "database_specific": {
            "source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-92958.json"
          }
        }
      ],
      "modified": "2026-10-28T02:30:25.349255089Z",
      "provider": "osv",
      "references": [
        "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/92xxx/CVE-2026-92958.json",
        "https://github.com/patriksimek/vm2/security/advisories/GHSA-6rh5-qq4q-97xh",
        "https://nvd.nist.gov/vuln/detail/CVE-2026-92958",
        "https://www.vulncheck.com/advisories/vm2-before-3.11.7-denylist-bypass-via-fs-promises"
      ],
      "provider_metadata": {
        "cwe_ids": [
          "CWE-269"
        ],
        "cna_assigner": "VulnCheck",
        "osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/92xxx/CVE-2026-92958.json"
      }
    },
    "related_cves": [
      {
        "value": "CVE-2026-92958",
        "evidence": "/id"
      }
    ],
    "security_relevant": true,
    "severity_evidence": "/severity/0/score"
  },
  "source_id": "core-osv",
  "document_id": 492015,
  "published_at": "2026-09-17T13:46:15.549+00:00"
}