Back to skill

Security audit

Google Index Checker

Security checks for vulnerabilities and agentic risk

Overview

The skill appears to perform the advertised Google index check, but it uses broad control over a logged-in Chrome profile and installs an unpinned npm package at runtime.

Install only if you are comfortable letting the agent control a Chrome instance through remote debugging. Use a dedicated temporary Chrome profile with no unrelated logged-in accounts, close unrelated tabs, and prefer a pinned or preinstalled ws dependency instead of installing the latest package during execution.

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:14
Finding

Unpinned Runtime Installation of a Third-Party npm Package

Content
View full analysis

Vulnerability Details

File Location: SKILL.md, lines 14-16 and 28-29
Vulnerability Type: Unpinned runtime dependency installation
Risk Level: Medium

Vulnerable Code

markdown
- Node.js with `ws` npm package available at `/tmp/wsclient/node_modules/ws`
  - Install once: `npm install ws --prefix /tmp/wsclient`
  - If not found, install before starting
markdown
1. Install `ws` if needed: `npm install ws --prefix /tmp/wsclient`

Technical Analysis

The skill instructs the agent to install the latest package published under the npm name ws during execution. The installation command does not specify an exact version, use a lockfile, verify an integrity hash, disable lifecycle scripts, or enforce a trusted registry.

Consequently, the code executed by the skill can change after the skill itself has been audited. If the resolved package, its dependency chain, the maintainer account, or the configured npm registry is compromised, installation or subsequent require() execution may run attacker-controlled code with the privileges of the agent process.

The supplied script later imports the dynamically installed module:

javascript
const WebSocket = require('/tmp/wsclient/node_modules/ws');

The dependency is then used while the process has access to a Chrome Remote Debugging Protocol endpoint. The documentation states that all browser tabs share the same Chrome profile and authenticated cookie session, increasing the potential impact of a supply-chain compromise.

Attack Path

  1. An attacker compromises the relevant npm publishing account, a transitive dependency, or the registry used by the runtime environment.
  2. The attacker publishes or serves a malicious version that resolves for the unversioned npm install ws command.
  3. The agent follows the skill instructions and installs the dependency into /tmp/wsclient.
  4. Malicious npm lifecycle code may execute during ...[truncated 1198 chars]
Remediation
View remediation

Remediation Suggestions

  1. Pin ws to a reviewed exact version rather than resolving the latest release:
    bash
    npm install --save-exact ws@<reviewed-version> --prefix /tmp/wsclient
    
  2. Maintain and review a committed lockfile, then use npm ci instead of an unconstrained installation.
  3. Disable package lifecycle scripts where they are unnecessary:
    bash
    npm ci --ignore-scripts --prefix /tmp/wsclient
    
  4. Enforce an approved npm registry and prevent user or project configuration from silently redirecting package resolution to an untrusted source.
  5. Verify package integrity against a trusted lockfile or independently maintained checksum before loading it.
  6. Prefer a built-in, previously provisioned, or vendored and reviewed WebSocket implementation so the effective code does not change at runtime.
  7. Run the skill in a restricted environment with minimal file, process, and network permissions.
  8. Use a dedicated Chrome profile without unrelated authenticated sessions, and restrict access to the CDP endpoint.
  9. Use a uniquely created temporary directory with restrictive permissions instead of a predictable shared path, and clean up only the directory created by the current invocation.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • 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 (6)

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
90% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

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

md
1. Close the tab: `DELETE http://localhost:9222/json/close/{targetId}`
2. Verify: `GET http://localhost:9222/json` should return `[]`
3. Remove temp package: `rm -rf /tmp/wsclient`

## CDN Script Template (copy-paste ready)

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
85% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

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

md
1. Close the tab: `DELETE http://localhost:9222/json/close/{targetId}`
2. Verify: `GET http://localhost:9222/json` should return `[]`
3. Remove temp package: `rm -rf /tmp/wsclient`

## CDN Script Template (copy-paste ready)

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
90% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

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

md
1. Close the tab: `DELETE http://localhost:9222/json/close/{targetId}`
2. Verify: `GET http://localhost:9222/json` should return `[]`
3. Remove temp package: `rm -rf /tmp/wsclient`

## CDN Script Template (copy-paste ready)

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The skill explicitly states that all browser tabs share the same cookie/login session, then directs use of Chrome Remote Debugging against that shared profile. CDP access can inspect and interact with authenticated pages and browser state, so using it without stronger warnings, isolation requirements, or profile separation creates real privacy and account-access risk.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The instructions require parsing Google results using the Chinese text pattern "找到约 ... 条结果", which assumes a specific locale and may fail or impose that locale implicitly. This is a natural-language policy concern because the skill does not offer user opt-in or an alternative for other languages/locales.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The code's extraction logic only matches Chinese result text, which hard-codes a specific language assumption into the skill behavior. Because no language choice or justified regional constraint is provided, this violates the stated policy on forced language/locale behavior.

Content

No source excerpt is available for this finding.