Back to skill

Security audit

Quick Team

Security checks for vulnerabilities and agentic risk

Overview

The skill is mostly coherent, but its reusable templates can persist API keys and someone else's personal profile into generated agent workspaces.

Review and edit the templates before installing or using this skill. Replace the API-key instruction with environment-variable or secret-manager references only, remove the hard-coded personal profile from MEMORY.md, and keep allowAgents limited to specific agent IDs unless you explicitly need broader spawn access.

Vulnerability Patterns
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (2)

T09 · Insecure Skill Coding Practices

Warning
Location
templates/TOOLS.md:10
Finding
Plaintext API Key Storage Encouraged in Agent Workspace<![CDATA[ ## Vulnerability Details **File Location**: `templates/TOOLS.md`, lines 10–12 **Vulnerability Type**: Plaintext sensitive-data storage **Risk Level**: Medium ### Vulnerable Code ```markdown ## 特殊配置 {记录环境特定的配置、API key 等} ``` The placeholder instructs users to record environment-specific configuration, including API keys, in the generated `TOOLS.md` file. ### Technical Analysis The template encourages credentials to be stored directly in an Agent workspace document. Such files may be automatically loaded into model context, accessed by Agent tools, included in logs or diagnostic output, copied into backups, or accidentally committed to source control. This design unnecessarily exposes credentials to every component or person capable of reading the workspace. It also prevents effective secret scoping and rotation because the credential becomes persistent plaintext rather than a reference to a protected secret source. The project contains no evidence of automatic credential exfiltration. The vulnerability is the unsafe secret-storage guidance and the resulting opportunity for later disclosure. ### Attack Path 1. A user creates an Agent using the provided templates. 2. Following the template guidance, the user inserts an API key into `TOOLS.md`. 3. The generated workspace persists the credential in plaintext. 4. An Agent, local tool, subprocess, backup service, repository user, or diagnostic process reads or copies the file. 5. The exposed credential is used to access the corresponding external service with the permissions assigned to that key. ### Impact Assessment Exploitation may disclose API credentials and grant access to the services authorized by those credentials. The exact privileges depend on the stored key and may include reading protected data, consuming paid API resources, modifying remote resources, or impersonating the credential owner. The exposure scope includes generated Agent workspaces, model context, logs, backups, sourc ...[truncated 77 chars]
Remediation
<![CDATA[ ## Remediation Suggestions - Remove all guidance suggesting that API key values should be written to `TOOLS.md` or any other Agent instruction file. - Replace the placeholder with instructions to record only environment-variable names or secret-manager references, never secret values. - Store credentials in an operating-system credential store, dedicated secret manager, or access-controlled runtime environment variable. - Grant each Agent only the minimum credential scope required for its duties. - Prevent secret-bearing files from entering model context, logs, backups, and source control. - Add automated secret scanning to the project and generated workspaces. - Document procedures for credential rotation and immediate revocation after accidental disclosure. A safer replacement would be: ```markdown ## Special Configuration Record only environment-variable names or secret-manager identifiers here. Never store API keys, passwords, tokens, or other secret values in this file. ``` ]]>

T09 · Insecure Skill Coding Practices

Note
Location
templates/MEMORY.md:7
Finding
Personal Information Hard-Coded into a Reusable Persistent-Memory Template<![CDATA[ ## Vulnerability Details **File Location**: `templates/MEMORY.md`, lines 7–10 **Vulnerability Type**: Persistent plaintext personal-data propagation **Risk Level**: Low ### Vulnerable Code ```markdown - **姓名:** 赵文龙 - **称呼:** 赵文龙 - **时区:** Asia/Shanghai - **身份:** 短流创团队主理人,故事创作者 ``` The reusable memory template contains a specific name, timezone, and occupational identity rather than neutral placeholders. ### Technical Analysis `README.md` describes the files under `templates/` as blank templates, while the creation workflow in `SKILL.md` instructs the Agent to copy these templates into each new member workspace. Consequently, the hard-coded identity information can be replicated into persistent `MEMORY.md` files without explicit user review or consent. Because `MEMORY.md` is intended to provide long-term Agent context, a spawned Agent may treat this information as authoritative. This creates both a privacy concern and a persistent context-integrity problem: unrelated users can inherit another person's identity data, and generated Agents may reveal or act upon inaccurate personal information. The reviewed project does not contain evidence that this information is automatically transmitted to a third party. Exposure occurs when copied memory is read, backed up, committed, or incorporated into Agent responses. ### Attack Path 1. A user invokes the documented Agent-creation workflow. 2. The workflow copies `templates/MEMORY.md` into a new Agent workspace. 3. The embedded personal information becomes part of the Agent's persistent memory. 4. The spawned Agent reads the file as trusted context. 5. The Agent may disclose the identity in responses, personalize behavior around it, or propagate it into additional output, logs, backups, or repositories. ### Impact Assessment The issue can expose the embedded name, timezone, and occupational identity to users and systems that access generated workspaces. It can also contaminate the long-term state of ...[truncated 279 chars]
Remediation
<![CDATA[ ## Remediation Suggestions - Replace every hard-coded personal field with neutral placeholders such as `{controller name}`, `{preferred form of address}`, `{timezone}`, and `{role}`. - Require explicit user confirmation before writing personal information into persistent Agent memory. - Generate a minimal memory file when identity details are unavailable rather than copying sample data. - Clearly distinguish reusable templates from examples and ensure that sample identities remain only under `examples/`. - Add a validation step that rejects unresolved sample identities before workspace creation. - Review existing generated workspaces and remove or correct propagated personal information. - Document retention, access-control, and deletion expectations for persistent memory files. A safer template would be: ```markdown - **Name:** {controller name} - **Preferred address:** {preferred form of address} - **Timezone:** {timezone} - **Role:** {controller role} ``` ]]>
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (15)

Context-Inappropriate Capability

High
Confidence
98% confidence
Finding
Declaring `exec` for Python/shell execution is materially over-privileged for a skill whose purpose is generating folder structures and configuration files. Command execution creates a direct path to arbitrary code execution, filesystem modification, and chained abuse if an attacker can influence prompts or generated commands.

Natural-Language Policy Violations

Medium
Confidence
93% confidence
Finding
The description requires operation in Chinese (for example, "用自然语言快速创建") and the document consistently prescribes Chinese-specific conventions, while offering no language or locale choice. This constitutes a language policy issue because the skill appears to enforce a specific language context without explicit user opt-in or documented locale justification.

Vague Triggers

Medium
Confidence
95% confidence
Finding
The trigger phrases are broad everyday-language requests such as creating a member, adding a role, or making a new agent, which can cause the skill to activate during ordinary conversation without clear user intent to modify configuration. In this skill's context, accidental activation is more dangerous because the documented workflow includes creating files, editing ~/.qclaw/openclaw.json, expanding allowAgents, and potentially restarting the gateway.

Natural-Language Policy Violations

Medium
Confidence
88% confidence
Finding
The skill name, persona, and operating description are entirely in Chinese and do not offer any language choice or indicate that Chinese is optional. This can amount to an implicit language policy constraint without user opt-in.

Vague Triggers

Medium
Confidence
93% confidence
Finding
The description says the skill is called whenever the controller needs to collect information, do competitor analysis, or organize information, but it does not define concrete trigger phrases, scope limits, or exclusion conditions. These tasks are common and broadly phrased, which could lead to unintended invocation in many routine assistant workflows.

Natural-Language Policy Violations

Medium
Confidence
88% confidence
Finding
The memory file hard-codes a Chinese-language persona, timezone, and user profile without any indication that this context was explicitly chosen by the end user. In a reusable assistant skill, this can silently bias outputs, override user expectations, and cause privacy or personalization issues by imposing locale and identity assumptions that may not apply.

Natural-Language Policy Violations

Medium
Confidence
95% confidence
Finding
The entire skill definition is written in Chinese and specifies fixed report phrasing such as '【研究助手】主题 + 3 条核心发现 + 来源链接' without indicating that users may choose another language. This creates a natural-language locale constraint that is not presented as optional or justified as region-specific.

Context-Inappropriate Capability

Medium
Confidence
92% confidence
Finding
The skill is described as creating local directory structures and configuration templates, but its tool list adds network search and webpage retrieval capabilities that are not necessary for that stated purpose. Unnecessary network-capable tools expand the attack surface, enable data exfiltration or prompt-driven scope creep, and make it easier for the agent to access untrusted external content during a task that should remain local and deterministic.

Natural-Language Policy Violations

Medium
Confidence
94% confidence
Finding
This markdown template specifies all user-facing field guidance in Chinese, which effectively imposes a language choice on downstream users without indicating any option to use another language. Under the policy for natural-language violations, forcing a specific language without user opt-in is in scope.

Natural-Language Policy Violations

Medium
Confidence
95% confidence
Finding
The template content is written entirely in Chinese, including headings and guidance text, which implicitly forces a specific language/locale for users of the skill. There is no indication that language choice is optional or that the template is intended only for a Chinese-speaking or region-specific context.

Natural-Language Policy Violations

Medium
Confidence
93% confidence
Finding
The template headings and instructions are entirely in Chinese, which implicitly requires the skill author and likely downstream agent behavior to operate in a specific language. There is no indication that users can choose another language or that the Chinese-only constraint is justified by a region-specific requirement.

Natural-Language Policy Violations

Medium
Confidence
93% confidence
Finding
The file's headings and instructional text are entirely in Chinese, which can impose a specific language on downstream skill authors or users. There is no indication that the skill is region-specific or that another language may be used, so this appears to violate the language/locale choice policy.

Natural-Language Policy Violations

Low
Confidence
88% confidence
Finding
The instruction "用中文拼音首字母" imposes a Chinese-language naming convention for generated IDs regardless of user preference. Because the file does not offer an alternative naming scheme or explain that this skill is region-specific, the rule reflects a locale-specific requirement without opt-in.

Natural-Language Policy Violations

Low
Confidence
91% confidence
Finding
The instructions state that Chinese content should be prioritized and distinguish behavior by language, but they do not offer the user a language or locale choice. This is a natural-language policy concern because it imposes a language preference without explicit opt-in or a documented region-specific justification.

Natural-Language Policy Violations

Low
Confidence
96% confidence
Finding
Lines L09-L21 present the operative template guidance in Chinese, with no indication that users may choose another language or that the template is region-specific. This creates a natural-language locale policy concern because the skill implicitly enforces a specific language without user opt-in.

Static analysis

No suspicious patterns detected.