po-browse-tool@0.0.0-alpha.132
CAUTION· install onlyPublisher claims: "MCP server for browser automation using Playwright with profile management, page registry, and multi-browser support" Observed in sandbox: no network, touches nothing outside the project, writes no memory.
Coverage
Nothing executable in the bundle ran; the trace covers the install step only.- Tested
- every file read, file written and host contacted by what ran
- Not tested
- use of the skill by an agent
What this means for the label: Caution here covers what ran. The server's tools were not exercised with a real credential, so nothing about their behavior is asserted; the credential summary below says what to do with that.
Before you give it your token
- It will ask for
SE_VNC_PASSWORDConfiguration, not credentials: __HOOKS_SOURCE_DIR__, BROWSE_TOOL_DEBUG_CUSTOM_TOOLS, BROWSE_TOOL_DEBUG_EXTENSION_RECORDING, DISPLAY, NAME, PLAYWRIGHT_HOST, WAYLAND_DISPLAY- Where it talks to
- no vendor host named in the codeAlso docker.internal — not the publisher's domain; check what for before connecting.
- What the honeypot saw
- no credential files read · no network
- What we could not test
- use of the skill by an agent
Connect it with a scoped credential, under the guard, and read the third-party hosts first. The code names docker.internal as well as its own vendor. The guard injects SE_VNC_PASSWORD only into requests to the host you bind (and its subdomains) and refuses the rest.
Never paste a credential into a chat, a ticket or a report, including ours. How the guard holds it.
Is [email protected] safe to install?
KillerSkills ran it in the KillerSkills honeypot sandbox (1 scenario; nothing executable in the bundle ran; the trace covers the install step only) on 2026-11-11 and scored it 73/100 (Caution). It is not known to be malicious, but it has behaviour or code a security policy should decide on before install. Notable findings: Host or code assembled from base64 fragments; Host or code assembled from base64 fragments; Privileged sudo command. Summary: no network, touches nothing outside the project, writes no memory.
Behavior trace
Honeypot run · 0 s · 1 scenarios · 0 deviationsStatic findings
…t as a,v as o,y as s}from"./playwright-test-qSbpSyo8.mjs";import c,{access as l,chmod as u,copyFile as d,link as f,lstat as p,mkdir as m,open as h,readFile as g,readd…Fix: Request the narrowest permission that works; replace wildcards with the exact paths or hosts.…(e,0),!0}catch(e){return e.code===`EPERM`}}};const ve=[`pnpm-workspace.yaml`,`nx.json`,`.git`];function ye(e=[]){for(let t=0;t<e.length;t+=1){let n=e[t];if(n===`--workspace-root`)return e[t+1];if(n.startsWith(`--workspace-root=`))return n.…Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.…s.options.extensionPath])if(t&&await l.default.access(m.default.join(t,`manifest.json`)).then(()=>!0,()=>!1))return t;let t=m.default.dirname((0,b.fileURLToPath)(require("url").pathToFileURL(__filename).href)),n=await this.findPackageRoot(…Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.…)throw Error(`Extension mode PDF generation returned no data`);return await T(i,Buffer.from(o.pdfBase64,`base64`)),this.success(`PDF saved to: ${i}`)}):this.executeWithMode(e.TOOL_NAME,t.pageId,t,async()=>{let e=this.resolvePage(t.pageId),…Fix: Put hosts, commands and strings in plain source. Decoding at runtime looks identical to malware and costs points on its own.…he existing browser session manually\n2. Or use a different profile name\n3. Or kill the process: kill ${t.pid}`,t.pid,e);if(!await this.cleanupOrphanedLocks(e))thro…Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.…`Extension mode PDF generation returned no data`);return await(0,l.writeFile)(i,Buffer.from(o.pdfBase64,`base64`)),this.success(`PDF saved to: ${i}`)}):this.executeWithMode(e.TOOL_NAME,t.pageId,t,async()=>{let e=this.resolvePage(t.pageId),…Fix: Put hosts, commands and strings in plain source. Decoding at runtime looks identical to malware and costs points on its own.…="/tmp/runtime-browse"`,`mkdir -p "$XDG_RUNTIME_DIR" "$XDG_RUNTIME_DIR/pulse"`,`chmod 700 "$XDG_RUNTIME_DIR" || true`,`command -v dbus-daemon >/dev/null 2>&1 && expor…Fix: Request the narrowest permission that works; replace wildcards with the exact paths or hosts.…googlechromelabs.github.io/chrome-for-testing/known-good-versions-with-downloads.json`;cacheDir;constructor(e={}){this.options=e,this.cacheDir=P(ue(),`.cache`,`chrome-for-testing`)}async getExecutablePath(){let e=this.options.executablePat…Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.…rowserId),this.sessions.delete(r),n++);return n}};const _n={"application/json":`.json`,"image/jpeg":`.jpg`,"image/png":`.png`,"text/html":`.html`,"text/plain":`.txt`};function vn(e){return e.trim().replace(/[^a-zA-Z0-9._-]+/g,`-`).replace(…Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.…(e,0),!0}catch(e){return e.code===`EPERM`}}};const dt=[`pnpm-workspace.yaml`,`nx.json`,`.git`];function ft(e=[]){for(let t=0;t<e.length;t+=1){let n=e[t];if(n===`--workspace-root`)return e[t+1];if(n.startsWith(`--workspace-root=`))return n.…Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.…r(let t of[e,this.options.extensionPath])if(t&&await c.access(A.join(t,`manifest.json`)).then(()=>!0,()=>!1))return t;let t=A.dirname(be(import.meta.url)),n=await this.findPackageRoot(t),r=[n?A.resolve(n,`dist/extension`):``,A.resolve(t,`.…Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.…. Please install Google Chrome. macOS: brew install --cask google-chrome Linux: sudo apt install google-chrome-stable`);let n=await this.resolveExtensionPath(e.exten…Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.…="/tmp/runtime-browse"`,`mkdir -p "$XDG_RUNTIME_DIR" "$XDG_RUNTIME_DIR/pulse"`,`chmod 700 "$XDG_RUNTIME_DIR" || true`,`command -v dbus-daemon >/dev/null 2>&1 && expor…Fix: Request the narrowest permission that works; replace wildcards with the exact paths or hosts.…ons.set(t,/* @__PURE__ */ new Set),this.browserConnections.get(t).add(n),console.log(`[WebSocketHub] Connection added: ${n} for browser ${t}`),n}removeConnection(e){let t=this.connections.get(e);if(!t)return;let n=this.browserConnections.g…Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.…he existing browser session manually\n2. Or use a different profile name\n3. Or kill the process: kill ${t.pid}`,t.pid,e);if(!await this.cleanupOrphanedLocks(e))thro…Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.…googlechromelabs.github.io/chrome-for-testing/known-good-versions-with-downloads.json`;cacheDir;constructor(e={}){this.options=e,this.cacheDir=(0,m.join)((0,h.homedir)(),`.cache`,`chrome-for-testing`)}async getExecutablePath(){let e=this.o…Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.…ess:!0,message:`Tracing stopped and saved`,pageId:t.id,tracePath:r,viewCommand:`npx playwright show-trace ${r}`})):this.error(`Trace path must end with .zip extension`):this.…Fix: Pin versions and sources; vendor anything fetched at install time.…i.searchParams.set(`playwright_mcp_connect`,`1`),i.searchParams.set(`playwright_mcp_server`,e),i.searchParams.set(`playwright_mcp_browser_id`,t),i.searchParams.set(`playwright_mcp_navigate`,n),r&&(i.hash=new URLSearchParams({t:r}).toString…Fix: Namespace tool names and keep tool descriptions literal; no instructions to the agent inside them.…. Please install Google Chrome. macOS: brew install --cask google-chrome Linux: sudo apt install google-chrome-stable`);let n=await this.resolveExtensionPath(e.exten…Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.…ess:!0,message:`Tracing stopped and saved`,pageId:t.id,tracePath:r,viewCommand:`npx playwright show-trace ${r}`})):this.error(`Trace path must end with .zip extension`):this.…Fix: Pin versions and sources; vendor anything fetched at install time.…rowserId),this.sessions.delete(r),n++);return n}};const hr={"application/json":`.json`,"image/jpeg":`.jpg`,"image/png":`.png`,"text/html":`.html`,"text/plain":`.txt`};function gr(e){return e.trim().replace(/[^a-zA-Z0-9._-]+/g,`-`).replace(…Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.…ons.set(t,/* @__PURE__ */ new Set),this.browserConnections.get(t).add(n),console.log(`[WebSocketHub] Connection added: ${n} for browser ${t}`),n}removeConnection(e){let t=this.connections.get(e);if(!t)return;let n=this.browserConnections.g…Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.…i.searchParams.set(`playwright_mcp_connect`,`1`),i.searchParams.set(`playwright_mcp_server`,e),i.searchParams.set(`playwright_mcp_browser_id`,t),i.searchParams.set(`playwright_mcp_navigate`,n),r&&(i.hash=new URLSearchParams({t:r}).toString…Fix: Namespace tool names and keep tool descriptions literal; no instructions to the agent inside them.Cost to the agent
Tokens estimated at four characters each. Skills load their instruction text when triggered; the figure is what that costs.
Known vulnerabilities
No advisories in OSV for @agimon-ai/po-browse-tool@0.0.0-alpha.132 as of 4d ago. This is the package itself, not its dependencies.
What would make this Verified
7 points to 80 · weights: behavior 45%, static 25%, prompt 15%, publisher 15%- Unclaimed publisher≈ +8 on the totalClaim agimon-ai: a verified publisher gets +50 on publisher trust. It is free and usually instant with GitHub sign-in.
- Obfuscated code≈ +5 on the totalRemove base64-assembled strings, eval of decoded text and minified blobs. Reviewers and scanners both treat unreadable code as hostile.
- Host or code assembled from base64 fragments≈ +4 on the totalPut hosts, commands and strings in plain source. Decoding at runtime looks identical to malware and costs points on its own.
- Privileged sudo command≈ +4 on the totalBuild commands from fixed arguments; do not interpolate untrusted strings into a shell.
- File permission modification command≈ +2 on the totalRequest the narrowest permission that works; replace wildcards with the exact paths or hosts.
- File type combined with upload action≈ +2 on the totalRemove the call, or declare the host in frontmatter and explain in the README what is sent and why.