registry  /  betterwright  /  0.4.0

betterwright@0.4.0

A persistent, policy-guarded Playwright browser for AI agents with network controls, trusted credential filling, proof screenshots, and CAPTCHA helpers.

Static Scan Results

scanned 3h ago · by rust-scanner

Static analysis flagged 13 finding(s) at 72.0% confidence. This version is warn-only unless an AI or security-team review confirms malicious behavior.

Static reason
One or more suspicious static signals were detected.

Decision evidence

public snapshot
Behavioral surface
Source
ChildProcessCryptoDynamicRequireEnvironmentVarsFilesystemNetworkShell
Supply chain
HighEntropyStringsUrlStrings
ManifestNo manifest risk signals triggered.
scanned 16 file(s), 201 KB of source, external domains: 127.0.0.1, example.com, example.org

Source & flagged code

4 flagged · loading source
bin/betterwright.mjsView file
8L9: import { spawnSync } from "node:child_process"; L10: import fs from "node:fs";
High
Child Process

Package source references child process execution.

bin/betterwright.mjsView on unpkg · L8
17L18: const require = createRequire(import.meta.url); L19: const PINNED_PLAYWRIGHT_VERSION = "1.61.1";
Medium
Dynamic Require

Package source references dynamic require/import behavior.

bin/betterwright.mjsView on unpkg · L17
src/chrome.mjsView file
59const configuredHome = String( L60: options.home || process.env.BETTERWRIGHT_HOME || path.join(os.homedir(), ".betterwright"), L61: ); L62: const port = Math.max(1024, Math.min(Number(options.port) || DEFAULT_CDP_PORT, 65535)); L63: const endpoint = `http://127.0.0.1:${port}`; L64: if (await endpointReady(endpoint)) { ... L71: fs.mkdirSync(profileDir, { recursive: true, mode: 0o700 }); L72: const child = spawn( L73: executable,
High
Same File Env Network Execution

A single source file combines environment access, network access, and code or shell execution; review context before blocking.

src/chrome.mjsView on unpkg · L59
src/worker.mjsView file
11import crypto from "node:crypto"; L12: import dns from "node:dns/promises"; L13: import fs from "node:fs"; ... L45: L46: const playwrightCoreDir = process.env.BETTERWRIGHT_PLAYWRIGHT_CORE_PATH || ""; L47: const playwrightModule = playwrightCoreDir ... L117: function send(message) { L118: process.stdout.write(`${JSON.stringify(message)}\n`); L119: } ... L146: L147: function mkdirPrivate(dir) { L148: fs.mkdirSync(dir, { recursive: true, mode: 0o700 });
High
Cloud Metadata Access

Source reaches cloud instance metadata or link-local credential endpoints.

src/worker.mjsView on unpkg · L11

Findings

4 High4 Medium5 Low
HighChild Processbin/betterwright.mjs
HighShell
HighSame File Env Network Executionsrc/chrome.mjs
HighCloud Metadata Accesssrc/worker.mjs
MediumDynamic Requirebin/betterwright.mjs
MediumNetwork
MediumEnvironment Vars
MediumStructural Risk Force Deep Review
LowNon Install Lifecycle Scripts
LowScripts Present
LowFilesystem
LowHigh Entropy Strings
LowUrl Strings