Security1 distinct publisher3 min readUpdated
A time-of-check/time-of-use bug in the library many platforms use to run untrusted JavaScript lets guest code reach the host process. Fixes are in 6.2.0 and 7.0.1, and there is still no CVE.
The Watch · Security desk

Compiled by The WatchSomething wrong?How this is made
If your product runs customer-supplied JavaScript inside isolated-vm, the isolation you were charging for has been nominal. EndorLabs has disclosed a critical-severity type confusion in the library's ExternalCopy function that can end in remote code execution on the host system [1].
isolated-vm gives Node.js developers access to V8's Isolate interface, so each sandboxed script gets its own heap, execution state and garbage collector without a container or a VM around it [2][3]. That cheapness is the point, and it is why the library is widely used to execute untrusted JavaScript [4]. It is also why the failure matters: for many embedders, the C++ binding is the entire boundary.
The bug sits in the data path between Isolates. ExternalCopy serializes a value in one Isolate and reconstructs it in the other [5]. As a performance optimisation it accepts a transferList: large ArrayBuffers are named, and the backing memory is moved by detaching the buffer from the source and handing it to the destination [6]. During reconstruction the code walked the byte array list twice, and the second pass trusted what the first pass had seen [7]. Because an element of the transfer_list JavaScript array can be defined as a getter, the two walks need not return the same value, and an attacker can use that time-of-check/time-of-use gap to get an attacker-controlled pointer dereferenced [8].
The ExternalCopy constructor itself is only reachable from the host, which sounds like a containment argument until you read the next step: a guest can go through ivm.Reference, the mechanism the host uses to expose anything at all into the sandbox, to assemble the malicious transferList and fire the bug [9]. Outcomes run from a crash of the host process to control-flow hijack, which is where the RCE claim comes from [10].
The advisory is blunt about the blast radius. "Any embedder that runs untrusted code in an isolate and shares even one Reference into it is affected. Host code that passes a caller-influenced array as transferList is affected directly, without any guest," it reads [11]. So there are two populations here: sandbox operators who thought a single shared Reference was a harmless convenience, and host code with no guest anywhere near it that forwards a caller-influenced array into a transfer [12].
Patches are in isolated-vm 6.2.0 and 7.0.1, and the fix is to stop user JavaScript running during the copy at all rather than to sanity-check the re-read [13]. That is the right shape of fix, because as EndorLabs puts it, the vulnerability "lived in the native glue code," a layer written in a memory-unsafe language that manipulates raw V8 handles and backing-store pointers and re-reads attacker-controlled JavaScript objects mid-operation, where "a single unchecked cast on a re-read value was enough to turn a correct isolation primitive into a full escape" [14].
The awkward part for defenders: the bug has not been assigned a CVE identifier [15]. Dependency tooling keyed to CVE feeds has nothing to match on, so the check reduces to reading the isolated-vm version in your lockfile against 6.2.0 and 7.0.1 [16]. Also audit your own host code for any transferList built from caller input, since that path does not need a hostile guest to be a problem [12].
Follow any of these and your For You feed starts watching them — no settings page required.
Ranked by verification strength, evidence, and original report placement.
A critical-severity type confusion in the isolated-vm Node.js library could allow threat actors to achieve remote code execution on the host system; the bug impacts ExternalCopy and was detailed by EndorLabs.
Through isolated-vm, developers can access the V8 JavaScript engine's Isolate interface to build completely isolated JavaScript environments.
Each Isolate is a completely separated V8 instance with its own heap memory, execution state and garbage collector, enabling multiple sandboxed JavaScript instances on one machine without a container or virtual machine.
isolated-vm is widely used for executing untrusted JavaScript code within a V8 Isolate.
ExternalCopy is the function used to copy data across Isolates; it serializes the data in one Isolate and reconstructs it in the other instance.
For performance optimisation ExternalCopy uses a transferList: large ArrayBuffers are listed and the underlying memory is transferred by detaching the buffer from the source and handing it to the destination.
Evidence-backed comparisons of source perspectives and observed adoption signals. Read the methodology
Which Builder, Operator, and Investor concerns the observed source mix emphasized—not a truth score.
Evidence, demonstrated adoption, hype gap, incentives, and confidence are assessed independently, each on its own current evidence. How these are measured.
Specific mechanism and fixes documented, but single-source and CVE-less
The cluster carries an unusually concrete technical chain for a one-source story: the double iteration of the byte array list, the getter-based TOCTOU on transfer_list, the ivm.Reference pivot from guest to a host-only constructor, the memory-unsafe C++ serialization layer, and named patched releases 6.2.0 and 7.0.1. It is further anchored by a directly quoted upstream isolated-vm advisory defining who is affected. Against that, everything reaches us through one trade-press relay of one vendor's research, there is no CVE record to check the severity and scope against, and no proof-of-concept, telemetry or independent analysis is cited.
Reach and patch uptake unquantified
The source calls isolated-vm 'widely used' for running untrusted JavaScript but supplies no download counts, dependent-project figures or named embedders, and reports no uptake data for the 6.2.0 / 7.0.1 fixes and no observed exploitation. Fixed releases existing shows remediation is available, not that it has been adopted, so the supplied material does not support a defensible adoption score.
Headline firmer than the hedged body impact
The framing 'Leads to RCE on Host' is a step stronger than the body, which says exploitation yields a crash or control-flow hijack that only potentially enables remote code execution. Nothing indicates exploitation in the wild, and no CVE or affected-product list exists to substantiate the 'critical' label externally. The overstatement is mild rather than severe, because the underlying mechanism is described precisely, the upstream advisory independently confirms a broad affected condition, and fixes were shipped.
Vendor research relayed by trade press
The technical findings and the quoted severity characterisation originate with Endor Labs, a commercial software-supply-chain security vendor whose visibility benefits from publishing a sandbox-escape discovery in a widely used dependency, and the report attributes its key analytical statements to that vendor. The relaying publisher is security trade press that appends promotional related-vulnerability links. Mitigating this, the upstream isolated-vm advisory is quoted directly and the patched version numbers are verifiable, so the incentive load is moderate rather than dominant.
Mechanism and fix confident, scope and impact uncertain
Confidence is moderate. The vulnerability's mechanism, the affected conditions stated by the upstream advisory, and the remediation versions are stated precisely enough to act on, and the two derived readings follow directly from that text. But the whole cluster rests on one publisher relaying one vendor, no CVE exists to cross-check, adoption and patch uptake are unmeasurable from the material, and the impact claim is hedged in the body while asserted in the headline.
security
A sandbox escape with no CVE: isolated-vm patches, and a million weekly installs have to move1 distinct publisher
product
The sandbox teams fled vm2 for now has its own guest-to-host escape1 distinct publisher
build
A default that is not a guard: tinycolor2's palette functions never return on analogous(-1)1 distinct publisher
build
A GAN beauty filter is a device budget allocation, not a feature toggle1 distinct publisher
Distinct publishers with included, body-backed reporting in this cluster.
1 article · August 21, 2026