Back to skill

Security audit

chrome_skill

Security checks for vulnerabilities and agentic risk

Overview

This is a real browser automation skill, but it needs Review because it automatically installs and runs mutable third-party code while giving an agent broad control over Chrome and browser data.

Install only if you are comfortable letting the agent install a global npm package, start a local Chrome automation bridge, and control browser sessions. Use a separate Chrome profile with no sensitive logins, prefer a pinned and reviewed bridge package, close Chrome normally instead of force-killing it, and require explicit approval before logins, cookie/storage access, JavaScript injection, file upload/download, network mocking, or transactions.

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

Error
Location
scripts/startup.js:67
Finding

Automatic Installation and Execution of an Unpinned Global npm Package

Content
View full analysis

Vulnerability Details

File Location: scripts/startup.js:67-91
Vulnerability Type: Unpinned third-party dependency installation and immediate execution
Risk Level: High

Vulnerable Code

javascript
function installPackage() {
  log('Installing chrome-ai-action globally...');
  try {
    execSync('npm install -g chrome-ai-action', { stdio: 'inherit' });
    const pkgPath = path.join(getGlobalNodeModulesPath(), 'chrome-ai-action');
    log(`Installation complete at: ${pkgPath}`);
  } catch (err) {
    log(`Failed to install: ${err.message}`);
    process.exit(1);
  }
}

function launchBridge() {
  const command = isWindows ? 'chrome-ai-action.cmd' : 'chrome-ai-action';
  log(`Starting bridge on port ${BRIDGE_PORT}...`);
  const child = spawn(command, ['--port', String(BRIDGE_PORT)], {
    stdio: 'inherit',
    detached: false,
  });
  child.on('error', (err) => {
    log(`Failed to start bridge: ${err.message}`);
    process.exit(1);
  });
  child.on('exit', (code) => {
    if (code !== null && code !== 0) {
      log(`Bridge exited with code ${code}`);
    }
  });
  return child;
}

Technical Analysis

The startup script installs chrome-ai-action from the configured npm registry without specifying an exact version. It does not use a committed lockfile, expected integrity hash, package provenance validation, or an independently verified artifact. The installed command is then resolved through the operating system search path and executed immediately.

Consequently, the effective executable can change after this skill has been reviewed. The risk can materialize if a package maintainer or npm account is compromised, a malicious version is published, the configured registry is replaced or compromised, or package resolution is otherwise manipulated. npm lifecycle scripts may also execute during installation, before the explicit bridge launch occurs.

Global installation increases the effect by modifying the user's shared ...[truncated 2344 chars]

Remediation
View remediation

Remediation Suggestions

  1. Pin chrome-ai-action to an exact, reviewed version rather than installing the latest registry-selected release.
  2. Declare it as a project-local dependency and commit a lockfile containing integrity metadata. Install with a reproducible command such as npm ci.
  3. Do not perform automatic global package installation when the skill is loaded. Require explicit user approval before downloading or executing third-party software.
  4. Verify package provenance, registry origin, publisher identity, and expected integrity before installation.
  5. Disable npm lifecycle scripts during installation where they are not required, for example with --ignore-scripts, and separately audit any lifecycle behavior that is required.
  6. Execute the reviewed local binary using an absolute path rather than resolving a command through PATH.
  7. Vendor the bridge implementation when feasible so that the reviewed source and executed source are identical.
  8. Run the bridge and browser in a sandbox or dedicated low-privilege account with restricted filesystem, network, and credential access.
  9. Use a separate browser profile containing no unrelated authenticated sessions or sensitive cookies.
  10. Re-audit dependency updates before changing the pinned version, including the transitive dependency tree and install scripts.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (12)

Missing User Warnings

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The manual launch instructions include force-kill commands for Chrome processes on Windows, macOS, and Linux without warning that this can abruptly terminate active sessions, discard unsaved browser state, and interrupt unrelated user activity. In the context of a browser automation skill, this is more dangerous because Chrome is a primary user application and the same instructions also enable remote debugging, compounding operational disruption with additional local attack surface.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
82% confidence
Finding

The skill exposes powerful browser-automation behavior and explicitly references environment-controlled startup behavior, package installation, and process launch, yet it declares no explicit tool scope or permission boundaries. In practice this increases the chance an agent can invoke system/environment capabilities or perform sensitive automation without clear policy constraints, which is risky for a skill that can install software, launch Chrome, and interact with authenticated browser state.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The documented actions include login automation, cookie manipulation, script injection, uploads/downloads, and other state-changing browser operations, but the skill provides no guardrails requiring user confirmation before high-risk actions. In an authenticated browser context, this could enable account changes, data exfiltration, malicious downloads, session tampering, or unintended transactions with little friction.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

Full-page text/HTML extraction, link enumeration, image listing, form field discovery, and focusable-element enumeration can collect large amounts of sensitive page content, including PII and hidden workflow context. In an LLM-driven automation setting, lack of warnings increases the chance of over-collection and unintended data disclosure.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

Access to cookies is highly sensitive because cookies often contain authentication or session identifiers. Exposing getCookies without prominent privacy and security warnings makes it easier for downstream agents or users to treat this as routine telemetry rather than credential-adjacent data access.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

evaluate, injectScript, and injectCSS enable direct modification and execution within the page context, which can alter application state, bypass intended UI flows, or extract data unavailable through benign automation primitives. Without warnings or restrictions, these features create a major integrity and confidentiality risk in agent-controlled browsing.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The documented API goes beyond ordinary browser automation by allowing arbitrary JavaScript execution in page context and a generic custom-action fallback. In an agent skill, this materially expands the attack surface because an LLM or prompt-influenced workflow could invoke page-script execution to alter page behavior, extract hidden data, or interact with site-defined handlers not covered by the declared skill scope.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The documented interception and state-manipulation features include cookies, local storage, request blocking, mocked responses, and request capture. These capabilities can be abused to steal session material, tamper with application behavior, or silently manipulate browsing state in ways users would not expect from a basic automation skill.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The file operations permit local file upload, setting input files from local paths, and writing downloaded content to arbitrary destinations on the host. That exceeds simple browser automation and can enable exfiltration of local files or unsafe writes if an agent is induced to handle attacker-chosen paths.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

Upload and download features interact with the local filesystem and remote content, creating risk of exfiltrating local data, planting unsafe files, or mishandling sensitive documents. Omitting security guidance makes these operations appear routine despite their host-level impact.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The quick-start instructions normalize automatic package installation, service startup, and auto-launching Chrome without clearly warning the user that the script will make system changes and open local automation interfaces. This is dangerous because users may execute the command with incomplete understanding of side effects, increasing the chance of unintended software installation, browser profile changes, or exposure of a debugging port on the local machine.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
78% confidence
Finding

The document contains a critical requirement specifically for Chinese URL encoding and presents the skill description bilingually with Chinese-specific instructions. While technically motivated, the wording may be read as prioritizing a specific locale without explicitly stating that other languages are also supported or that this applies only when Chinese characters are present.

Content

No source excerpt is available for this finding.

Static analysis

Detected: suspicious.dangerous_exec

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
scripts/startup.js:53