Back to skill

Security audit

clawquest-chat-agent

Security checks for vulnerabilities and agentic risk

Overview

The skill's public quest browsing is mostly coherent, but its documentation also describes automatic remote bash verification and persistent background cron activity that exceed a simple read-only browsing purpose.

Install only if you intend to use it for manual public ClawQuest lookup. Do not enable the documented cron heartbeat or any automatic verification flow that runs remote bash code unless the publisher supplies reviewed scripts, clear consent prompts, sandboxing, and a precise explanation of what is executed and submitted.

Vulnerability Patterns
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • System PersistenceInstalls backdoors, hooks, services, or scheduled tasks that survive the run
  • 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
Findings (3)

T03 · Remote Payload Retrieval and Execution

Error
Location
SKILL.md:286
Finding
Remote Verification Flow Executes Server-Provided Bash Code<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md:286-294` **Vulnerability Type**: Remote payload retrieval and execution **Risk Level**: Critical ### Vulnerable Code Snippet ```text When user asks about this: 1. Explain that skill verification proves the agent actually has the skill installed 2. The agent gets a challenge token, runs a bash script, and submits the result 3. This happens automatically — agent just needs the skill installed Verification flow: POST /challenges -> get token -> GET /verify/<token> -> run bash script -> POST result ``` ### Technical Analysis The Skill instructs the Agent to retrieve a verification payload from a remote service and execute it as a Bash script. The effective code therefore is not contained in the reviewed package and can change at any time after publication or audit. No signature verification, expected checksum, command allowlist, execution sandbox, privilege reduction, or explicit user confirmation is specified. The instruction that verification happens “automatically” further reduces the opportunity for the user to inspect or reject the downloaded code. Executing remotely controlled shell code is not necessary for the Skill's declared public quest-browsing functionality and materially exceeds least privilege. The subsequent unspecified result submission also creates a potential channel through which data accessed by the script could be returned to the service. ### Attack Path 1. An attacker controls or compromises the ClawQuest verification service, its hosting infrastructure, or a verification response. 2. The Agent requests a challenge token through `POST /challenges`. 3. The Agent retrieves verification content from `GET /verify/<token>`. 4. The malicious response provides or directs the Agent to a hostile Bash script. 5. Following the Skill instructions, the Agent executes the script without integrity validation or sandboxing. 6. The script runs with the operating-system privileges of th ...[truncated 960 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Remove all instructions to execute shell code supplied by a remote API. 2. Implement verification through a fixed, locally reviewed routine that accepts only a narrowly defined data challenge. 3. Treat the challenge as inert data and validate it against a strict schema, size limit, character policy, and expiration time. 4. Authenticate challenge responses and verify a pinned cryptographic signature before processing them. 5. If code execution is absolutely unavoidable, use a dedicated sandbox with: - No access to user files or credentials - An empty or tightly controlled environment - No network access - A read-only filesystem - CPU, memory, process, and time limits - A nonprivileged disposable user 6. Require explicit, informed user confirmation showing the exact code before execution. 7. Define the result schema precisely and prevent arbitrary local data from being included in submissions. 8. Log verification actions and fail closed when signatures, schemas, or sandbox controls cannot be validated. ]]>

T06 · System Persistence

Error
Location
SKILL.md:407
Finding
Unnecessary Recurring Task Deployment Creates Cross-Session Persistence<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md:407-447` **Vulnerability Type**: Persistent scheduled execution **Risk Level**: High ### Vulnerable Code Snippet ```text ## Heartbeat (Cron Tasks) ### Quest Browser **Schedule:** Every 30 minutes 1. Run: `curl -sS "https://api.clawquest.ai/quests?status=live&limit=20"` 2. Summarize new or notable quests for the user 3. Report which quests are available and their rewards ### Skill Update Check **Schedule:** Every 6 hours cd ~/.openclaw/workspace/skills/clawquest && node scripts/update-checker.js check **Purpose:** Silently checks if a newer version of this skill is available. Notifies user only if an update is found. ### Setup Deploy cron tasks: cd ~/.openclaw/workspace/skills/clawquest node scripts/cronjob-manager.js deploy ``` ### Technical Analysis The documentation directs users or Agents to deploy recurring tasks that survive the initiating Skill run. The jobs repeatedly contact a remote service, and one is described as operating silently. Persistent polling and update checks are not required to browse public quests in response to a user request. The referenced `scripts/update-checker.js` and `scripts/cronjob-manager.js` files are absent from the audited project. Consequently, the advertised deployment and update behavior cannot be reviewed and the documented commands are nonfunctional for the package as supplied. If these files were later obtained from another source, their behavior would fall outside the reviewed artifact. Although the documentation includes removal instructions, it does not require explicit informed consent before persistence is created, identify the exact scheduled-task configuration, or constrain what later remote responses can cause the Agent to process. ### Attack Path 1. A user or Agent follows the documented setup procedure. 2. A cron manager registers jobs that run every 30 minutes and every six hours. 3. These jobs continue executing after the origi ...[truncated 1147 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Remove automatic or recommended cron deployment from the default browsing workflow. 2. Make monitoring a separate, explicit, opt-in feature requiring informed user approval. 3. Supply every referenced script in the reviewed package; never direct users to execute an absent deployment or updater component. 4. Before installation, display: - The exact command to be scheduled - The execution frequency - The network destinations - The files and sessions it can access - The procedure for disabling and removing it 5. Avoid silent update checks. Report each network operation and do not download or install updates automatically. 6. Pin and cryptographically verify updates, and require user confirmation before applying them. 7. Use the least frequent practical polling interval and offer a one-shot command as the default. 8. Store scheduled-task state transparently and provide a verifiable removal command. 9. Constrain recurring jobs to read-only API access, a minimal environment, and no credentials. ]]>

