CVE Catalog

CVE-2026-92958

HighCVSS 8.5
Published: Updated: Translated: NVD NIST

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, 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.

Risk Assessment

Sandboxed code can access host filesystem operations, including file creation and writing, even though the fs module was denied. This can lead to modification or disclosure of host data.

Recommendation

Upgrade vm2 to version 3.11.7 or later. Verify the builtin denylist configuration and do not rely solely on negative entries for subpaths.

Other vulnerabilities in vm2

See all
Original NVD description (English source)

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.

Vulnerability data from NVD (NIST) · CISA KEV · EPSS