Back to skill

Security audit

browser-cdp

Security checks for vulnerabilities and agentic risk

Overview

This Chrome automation skill is coherent in purpose, but it exposes very powerful logged-in browser control through an under-scoped local proxy that needs careful review before installation.

Install only if you intentionally want an agent to control a Chrome session. Use a dedicated Chrome profile with minimal accounts, stop the proxy when not needed, avoid sensitive sites, and do not allow uploads or state-changing actions unless you explicitly requested them.

Vulnerability Patterns
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (4)

T09 · Insecure Skill Coding Practices

Error
Location
cdp-proxy.mjs:278
Finding

Unauthenticated HTTP API Exposes Privileged Browser Control

Content
View full analysis
{ const parsed = new URL(req.url, `http://localhost:${PORT}`); const pathname = parsed.pathname; ``` ```js else if (pathname === '/eval') { const sid = await ensureSession(q.target); const body = await readBody(req); const expr = body || q.expr || 'document.title'; const resp = await sendCDP('Runtime.evaluate', { expression: expr, returnByValue: true, awaitPromise: true, }, sid); if (resp.result?.result?.value !== undefined) { res.end(JSON.stringify({ value: resp.result.result.value })); } else if (resp.result?.exceptionDetails) { ``` The same unauthenticated server also exposes navigation, clicking, screenshots, file-input manipulation, tab enumeration, and tab closure. ### Technical Analysis The proxy grants callers control over Chrome through the Chrome DevTools Protocol but does not authenticate requests, authorize operations, validate a per-session secret, or enforce trusted `Origin` and `Host` values. The `/eval` endpoint directly passes the request body to `Runtime.evaluate`. Consequently, any process able to connect to the local port can execute arbitrary JavaScript in an attached browser page. Because the Skill is explicitly designed to access authenticated sessions and private content, this API crosses a significant security boundary. Binding the server to `127.0.0.1` reduces direct remote exposure but does not establish authorization. Potential callers include malicious local processes, other users or workloads sharing the network namespace, and browser-originated requests under conditions where localhost access or DNS rebinding is possible. Arbitrary JavaScript evaluation is necessary for some declared automation functions, ...[truncated 1471 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
cdp-proxy.mjs:514
Finding

Arbitrary File Overwrite Through Caller-Controlled Screenshot Path

Content
View full analysis
&file=`. 5. `fs.writeFileSync` replaces or creates the selected file with PNG or JPEG data. 6. The overwritten file becomes corrupted or unusable, potentially affecting applications that depend on it. ### Impact Assessment The attacker gains an arbitrary file-write primitive constrained by the operating-system permissions of the proxy process. The written content is screensho ...[truncated 480 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
cdp-proxy.mjs:271
Finding

Unbounded Request-Body Buffering Enables Local Denial of Service

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:43
Finding

Setup Instructions Force-Terminate All Matching Chrome Processes

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (9)

Vague Triggers

High
Category
Not specified by scanner
Confidence
94% confidence
Finding

The trigger conditions are very broad, including generic actions like click, fill form, scroll, and any need to read logged-in content. This can cause the skill to activate for routine tasks and silently escalate from normal retrieval to full control of the user's live browser session, increasing the chance of unintended access to private data or destructive actions.

Content

No source excerpt is available for this finding.

Missing User Warnings

High
Category
Not specified by scanner
Confidence
97% confidence
Finding

The skill advertises 'full login state' and ability to read private content, but it does not present a strong user-facing warning that all actions occur with the user's active Chrome cookies and sessions. Without an explicit warning, users may not realize the agent can access authenticated data, perform actions as them, and expose sensitive content through extraction or screenshots.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The /eval endpoint accepts arbitrary JavaScript from the HTTP request body or query string and executes it in the context of the user's real Chrome session via Runtime.evaluate. Because this skill is explicitly designed to operate with full login state and private content, arbitrary page-context code execution enables unrestricted reading/modification of authenticated content, token extraction from page state, unwanted actions, and abuse beyond the manifest's stated browser automation scope.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

High
Category
Not specified by scanner
Confidence
95% confidence
Finding

The /setFiles endpoint can programmatically attach arbitrary local filesystem paths to file inputs in the user's browser session. This bypasses the normal user-mediated file picker security boundary and allows an agent controlling the proxy to submit local files to remote websites without meaningful user confirmation, creating a direct path for local data exfiltration.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
83% confidence
Finding

The skill exposes powerful browser-automation behavior with access to authenticated browser state, but it does not declare an explicit tool scope or permission boundary. That makes it easier for an agent or integrator to invoke sensitive capabilities without clear review of whether environment/network/browser access is intended.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · SKILL.md (reported line 54)May include surrounding context.

Verify:

bash
curl -s http://127.0.0.1:9222/json/version

2. Start CDP Proxy

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
82% confidence
Finding

The human-readable comments and operational messages are written exclusively in Chinese, including the primary description of the skill and user guidance for setup and errors. This creates a language/locale constraint without any visible opt-in or alternative language path, which matches the policy's language-choice concern.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

The /clickAt endpoint performs browser-level mouse events and is explicitly documented as able to trigger file dialogs and evade anti-automation detection. That makes the skill more dangerous than ordinary DOM clicking because it is designed to simulate trusted user gestures, enabling interaction with sensitive UI flows and reducing protections that normally distinguish user actions from automation.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The /screenshot endpoint can write browser-captured image data to an arbitrary local path provided by the requester. Even though the write content is limited to screenshots, this still permits uncontrolled filesystem writes by a remote caller of the local proxy, which can overwrite files accessible to the running user, create sensitive artifacts, or persist captured private content without notice.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.