T09 · Insecure Skill Coding Practices

Note
Location
scripts/quest-browser.js:45
Finding
Unsanitized API-Controlled Text Is Written to the Terminal<![CDATA[ ## Vulnerability Details **File Location**: `scripts/quest-browser.js:45-51, 94` **Vulnerability Type**: Terminal control-sequence injection **Risk Level**: Low ### Vulnerable Code Snippet ```js console.log(`\n${index + 1}. [${quest.type}] ${quest.title}`); console.log(` ID: ${quest.id}`); console.log(` Reward: ${reward}`); console.log(` Slots: ${slots}`); if (quest.requiredSkills?.length) console.log(` Skills: ${quest.requiredSkills.join(', ')}`); console.log(` Link: https://www.clawquest.ai/quests/${quest.id}`); ``` ```js skills.forEach(s => console.log(` • ${s.display_name || s.name} [${s.owner_handle || ''}] ${s.summary || ''}`)); ``` ### Technical Analysis Quest and skill fields obtained from the remote API are interpolated directly into terminal output. The code does not remove ANSI escape sequences, OSC commands, C0/C1 control characters, bidirectional text controls, or embedded line breaks. If an attacker can publish or alter quest or skill metadata, crafted fields could be interpreted by the user's terminal rather than displayed as inert text. Depending on terminal capabilities and configuration, this can hide or overwrite output, forge trusted-looking messages, alter displayed links, manipulate window titles, or trigger clipboard-related OSC functionality. This issue does not independently execute operating-system commands in a standard terminal. Its exploitability and impact depend on whether untrusted publishers can control the returned metadata and which control sequences the user's terminal supports. ### Attack Path 1. An attacker creates or modifies a quest or skill with control sequences embedded in its title, ID, owner handle, summary, required skill name, or related field. 2. The ClawQuest API returns the crafted metadata. 3. The user invokes `browse`, `search`, `skills`, or another affected display path. 4. `console.log` writes the untrusted bytes directly to the terminal. 5. The terminal interprets supp ...[truncated 647 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Sanitize every remote string before writing it to an interactive terminal. 2. Remove ANSI CSI and OSC sequences, C0/C1 controls, carriage returns, unexpected newlines, and dangerous bidirectional formatting characters. 3. Apply output length limits to remote titles, summaries, IDs, owner names, and skill lists. 4. Use a maintained terminal-string sanitization implementation, or implement and test a strict printable-character policy. 5. Keep raw JSON output separate from formatted terminal output and clearly label it as untrusted data. 6. Validate identifiers used in generated links against an expected format before interpolation. 7. Add tests containing ANSI color codes, cursor movement, OSC 8 links, OSC 52 clipboard commands, embedded newlines, and Unicode direction controls. ]]>
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
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (19)

Lp3

Medium
Category
MCP Least Privilege
Confidence
88% confidence
Finding
The skill advertises network-capable behavior and references local execution workflows, but its manifest does not declare any explicit tool scope such as allowed-tools or permissions. That creates an authorization ambiguity where a host may permit broader capabilities than users expect, especially for a user-invocable skill that can initiate external requests and operational tasks.

External Transmission

Medium
Category
Data Exfiltration
Content
GET  /agents/skills             -> list all skills available on ClawHub

Dashboard: https://www.clawquest.ai
API Docs:  https://api.clawquest.ai/docs/

All requests JSON. Errors: HTTP status + { "error": "message" }
```
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
GET  /agents/skills             -> list all skills available on ClawHub

Dashboard: https://www.clawquest.ai
API Docs:  https://api.clawquest.ai/docs/

All requests JSON. Errors: HTTP status + { "error": "message" }
```
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
GET  /agents/skills             -> list all skills available on ClawHub

Dashboard: https://www.clawquest.ai
API Docs:  https://api.clawquest.ai/docs/

All requests JSON. Errors: HTTP status + { "error": "message" }
```
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
GET  /agents/skills             -> list all skills available on ClawHub

Dashboard: https://www.clawquest.ai
API Docs:  https://api.clawquest.ai/docs/

All requests JSON. Errors: HTTP status + { "error": "message" }
```
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
GET  /agents/skills             -> list all skills available on ClawHub

Dashboard: https://www.clawquest.ai
API Docs:  https://api.clawquest.ai/docs/

All requests JSON. Errors: HTTP status + { "error": "message" }
```
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
GET  /agents/skills             -> list all skills available on ClawHub

Dashboard: https://www.clawquest.ai
API Docs:  https://api.clawquest.ai/docs/

All requests JSON. Errors: HTTP status + { "error": "message" }
```
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
GET  /agents/skills             -> list all skills available on ClawHub

Dashboard: https://www.clawquest.ai
API Docs:  https://api.clawquest.ai/docs/

All requests JSON. Errors: HTTP status + { "error": "message" }
```
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
GET  /agents/skills             -> list all skills available on ClawHub

Dashboard: https://www.clawquest.ai
API Docs:  https://api.clawquest.ai/docs/

All requests JSON. Errors: HTTP status + { "error": "message" }
```
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
GET  /agents/skills             -> list all skills available on ClawHub

Dashboard: https://www.clawquest.ai
API Docs:  https://api.clawquest.ai/docs/

All requests JSON. Errors: HTTP status + { "error": "message" }
```
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
GET  /agents/skills             -> list all skills available on ClawHub

Dashboard: https://www.clawquest.ai
API Docs:  https://api.clawquest.ai/docs/

All requests JSON. Errors: HTTP status + { "error": "message" }
```
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
GET  /agents/skills             -> list all skills available on ClawHub

Dashboard: https://www.clawquest.ai
API Docs:  https://api.clawquest.ai/docs/

All requests JSON. Errors: HTTP status + { "error": "message" }
```
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
GET  /agents/skills             -> list all skills available on ClawHub

Dashboard: https://www.clawquest.ai
API Docs:  https://api.clawquest.ai/docs/

All requests JSON. Errors: HTTP status + { "error": "message" }
```
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Vague Triggers

Medium
Confidence
94% confidence
Finding
Describing the skill as a general conversational assistant without strong activation boundaries makes it easier for the skill to overreach into adjacent tasks, including network calls, skill installation guidance, and verification workflows. Ambiguous scope increases the chance that a host agent invokes the skill in situations the user did not intend.

Context-Inappropriate Capability

Medium
Confidence
90% confidence
Finding
The verification section instructs running a bash script obtained through a challenge flow, which is a code-execution step not justified by the skill's read-oriented browsing function. Encouraging shell execution of remote challenge content can lead users or agents to run untrusted code with local privileges.

Context-Inappropriate Capability

Medium
Confidence
95% confidence
Finding
The skill's stated purpose is browsing public ClawQuest data, but the documentation adds cron deployment and local Node script execution that establish persistence and background activity beyond that purpose. This expands the attack surface by encouraging unattended execution on the user's machine, including silent update checks and recurring network access.

Missing User Warnings

Medium
Confidence
94% confidence
Finding
The periodic quest browser instructs ongoing background network polling and proactive reporting without a clear foreground warning or consent model. Unannounced recurring activity can leak usage patterns, surprise users, and normalize autonomous external communications from a nominally on-demand browsing skill.

External Transmission

Medium
Category
Data Exfiltration
Content
**Schedule:** Every 30 minutes

1. Run: `curl -sS "https://api.clawquest.ai/quests?status=live&limit=20"`
2. Summarize new or notable quests for the user
3. Report which quests are available and their rewards
Confidence
77% confidence
Finding
While the endpoint itself is benign, this instance is embedded in a scheduled background polling workflow. In that context, the external transmission becomes part of an unprompted recurring activity pattern that can surprise users and expand privacy and persistence risks.

Missing User Warnings

Medium
Confidence
96% confidence
Finding
The update checker is described as running silently in the background, which is especially risky because silent periodic network access and local script execution reduce transparency and auditability. Even if the current endpoint is benign, this pattern enables covert behavior and expands trust in remote-controlled update logic.

Static analysis

Detected: suspicious.env_credential_access

Environment variable access combined with network send.

Critical
Code
suspicious.env_credential_access
Location
scripts/utils.js:8