CodeVetter · Repo Unpack · Risk map
microsoft/playwright
The inspected code intentionally exercises powerful host, browser, network, and filesystem capabilities. The observations below identify trust boundaries and maintenance-sensitive branches, not confirmed vulnerabilities. Some controls are explicitly configurable or bypassed in trusted modes. Test exclusions and asynchronous cleanup are source-level limitations, not evidence of a failing implementation.
- browser_run_code_unsafe explicitly describes itself as RCE-equivalent, compiles supplied JavaScript with vm.runInContext, exposes page and host fetch, and can load snippets from a resolved filename.
- Agent checkFile resolves symlinks and restricts filenames to workspace/output roots, but explicitly bypasses checks for code-origin calls, allowUnrestrictedFileAccess, or skillMode.
- WebServerPlugin executes config.webServer.command with shell:true, inherited process environment, configured environment additions, and a config-relative working directory.
- Browser launch accepts caller-selected executables and environments and creates profile/artifact directories outside the checkout; launch and teardown changes affect native processes and host filesystem state.
- storageState writes cookie/origin data and optional credentials as plain JSON to a caller path; context preparation also reads caller-selected certificate/key/PFX paths into protocol buffers.
- API requests can disable TLS verification through ignoreHTTPSErrors, and that choice propagates across redirects; cross-origin redirects strip Authorization while Basic challenges may trigger credential retry.
- Storage restore includes deliberate asynchronous cleanup: some service-worker unregister operations are not awaited, IndexedDB deletions omit callback waits, and msedge restore tests document a cache-clear stall exclusion.
- Protocol compatibility is coupled across generated client/server channels, validators, and dispatchers; dispatch rejects schema/method mismatches, and the generator writes multiple outputs and exits nonzero when they change.