Back to skill

Security audit

Token Efficient Web Operations

Security checks for vulnerabilities and agentic risk

Overview

The skill appears intended for browser UI testing, but it needs Review because it depends on broad browser control and an unpinned third-party Chrome extension with safety limits that are mostly advisory.

Install only if you can audit and pin the Chrome extension source yourself. Use a dedicated browser profile with no saved credentials or private sessions, restrict extension host access to test or public domains, and avoid login, payment, medical, government, financial, or personal-data pages. Treat visible page text and form labels as data that may reach your configured LLM service.

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_EN.md:221
Finding
Unpinned Executable Browser Extension Dependency## Vulnerability Details **File Location**: `SKILL.md:32, 221` and `SKILL_EN.md:32, 221` **Vulnerability Type**: Unpinned third-party executable dependency **Risk Level**: Medium ### Complete Code Snippet The dependency is introduced without a version, commit, checksum, or signature: ```markdown 1. **Page JS Extension** - Chrome Extension (manual installation required) - GitHub: https://github.com/TangJing/openclaw_access_web_page_js - **Please download and review source code before installation** ``` The installation instructions clone the mutable default branch and direct the user to load it as an unpacked browser extension: ```bash # 1. Download source code git clone https://github.com/TangJing/openclaw_access_web_page_js.git cd openclaw_access_web_page_js # 2. Review source code (recommended) # Check for: # - Network request code # - Data exfiltration logic # - manifest.json permissions # 3. Install extension # Open chrome://extensions/ # Enable "Developer mode" # Click "Load unpacked", select project directory ``` The same dependency and installation procedure appear in both language variants. ### Technical Analysis The Skill requires users to retrieve and execute a browser extension from a mutable third-party GitHub repository. The clone command does not pin a reviewed commit, signed tag, immutable release artifact, or cryptographic checksum. Consequently, the code installed by a user can differ from the code previously reviewed by the Skill publisher or another user. Loading the downloaded directory as an unpacked extension executes its code in Chrome under the permissions declared by its current manifest. A source-review recommendation is useful guidance but does not provide integrity enforcement, reproducibility, or protection against later repository changes. The external repository was not included in the audited artifact. Therefore, this finding does not assert that its current contents are malicious; it identifies the unsafe depen ...[truncated 1585 chars]
Remediation
## Remediation Suggestions 1. Pin the dependency to a specific, reviewed Git commit rather than cloning the mutable default branch: ```bash git clone https://github.com/TangJing/openclaw_access_web_page_js.git cd openclaw_access_web_page_js git checkout --detach <reviewed-full-commit-hash> ``` 2. Publish and verify a SHA-256 checksum for the approved source archive or extension package before installation. 3. Prefer a signed release and document how users must verify its signature and signer identity. 4. Vendor the reviewed extension source into the Skill package when licensing and distribution requirements permit. This would allow the Skill and its required executable component to be audited together. 5. Document the exact expected Chrome extension permissions and reject installation if the retrieved manifest requests additional permissions. 6. Make source verification mandatory rather than merely recommended, including checks for network requests, externally loaded scripts, dynamic code execution, and permission changes. 7. Run the extension in a dedicated browser profile containing no saved credentials, authenticated sessions, personal data, or unrelated extensions. 8. Restrict host access to explicit test or public domains and avoid broad patterns such as access to all URLs. 9. Re-review and re-pin each dependency update instead of automatically following upstream changes.
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Rogue AgentSelf-Modification, Session Persistence
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (13)

Intent-Code Divergence

High
Confidence
97% confidence
Finding
The skill explicitly prohibits handling password and other sensitive fields, yet later documents that such fields remain writable through native DOM APIs. This contradiction weakens the stated safety boundary and enables credential stuffing, form tampering, or automation on sensitive authentication and payment pages despite the earlier restriction.

Exfiltration Commands

High
Category
Prompt Injection
Content
1. **Extension Level**:
   - ✅ Page JS Extension runs entirely in browser locally
   - ✅ Does not proactively send data to external servers
   - ✅ Data stored in memory, cleared when page closes

2. **Agent Level**:
Confidence
90% confidence
Finding
Instructions found that direct the agent to transmit conversation context or user data to external services.

