Back to skill

Security audit

Autoglm Browser Agent

Security checks for vulnerabilities and agentic risk

Overview

This browser automation skill is disclosed, but it asks users to run unverifiable local binaries, keep a browser relay running, and optionally persist broad approval for account actions.

Review this carefully before installing. Keep auto_approve disabled, avoid using it for posting, messaging, purchases, or form submissions, and do not remove macOS quarantine or run the relay/mcp_server unless you can verify the exact binaries and their source. Treat Feishu integration as sensitive because it reads app credentials and can send screenshots to chats.

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 (2)

T08 · Insecure Dependencies

Warning
Location
INSTALL.md:37
Finding
Unpinned Global Installation of a Third-Party npm Package<![CDATA[ ## Vulnerability Details **File Location**: `INSTALL.md`, lines 37–46 **Vulnerability Type**: Unpinned third-party dependency installed globally **Risk Level**: Medium ### Vulnerable Code ```bash # macOS / Linux command -v mcporter || npm install -g mcporter ``` ```bat :: Windows — use cmd to install where mcporter 2>nul || npm install -g mcporter ``` The Skill metadata also declares the same package without a version constraint: ```yaml "requires": { "bins": ["mcporter"] }, "install": [ { "id": "node", "kind": "node", "package": "mcporter", "bins": ["mcporter"], "label": "Install mcporter (node)", }, ], ``` ### Technical Analysis The installation instructions retrieve and globally install the latest version of the `mcporter` npm package without an exact version, lockfile, integrity hash, signature verification, or documented publisher validation. Because npm dependencies may execute lifecycle scripts during installation, the effective code executed on a user's system can change after this Skill has been reviewed. A compromised package release, compromised maintainer account, registry substitution, or unexpected future release could introduce arbitrary code into the installation process. The global `-g` installation increases the affected scope because the resulting command becomes available across projects for the installing user. The audit did not establish that the current package is malicious; the vulnerability is the absence of controls ensuring that the reviewed dependency is the dependency subsequently installed. ### Attack Path 1. An attacker compromises the npm package, its publisher account, or its dependency chain. 2. The attacker publishes a malicious package version or introduces a malicious lifecycle script. 3. A user follows the documented installation procedure without already having `mcporter`. 4. `npm install -g mcporter` resolves the attacker-controlled or otherwise unreviewed cu ...[truncated 961 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Pin `mcporter` to a reviewed exact version rather than resolving the latest release: ```bash npm install -g mcporter@<reviewed-exact-version> ``` 2. Publish the expected package name, version, publisher identity, and integrity hash in the installation documentation. 3. Verify package provenance and signatures where supported by the distribution mechanism. 4. Prefer a project-local dependency with a committed lockfile over a global installation. 5. Disable npm lifecycle scripts during installation where compatible: ```bash npm install --ignore-scripts --save-exact mcporter@<reviewed-exact-version> ``` 6. Review the pinned package and its transitive dependencies before distribution. 7. Add automated dependency monitoring, but require review before updating the pinned version. 8. Update the Skill metadata so its automated installer uses the same exact reviewed version. ]]>

T09 · Insecure Skill Coding Practices

Error
Location
INSTALL.md:8
Finding
Removal of macOS Quarantine Protection Before Executing Unverifiable Binaries<![CDATA[ ## Vulnerability Details **File Location**: `INSTALL.md`, lines 8–13 **Related Locations**: `INSTALL.md`, lines 50–60 and 82–91; `SKILL.md`, lines 43–57 **Vulnerability Type**: Unsafe execution of opaque binaries after bypassing operating-system quarantine controls **Risk Level**: High ### Vulnerable Code ```bash xattr -d com.apple.quarantine {baseDir}/dist/relay {baseDir}/dist/mcp_server ``` The binaries are subsequently registered and executed: ```bash # macOS / Linux mcporter config add autoglm-browser-agent --stdio "{baseDir}/dist/mcp_server --start_url https://www.bing.com --window_width 1456 --window_height 819 --resize_width 1456 --resize_height 819 --max_steps 100 --log_dir {baseDir}/mcp_output --if_subagent" ``` ```bash # macOS / Linux {baseDir}/dist/relay ``` `SKILL.md` additionally instructs the agent to remove quarantine attributes while suppressing errors and to launch the relay silently in the background: ```bash # macOS: remove security restriction xattr -d com.apple.quarantine {baseDir}/dist/relay {baseDir}/dist/mcp_server 2>/dev/null; true mcporter list autoglm-browser-agent --schema ``` ```bash # macOS / Linux (nohup background process) nohup {baseDir}/dist/relay > /dev/null 2>&1 & ``` ### Technical Analysis The instructions explicitly remove the `com.apple.quarantine` attribute from `relay` and `mcp_server`. This bypasses the normal macOS quarantine and Gatekeeper review path that warns users about downloaded, unsigned, or untrusted executables. The audited project contains only `INSTALL.md` and `SKILL.md`; the referenced `dist/relay` and `dist/mcp_server` binaries, their source code, signatures, hashes, and provenance are absent. Their behavior therefore cannot be verified from the supplied artifact. After removing quarantine protection, the documentation registers `mcp_server` as an MCP server and launches `relay`. The Skill also directs the relay to run through `nohup` with standard output and errors discarded. Thi ...[truncated 2428 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Do not instruct users to remove quarantine attributes before independently verifying the binaries. 2. Include the complete source code for `relay` and `mcp_server` in the audited package, or provide a verifiable link to the exact corresponding source revision. 3. Distribute signed and notarized macOS binaries so Gatekeeper validation can remain enabled. 4. Publish cryptographic hashes for every platform-specific binary and verify them before execution: ```bash shasum -a 256 {baseDir}/dist/relay shasum -a 256 {baseDir}/dist/mcp_server ``` 5. Verify code signatures and notarization status before registration or launch: ```bash codesign --verify --deep --strict --verbose=2 {baseDir}/dist/relay codesign --verify --deep --strict --verbose=2 {baseDir}/dist/mcp_server spctl --assess --type execute --verbose {baseDir}/dist/relay spctl --assess --type execute --verbose {baseDir}/dist/mcp_server ``` 6. Fail closed if verification fails; do not append `true` to suppress verification-related failures. 7. Do not discard all background-process output. Store logs in a user-visible, permission-restricted location and document how to inspect them. 8. Require explicit user confirmation before launching a long-running background relay. 9. Run the MCP server and relay with least privilege and restrict their filesystem, network, credential, and browser access to what is strictly necessary. 10. Document the trusted binary source, release version, signer identity, update process, and rollback procedure. ]]>
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Rogue AgentSelf-Modification, Session Persistence
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
Findings (24)

Vague Triggers

High
Confidence
98% confidence
Finding
The trigger condition is extremely broad: it routes the skill whenever a user mentions any website, URL, or web action. Because this skill can log in, post, message, and perform account-affecting actions, over-invocation increases the chance that unrelated or ambiguous requests are handed to a powerful browser automation agent without sufficient gating.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
---

## 5. 配置信任模式(auto_approve)

信任模式控制敏感操作(发评论、点赞、发帖、发消息等)是否自动执行:
- **关闭(默认)**:每次敏感操作暂停询问用户确认后才执行
Confidence
95% confidence
Finding
The documented 'auto_approve' trust mode allows sensitive browser actions such as posting, messaging, liking, and commenting to execute without per-action confirmation. In a browser automation skill that explicitly supports social media, messaging, forms, and shopping, this materially increases the risk of unauthorized actions, spam, fraud, reputational harm, or irreversible transactions if the agent is misprompted or abused.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
```bash
# macOS / Linux — 用户同意开启
mkdir -p ~/.openclaw-autoclaw && echo '{"auto_approve": true}' > ~/.openclaw-autoclaw/config.json

# macOS / Linux — 用户拒绝(默认关闭)
mkdir -p ~/.openclaw-autoclaw && echo '{"auto_approve": false}' > ~/.openclaw-autoclaw/config.json
Confidence
96% confidence
Finding
This command persists 'auto_approve: true' in a user config file, turning on unattended execution of sensitive browser actions beyond a single task. Persistent approval is especially dangerous here because the skill is designed to log into sites and interact with social, shopping, and document platforms, so a later prompt or compromised workflow could trigger harmful actions without fresh consent.

Session Persistence

Medium
Category
Rogue Agent
Content
```bash
# macOS / Linux — 用户同意开启
mkdir -p ~/.openclaw-autoclaw && echo '{"auto_approve": true}' > ~/.openclaw-autoclaw/config.json

# macOS / Linux — 用户拒绝(默认关闭)
mkdir -p ~/.openclaw-autoclaw && echo '{"auto_approve": false}' > ~/.openclaw-autoclaw/config.json
Confidence
88% confidence
Finding
This duplicate persistence finding points to the same behavior: writing a long-lived configuration file that preserves approval state across future runs. While not session-token theft by itself, persistent authorization state lowers safeguards over time and increases the blast radius of prompt injection, misuse, or accidental invocation.

Session Persistence

Medium
Category
Rogue Agent
Content
```bash
# macOS / Linux — 用户同意开启
mkdir -p ~/.openclaw-autoclaw && echo '{"auto_approve": true}' > ~/.openclaw-autoclaw/config.json

# macOS / Linux — 用户拒绝(默认关闭)
mkdir -p ~/.openclaw-autoclaw && echo '{"auto_approve": false}' > ~/.openclaw-autoclaw/config.json
Confidence
88% confidence
Finding
This duplicate persistence finding points to the same behavior: writing a long-lived configuration file that preserves approval state across future runs. While not session-token theft by itself, persistent authorization state lowers safeguards over time and increases the blast radius of prompt injection, misuse, or accidental invocation.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
mkdir -p ~/.openclaw-autoclaw && echo '{"auto_approve": true}' > ~/.openclaw-autoclaw/config.json

# macOS / Linux — 用户拒绝(默认关闭)
mkdir -p ~/.openclaw-autoclaw && echo '{"auto_approve": false}' > ~/.openclaw-autoclaw/config.json
```

```bat
Confidence
85% confidence
Finding
Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
mkdir -p ~/.openclaw-autoclaw && echo '{"auto_approve": true}' > ~/.openclaw-autoclaw/config.json

# macOS / Linux — 用户拒绝(默认关闭)
mkdir -p ~/.openclaw-autoclaw && echo '{"auto_approve": false}' > ~/.openclaw-autoclaw/config.json
```

```bat
Confidence
85% confidence
Finding
Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
```bat
:: Windows — 用户同意开启
if not exist "%USERPROFILE%\.openclaw-autoclaw" mkdir "%USERPROFILE%\.openclaw-autoclaw"
echo {"auto_approve": true} > "%USERPROFILE%\.openclaw-autoclaw\config.json"

:: Windows — 用户拒绝(默认关闭)
if not exist "%USERPROFILE%\.openclaw-autoclaw" mkdir "%USERPROFILE%\.openclaw-autoclaw"
Confidence
96% confidence
Finding
This Windows command persists 'auto_approve: true', enabling unattended execution of sensitive browser actions. Because the agent can operate across many websites and perform impactful actions, a persistent blanket approval on Windows carries the same risk of unauthorized posts, messages, purchases, or form submissions without renewed user verification.

Missing User Warnings

Medium
Confidence
92% confidence
Finding
The description advertises broad capabilities such as logging in, posting, messaging, liking, and filling forms, but does not present a prominent upfront warning about account-impacting or irreversible actions. In context, this makes misuse more likely because the skill appears general-purpose while concealing the sensitivity of what it can do.

Session Persistence

Medium
Category
Rogue Agent
Content
> **⚠️ 每次调用 `browser_subagent` 之前必须先执行 relay 启动命令**(幂等,已在运行会自动跳过,不会重复启动):
> ```bash
> # macOS / Linux(nohup 后台运行,不随终端关闭)
> nohup {baseDir}/dist/relay > /dev/null 2>&1 &
> # Windows
> start /b {baseDir}\dist\relay.exe
Confidence
84% confidence
Finding
The instructions require launching a background relay process with `nohup`, leaving browser-control infrastructure running independently of the initiating terminal. Persistent background control increases the attack surface and can prolong access to active browser sessions or authenticated state beyond the immediate task.

Session Persistence

Medium
Category
Rogue Agent
Content
> **⚠️ 每次调用 `browser_subagent` 之前必须先执行 relay 启动命令**(幂等,已在运行会自动跳过,不会重复启动):
> ```bash
> # macOS / Linux(nohup 后台运行,不随终端关闭)
> nohup {baseDir}/dist/relay > /dev/null 2>&1 &
> # Windows
> start /b {baseDir}\dist\relay.exe
> ```
Confidence
80% confidence
Finding
The Windows equivalent starts the relay in the background, similarly persisting browser automation infrastructure across interactions. In the context of a skill that maintains sessions and can reuse state, persistence increases the likelihood of stale or unauthorized follow-on actions.

Intent-Code Divergence

Medium
Confidence
90% confidence
Finding
The file states that the `task` value must be the user's original words with no additions, deletions, or rewrites, but later sections instruct the agent to rewrite tasks by adding default quantities, stripping non-browser portions, and prepending resume/approval context. These are active contradictions in operator guidance, not mere omissions, and they materially change what the skill is told to do.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
| `task` | ✅ 必填 | 任务描述 |
| `start_url` | 可选 | 任务起始 URL |
| `session_id` | 可选 | 上次调用返回的 session_id,填入后在**同一浏览器窗口**继续会话;首次调用不填 |
| `auto_approve` | 可选 | `true` 时自动放行敏感操作(发评论、点赞、发消息等),不再暂停询问;**登录和验证码仍会暂停**。默认 `false` |
| `feishu_message_id` | 可选 | 飞书 `message_id`(从 Inbound Context 提取),任务完成后自动回复截图到该消息 |
| `feishu_chat_id` | 可选 | 飞书 `chat_id`(从 Inbound Context 提取),`feishu_message_id` 不可用时的 fallback |
Confidence
92% confidence
Finding
The `auto_approve` parameter explicitly allows automatic execution of sensitive actions such as commenting, liking, and messaging without per-action confirmation. In a browser agent with account access and posting capability, this materially increases the risk of unintended or manipulated actions being carried out autonomously.

Intent-Code Divergence

Medium
Confidence
88% confidence
Finding
The skill states that concurrent tasks are unsupported, yet also instructs the agent to proceed with new work even when a prior task may still be running. In a browser automation skill that can post, message, shop, and operate documents, this ambiguity can cause session confusion, cross-task interference, or actions being executed in the wrong browser state.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
---

## 信任模式(auto_approve)

控制敏感操作(发评论、点赞、发帖、发消息等)是否需要用户确认。**登录和验证码始终会暂停,不受此设置影响。**
Confidence
92% confidence
Finding
The trust mode is designed to suppress confirmation prompts for sensitive browser actions. Given the skill's ability to act on social and communication platforms, this creates a direct pathway for unauthorized or accidental account actions once the mode is enabled.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
控制敏感操作(发评论、点赞、发帖、发消息等)是否需要用户确认。**登录和验证码始终会暂停,不受此设置影响。**

持久化存储在 `~/.openclaw-autoclaw/config.json`:`{"auto_approve": true/false}`

### 使用流程
Confidence
90% confidence
Finding
Persisting the `auto_approve` preference in a local config makes risky behavior durable across sessions. That persistence means a one-time consent can silently affect later, unrelated browser tasks involving messages, posts, or other sensitive operations.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
**每次对话的第一次调用 `browser_subagent` 之前**,读取 `~/.openclaw-autoclaw/config.json`:

1. 如果文件存在且 `auto_approve` 字段存在 → **直接使用**,不询问
2. 如果文件不存在或 `auto_approve` 字段不存在(可能被删除或首次安装时未配置)→ **主动询问用户**:
   > autoglm-browser-agent技能有一种「信任模式」:
   > - 关闭(默认):每次执行敏感操作(如发评论、发帖等)时会暂停询问你,确认后才执行
Confidence
90% confidence
Finding
Automatically reusing a stored `auto_approve` setting without re-prompting the user removes friction that would otherwise catch risky or context-changed actions. In this skill, later tasks may be materially different from the one for which the user originally enabled trust mode.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
**每次对话的第一次调用 `browser_subagent` 之前**,读取 `~/.openclaw-autoclaw/config.json`:

1. 如果文件存在且 `auto_approve` 字段存在 → **直接使用**,不询问
2. 如果文件不存在或 `auto_approve` 字段不存在(可能被删除或首次安装时未配置)→ **主动询问用户**:
   > autoglm-browser-agent技能有一种「信任模式」:
   > - 关闭(默认):每次执行敏感操作(如发评论、发帖等)时会暂停询问你,确认后才执行
   > - 开启:敏感操作自动执行,不再逐次确认
Confidence
89% confidence
Finding
The documented onboarding flow encourages enabling a mode that auto-executes sensitive actions after a single broad consent question. That consent model is too coarse for a browser agent capable of interacting with third-party accounts and public-facing services.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
> - 无论开关,登录和验证码始终需要你手动操作
   >
   > 是否开启信任模式?
   - 用户同意 → 写入 `{"auto_approve": true}` 到 `~/.openclaw-autoclaw/config.json`
   - 用户拒绝 → 写入 `{"auto_approve": false}`

| 场景 | 带 auto_approve? |
Confidence
89% confidence
Finding
Writing `auto_approve` directly to persistent config after a one-time user response institutionalizes a dangerous autonomy level. If the environment is shared or if later prompts are ambiguous, the skill may continue taking sensitive actions with inadequate user awareness.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
>
   > 是否开启信任模式?
   - 用户同意 → 写入 `{"auto_approve": true}` 到 `~/.openclaw-autoclaw/config.json`
   - 用户拒绝 → 写入 `{"auto_approve": false}`

| 场景 | 带 auto_approve? |
|---|---|
Confidence
88% confidence
Finding
The policy cements a binary persistent trust state rather than evaluating the risk of each action. In this context, a durable broad approval can be abused by prompt manipulation or user misunderstanding to trigger external side effects.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
- 用户同意 → 写入 `{"auto_approve": true}` 到 `~/.openclaw-autoclaw/config.json`
   - 用户拒绝 → 写入 `{"auto_approve": false}`

| 场景 | 带 auto_approve? |
|---|---|
| config = true,任何调用 | ✅ `auto_approve=true` |
| config = false,任何调用(包括 interact 恢复) | ❌ 不带 |
Confidence
90% confidence
Finding
Always attaching `auto_approve=true` whenever config is true ensures that every future call inherits broad permission for sensitive actions. This is particularly dangerous because the skill is broadly invoked and can affect third-party services under the user's authenticated session.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
| 场景 | 带 auto_approve? |
|---|---|
| config = true,任何调用 | ✅ `auto_approve=true` |
| config = false,任何调用(包括 interact 恢复) | ❌ 不带 |

> **信任模式偏好只问一次**:config.json 一旦持久化(无论 true 或 false),后续对话不会再重复询问。用户想切换时主动说"开启/关闭信任模式"即可。
Confidence
88% confidence
Finding
The 'ask once' rule eliminates ongoing consent checks and normalizes silent execution of risky actions over time. In a browser agent with messaging and posting powers, long-lived blanket consent materially increases the chance of harmful unintended actions.

Natural-Language Policy Violations

Medium
Confidence
96% confidence
Finding
The instruction explicitly says to tell the user the extension-installation guidance in Chinese. This imposes a specific language on user-facing communication without opt-in or documented justification, which is a natural-language locale policy concern.

Natural-Language Policy Violations

Low
Confidence
96% confidence
Finding
文档标题和正文均以中文呈现,且未说明这是面向特定中文区域用户的限定文档,也未提供其他语言选项。按照语言/地区策略,这属于未经用户选择即强制特定语言的自然语言层面约束。

Static analysis

No suspicious patterns detected.