Back to skill

Security audit

Chrome DevTools MCP (Standard)

Security checks for vulnerabilities and agentic risk

Overview

This skill is a coherent Chrome browser-automation helper, but it asks users to run mutable third-party MCP packages with broad browser control and limited safety scoping.

Install only if you are comfortable giving an agent strong local Chrome control. Prefer pinning exact package versions, using a dedicated browser profile without sensitive sessions, avoiding `@latest` MCP startup, and reviewing any `sudo`, npm, npx, or plugin commands before running them.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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 (1)

T08 · Insecure Dependencies

Warning
Location
SKILL.md:42
Finding
Unpinned Third-Party Package Installation and Execution## Vulnerability Details **File Location**: `SKILL.md`, lines 42-89; additional occurrences at lines 195 and 211 **Vulnerability Type**: Supply-chain risk caused by unpinned dependencies **Risk Level**: Medium ### Vulnerable Code ```bash npm i -g chrome-devtools-mcp ``` ```bash npx -y chrome-devtools-mcp@latest ``` ```json { "mcpServers": { "chrome-devtools": { "command": "npx", "args": ["-y", "chrome-devtools-mcp@latest", "--no-usage-statistics"] } } } ``` ```json { "mcpServers": { "chrome-devtools": { "command": "npx", "args": ["-y", "chrome-devtools-mcp@latest", "--slim", "--headless", "--no-usage-statistics"] } } } ``` ```bash /plugin marketplace add ChromeDevTools/chrome-devtools-mcp /plugin install chrome-devtools-mcp ``` ```yaml mcp: servers: chrome-devtools: command: npx args: ["-y", "chrome-devtools-mcp@latest", "--no-usage-statistics"] ``` Additional unpinned executions include: ```bash npx @puppeteer/browsers install chrome@stable npx -y chrome-devtools-mcp@latest --headless ``` ### Technical Analysis The documented installation and configuration procedures execute third-party packages without pinning them to reviewed, immutable versions. The global npm installation implicitly resolves the current registry version, while several configurations explicitly request `@latest`. The plugin installation and `@puppeteer/browsers` command are similarly not tied to a reviewed version. The `npx -y` option automatically accepts installation without an interactive confirmation step. Consequently, the code executed on a future invocation may differ from the code that existed when this skill was audited. Package lifecycle scripts may also execute during installation. This creates a supply-chain trust boundary in which compromise of the package, npm account, registry resolution, plugin marke ...[truncated 1791 chars]
Remediation
## Remediation Suggestions 1. Replace `@latest`, `@stable`, and implicit latest-version resolution with exact, reviewed versions, for example: ```bash npx --yes chrome-devtools-mcp@<reviewed-exact-version> --no-usage-statistics ``` 2. Pin transitive dependencies with a committed lockfile where installation occurs through a managed project rather than ad hoc global execution. 3. Verify downloaded packages using registry integrity metadata, checksums, signatures, or provenance attestations. Store expected verification data in a reviewed configuration. 4. Avoid global package installation. Install dependencies in an isolated project or controlled container using an unprivileged account. 5. Avoid automatic mutable dependency installation during MCP startup. Preinstall and review a fixed artifact, then configure the MCP server to invoke that local artifact. 6. Configure an approved registry or internal artifact mirror and enforce package allowlists. 7. Disable or strictly control npm lifecycle scripts where compatible with the package. 8. Pin plugin marketplace sources and plugin versions to reviewed revisions or immutable release artifacts. 9. Run the MCP server and Chrome in a sandbox with a dedicated browser profile, minimal filesystem access, restricted environment variables, and no unnecessary credentials. 10. Establish a controlled update process in which new versions are reviewed, scanned, tested, and explicitly approved before changing the pin.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (9)

Chaining Abuse

High
Category
Tool Misuse
Content
### Prerequisites
- **Node.js** v20.19+ (check: `node --version`)
- **Google Chrome** stable (check: `which google-chrome` or `which chromium-browser`)
  - On Ubuntu/Debian: `wget -q https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb && sudo apt install -y ./google-chrome-stable_current_amd64.deb`
  - On macOS: Install from google.com/chrome or `brew install --cask google-chrome`
  - On ARM64 Linux: Use `chromium-browser` or Chrome for Testing
Confidence
75% confidence
Finding
Tool calls are chained to bypass individual safety checks or escalate capabilities beyond what any single tool call would allow.

Missing User Warnings

Medium
Confidence
90% confidence
Finding
The description emphasizes broad browser control but does not clearly warn that the skill can interact with authenticated sessions, inspect network traffic, execute page-context JavaScript, and affect local browsing state. In an agent environment, lack of explicit safety boundaries increases the chance of misuse against sensitive sites or accidental privacy-impacting actions.

Vague Triggers

Medium
Confidence
85% confidence
Finding
The keywords include generic triggers like "use browser" and "use chrome-devtools-mcp" without any constraints on context. In a manifest-style section, these broad phrases can match many ordinary requests involving browsing or web access, increasing the chance of unintended invocation.

Sudo/Root Execution

Medium
Category
Privilege Escalation
Content
### Prerequisites
- **Node.js** v20.19+ (check: `node --version`)
- **Google Chrome** stable (check: `which google-chrome` or `which chromium-browser`)
  - On Ubuntu/Debian: `wget -q https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb && sudo apt install -y ./google-chrome-stable_current_amd64.deb`
  - On macOS: Install from google.com/chrome or `brew install --cask google-chrome`
  - On ARM64 Linux: Use `chromium-browser` or Chrome for Testing
Confidence
70% confidence
Finding
Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding
npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Rp1

Medium
Category
MCP Rug Pull
Confidence
85% confidence
Finding
The OpenClaw config invokes `npx` with `chrome-devtools-mcp@latest`, causing execution of whatever package version is current at runtime. In an agent skill context, this creates a real supply-chain exposure because future upstream compromise or malicious typosquatting/substitution could lead to arbitrary code execution on the host.

Sudo/Root Execution

Medium
Category
Privilege Escalation
Content
```bash
# Ubuntu/Debian amd64:
wget -q https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo apt install -y ./google-chrome-stable_current_amd64.deb

# Or use Chrome for Testing:
npx @puppeteer/browsers install chrome@stable
Confidence
70% confidence
Finding
Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding
npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Rp1

Medium
Category
MCP Rug Pull
Confidence
84% confidence
Finding
The troubleshooting advice again recommends `npx -y chrome-devtools-mcp@latest --headless`, which executes the newest published package at runtime. In a browser-automation skill with local host access, an upstream compromise could translate into arbitrary local code execution and broad browser-driven actions.

Static analysis

No suspicious patterns detected.