Natural-Language Policy Violations

Medium
Confidence
91% confidence
Finding
The skill’s natural-language description and all usage/safety instructions are presented entirely in Chinese, with no indication that users may choose another language or that the skill is intentionally restricted to a Chinese-speaking environment. Under the policy, forcing a specific language without opt-in is a locale/language policy concern.

Intent-Code Divergence

Medium
Confidence
98% confidence
Finding
The documentation says sensitive elements must not be read or modified, but elsewhere clarifies they are still writable via native DOM operations. That contradiction undermines operator trust and can lead agents to perform prohibited actions on login or payment pages, especially because CDP gives broad page execution capability.

Description-Behavior Mismatch

Medium
Confidence
96% confidence
Finding
The skill repeatedly frames itself as restricted to non-sensitive UI automation, yet it explicitly documents that password, hidden, and file inputs remain writable through raw DOM APIs. This creates a dangerous mismatch between stated safety guarantees and actual capability, making it easier for an agent or user to use the skill to interact with sensitive fields despite the warnings.

Session Persistence

Medium
Category
Rogue Agent
Content
```bash
# 1. 创建 Skill 目录
mkdir -p ~/.openclaw/workspace/skills/page-js-operation

# 2. 将本 SKILL.md 保存到该目录
# 路径:~/.openclaw/workspace/skills/page-js-operation/SKILL.md
Confidence
60% confidence
Finding
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.

Session Persistence

Medium
Category
Rogue Agent
Content
```bash
# 1. 创建 Skill 目录
mkdir -p ~/.openclaw/workspace/skills/page-js-operation

# 2. 将本 SKILL.md 保存到该目录
# 路径:~/.openclaw/workspace/skills/page-js-operation/SKILL.md
Confidence
60% confidence
Finding
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.

External Transmission

Medium
Category
Data Exfiltration
Content
1. **Extension Level**:
   - ✅ Page JS Extension runs entirely in browser locally
   - ✅ Does not proactively send data to external servers
   - ✅ Data stored in memory, cleared when page closes

2. **Agent Level**:
Confidence
85% confidence
Finding
The document acknowledges that the AI agent may send element data to LLM services, while the collected page data can include text labels and input-related content. Even if the extension itself stays local, this creates an external transmission risk for potentially sensitive browser-derived data.

Description-Behavior Mismatch

Medium
Confidence
91% confidence
Finding
The skill labels the element index as non-sensitive, but its documented data scope includes innerText and regular input fields, which can contain personal, confidential, or business-sensitive content. Because the same document also states an AI agent may send element data to LLM services, this creates a realistic data disclosure path even when users believe the workflow is safe.

Session Persistence

Medium
Category
Rogue Agent
Content
### Step 2: Install OpenClaw Skill

```bash
# 1. Create Skill directory
mkdir -p ~/.openclaw/workspace/skills/page-js-operation

# 2. Save this SKILL.md to the directory
Confidence
60% confidence
Finding
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.

Skill Enumeration

Medium
Category
Agent Snooping
Content
mkdir -p ~/.openclaw/workspace/skills/page-js-operation

# 2. Save this SKILL.md to the directory
# Path: ~/.openclaw/workspace/skills/page-js-operation/SKILL.md

# 3. Refresh Skills
openclaw agent --message "refresh skills"
Confidence
80% confidence
Finding
Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.

Skill Enumeration

Medium
Category
Agent Snooping
Content
mkdir -p ~/.openclaw/workspace/skills/page-js-operation

# 2. Save this SKILL.md to the directory
# Path: ~/.openclaw/workspace/skills/page-js-operation/SKILL.md

# 3. Refresh Skills
openclaw agent --message "refresh skills"
Confidence
80% confidence
Finding
Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.

Natural-Language Policy Violations

Low
Confidence
76% confidence
Finding
The 'Common Keywords' section mixes Chinese labels such as '搜索', '提交', '取消', '确定', '删除', '编辑', and '保存' as recommended terms, but the document does not explicitly state that locale selection is optional or user-driven. This can create an implicit language bias in operation guidance rather than clearly offering language choice based on the user's environment.

Static analysis

No suspicious patterns detected.