Back to skill

Security audit

Awublack Openclaw Agent Browser

Security checks for vulnerabilities and agentic risk

Overview

This browser skill is purpose-aligned in concept, but its implementation and documentation create real review concerns around command execution, misleading privacy claims, and unpinned global dependency installation.

Review carefully before installing. The concept is a local web-browsing helper, but this version should not be trusted with sensitive URLs or normal agent automation until the script uses argument-safe subprocess execution, validates URLs, documents external network exposure honestly, and pins or vendors the browser dependency.

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

T09 · Insecure Skill Coding Practices

Error
Location
run_browser.js:25
Finding

Shell Command Injection Through Unsanitized URL Argument

Content
View full analysis
{ ``` The `url` value originates directly from the command-line argument at line 14: ```js const url = process.argv[2]; ``` ### Technical Analysis The script inserts an untrusted URL directly into a command string and executes that string using `child_process.exec`. The `exec` API invokes a system shell, so shell metacharacters within the URL are interpreted by that shell. Wrapping the value in double quotes is not a sufficient defense. An attacker can include another double quote to terminate the intended argument and then append shell operators and an arbitrary command. The script currently fails during JavaScript parsing because of the invalid triple-quoted block at lines 1–10. Therefore, exploitation is blocked in the artifact exactly as reviewed. However, the command-injection flaw becomes directly reachable as soon as that syntax error is corrected without also replacing the unsafe `exec` call. ### Attack Path 1. An attacker persuades the agent or user to invoke the skill with a crafted URL. 2. The URL is read from `process.argv[2]` without validation or escaping. 3. The URL is interpolated into the shell command inside double quotes. 4. An embedded quote terminates the intended `--url` value. 5. Shell control characters introduce an additional command. 6. `exec` passes the resulting string to the system shell. 7. The injected command executes with the privileges of the OpenClaw or Node.js process. A conceptual malicious argument is: ```text "; ATTACKER_CONTROLLED_COMMAND; # ``` After interpolation, the intended `agent-browser` invocation is followed by the attacker-controlled shell command. ### Impact Assessment Successful exp ...[truncated 727 chars]
Remediation
View remediation
{ // Handle the result. } ); ``` Additionally: 1. Parse the input using `new URL(url)`. 2. Allow only required schemes, normally `https:` and, if necessary, `http:`. 3. Reject control characters, malformed URLs, and unnecessary URL schemes such as `file:`. 4. Consider restricting private, loopback, and link-local destinations if the skill should only access public websites. 5. Apply an input-length limit. 6. Add regression tests containing quotes, command substitutions, semicolons, newlines, and shell operators. 7. Run the browser process with the minimum filesystem and network privileges required. ]]>

T08 · Insecure Dependencies

Warning
Location
SKILL.md:17
Finding

Unpinned Globally Installed Third-Party Dependency

Content
View full analysis
Remediation
View remediation

other

Note
Location
run_browser.js:1
Finding

Invalid JavaScript Documentation Block Causes Complete Skill Failure

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
  • Behavioral ASTexec() Call, eval() Call, Dynamic Import
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (8)

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

The skill markets itself as a safe, local browser wrapper while the described implementation invokes a shell command via child_process.exec using a user-supplied URL. If the URL is interpolated into a shell command, an attacker can inject shell metacharacters and achieve arbitrary command execution; additionally, relying on PATH resolution instead of the documented fixed binary path allows execution of an unexpected or trojaned agent-browser binary. The repeated 'official/safe/authoritative' claims increase concern because they may lower reviewer skepticism while the behavior remains risky.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The README encourages automatic browsing and summarization while repeatedly framing the tool as 'local', 'private', and 'safe', but it does not clearly warn that using the browser necessarily sends network requests, URLs, headers, and possibly identifying metadata to external websites. This can mislead users into believing no data leaves the machine, increasing the chance they will browse sensitive internal, authenticated, or user-specific URLs without understanding the privacy implications.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

该技能说明整体以中文呈现,并在 L4 宣称这是“本地化实现”,但未说明是否支持用户选择其他语言或根据用户偏好切换语言。对于通用技能文档,这可能构成默认强制特定语言而未获用户选择的自然语言政策问题。

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

L27 使用“当你向 AI 助手提问,例如……”来描述触发条件,但只给出单个示例,没有说明具体触发短语、适用范围或不应触发的情形。结合前文“访问任意 URL”“自动抓取网页并总结内容”的描述,这种触发定义较模糊,容易与日常网页查看类请求重叠。

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The documentation presents the tool as 'safe' and 'local', which can mislead users and reviewers into trusting it, while the implementation actually shells out through an interpolated command. This mismatch increases operational risk because a dangerous implementation detail is obscured by reassuring language, making unsafe deployment more likely.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The skill accepts a user-supplied URL and uses it to launch a subprocess that fetches remote content, but it provides no explicit warning or guardrails about command execution and network reachability. In this context, the lack of safety boundaries matters because the tool can be driven to contact arbitrary endpoints and, due to the exec usage, potentially execute injected shell commands.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The script constructs a shell command by interpolating a user-controlled URL into a string passed to child_process.exec, which invokes a shell. An attacker can supply crafted input containing shell metacharacters or quote-breaking payloads to achieve arbitrary command execution on the host, which is significantly more dangerous than the stated browsing-only purpose.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
96% confidence
Finding

The file's descriptive text and user-facing messages are entirely in Chinese, including usage and status output, without indicating that the skill is region-specific or allowing users to choose another language. That creates a language/locale policy concern under the rule for natural-language policy violations.

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
run_browser.js:28