---
title: "CVE-2026-92959: vm2 before 3.11.8 allowAsync Bypass via Promise Thenable"
url: https://erroneo.us/security/cve/CVE-2026-92959/
description: "CVE-2026-92959 (patriksimek vm2): vm2 before 3.11.8 does not fully enforce the allowAsync: false option in VM and NodeVM. While localPromise.prototype.then…"
type: vulnerability-record
section: "Security Digest"
date_published: 2026-09-17
date_modified: 2026-10-07
publisher: erroneo.us
author: erroneo.us Security Desk
cve: "CVE-2026-92959"
kev: false
cvss: 7.1
epss: 0.00449
license: All rights reserved. Quote with attribution and a link.
---

# CVE-2026-92959: vm2 before 3.11.8 allowAsync Bypass via Promise Thenable

**Signal:** Normal patch cycle. No exploitation signal; fix it in your next routine update if you are affected. (Computed from CISA KEV, EPSS and CVSS; not an editorial verdict.)

## Should you act?

- Not in CISA KEV , but CISA’s SSVC assessment records a public proof-of-concept, so attack code exists.
- EPSS 0.4% , percentile 38: FIRST’s model estimates a 0.4% chance of exploitation activity in the next 30 days, higher than 38% of all scored CVEs (low). EPSS is a probability, not a verdict.
- Needs an account (low (any account)). Exposure depends on who can log in.
- Editorial verdict: Check exposure. vm2: 22 Critical Sandbox Escapes, Fixed in 3.12.2 — If anything outside your trust boundary can get code into vm2, upgrade to 3.12.2 today and plan to move that code out of process; if vm2 only runs your own code, upgrade on a normal cycle.

## What it is

vm2 before 3.11.8 does not fully enforce the allowAsync: false option in VM and NodeVM. While localPromise.prototype.then is replaced with a handler that throws 'Async not available', the sandbox's Promise static methods (Promise.resolve, Promise.all, Promise.race, Promise.any, and Promise.allSettled) still assimilate attacker-supplied thenables: native promise resolution performs PromiseResolveThenableJob and invokes the sandboxed code's then method in a microtask without passing through the patched then, so the async restriction is never applied. As a result, sandboxed script can schedule work that runs after VM.run() or NodeVM.run() has returned and outside the configured timeout, continuing to execute after the host believes execution is complete.

## Affected products (CVE record)

- patriksimek vm2: < 3.11.8

## Severity

- VulnCheck CVSS 4.0: 7.1 `CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:L/VA:H/SC:N/SI:N/SA:N`
- VulnCheck CVSS 3.1: 7.1 `CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:H`

## Exploitation

- CISA KEV: not listed (no confirmed in-the-wild exploitation known to CISA).
- CISA SSVC assessment: exploitation poc , automatable no , technical impact partial .
- FIRST EPSS (model of 2026-10-21): 0.45% probability of exploitation activity in the next 30 days; percentile 38.

## Sources

- [GitHub Security Advisory (GHSA-f8gf-w286-fmq2)](https://github.com/patriksimek/vm2/security/advisories/GHSA-f8gf-w286-fmq2)
- [CVE.org record CVE-2026-92959](https://www.cve.org/CVERecord?id=CVE-2026-92959)
- [NVD entry CVE-2026-92959](https://nvd.nist.gov/vuln/detail/CVE-2026-92959)
- [VulnCheck Advisory: vm2 before 3.11.8 allowAsync Bypass via Promise Thenable](https://www.vulncheck.com/advisories/vm2-before-3.11.8-allowasync-bypass-via-promise-thenable)

---
Source page: https://erroneo.us/security/cve/CVE-2026-92959/ · Security Digest: https://erroneo.us/security/ · More: https://erroneo.us/llms.txt
