T01 · Skill Instruction Hijacking
- Location
SKILL.md:343- Finding
Import Workflow Permits Persistent Agent Instruction and Memory Poisoning
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This is a disclosed workspace file-sharing skill, but it needs Review because it can upload sensitive agent files to a third-party service and import files that change future agent behavior.
Install this only for intentional workspace file handoffs with trusted recipients or senders. Avoid sharing secrets, profile files, memory, SOUL.md, AGENTS.md, or skills unless you have reviewed their contents and intend to transfer agent behavior. Treat db_id and api_token like passwords, preview before importing, compare sensitive files before overwriting them, and use burn/delete for shares that should not remain accessible.
SKILL.md:343Import Workflow Permits Persistent Agent Instruction and Memory Poisoning
SKILL.md:119Sensitive Workspace Content Is Uploaded in Plaintext to an External Service
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.
## Safety Rules
- Only read from and write to the current workspace.
- Resolve every candidate path to a real path and reject anything outside the workspace.
- Reject absolute destination paths and any destination path containing `..`.
- Never touch `~/.openclaw/**`.
This finding points to the same external registration flow to api.db9.ai, which establishes outbound connectivity and creates a remote storage context. In a skill designed to move files between workspaces, this materially increases risk because the remote service becomes a data sink and any compromise, misuse, or mistaken file selection can disclose private workspace contents.
curl -sS -X POST "https://api.db9.ai/customer/anonymous-register" \
-H "Content-Type: application/json" \
-d '{}'
This finding points to the same external registration flow to api.db9.ai, which establishes outbound connectivity and creates a remote storage context. In a skill designed to move files between workspaces, this materially increases risk because the remote service becomes a data sink and any compromise, misuse, or mistaken file selection can disclose private workspace contents.
curl -sS -X POST "https://api.db9.ai/customer/anonymous-register" \
-H "Content-Type: application/json" \
-d '{}'
Creating a remote database on an external service is part of the data export pipeline and therefore a true external transmission risk. The context makes it more dangerous because the skill then stores selected workspace files there and relies on bearer-token access, so accidental disclosure of the token or overbroad file selection can expose all uploaded content.
wechat-share-YYYYMMDD-HHMMSS-RAND:curl -sS -X POST "https://api.db9.ai/customer/databases" \
-H "Authorization: Bearer <API_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"name":"wechat-share-20260323-103015-ab12"}'
This step uploads actual file contents to the external SQL API via fs9_write, making the exfiltration path concrete rather than hypothetical. The skill includes some guardrails, but it still instructs the agent to serialize local files and send them off-box, so any failure in path validation, secret detection, or user understanding could leak sensitive workspace material.
Use the SQL API:
curl -sS -X POST "https://api.db9.ai/customer/databases/<DB_ID>/sql" \
-H "Authorization: Bearer <API_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"query":"SELECT fs9_write('\"'\"'/files/SOUL.md'\"'\"', '\"'\"'...content...'\"'\"')"}'
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
If burn is requested, prefer deleting the whole share database:
curl -sS -X DELETE "https://api.db9.ai/customer/databases/<DB_ID>" \
-H "Authorization: Bearer <API_TOKEN>"
Reading the remote manifest from the external service is an outbound interaction with untrusted remote data and is part of a workflow that imports files into the workspace. While not exfiltration of local data, it expands the trust boundary and can enable malicious share metadata to drive overwrites or unsafe imports if validation is incomplete.
Use the SQL endpoint with curl:
curl -sS -X POST "https://api.db9.ai/customer/databases/<DB_ID>/sql" \
-H "Authorization: Bearer <API_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"query":"SELECT fs9_read('\"'\"'/manifest.json'\"'\"') AS content"}'
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.
- `SOUL.md`
- `AGENTS.md`
- `skills/wechat-share/SKILL.md`
可能覆盖:
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.
- `SOUL.md`
- `AGENTS.md`
- `skills/wechat-share/SKILL.md`
可能覆盖:
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.
已导入这些文件:
- `SOUL.md`
- `skills/example/SKILL.md`
如果这次启用了 burn,远端分享已经被删除,或者已回退为删除远端文件。
这条分享命令不要再次转发。
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.
已导入这些文件:
- `SOUL.md`
- `skills/example/SKILL.md`
如果这次启用了 burn,远端分享已经被删除,或者已回退为删除远端文件。
这条分享命令不要再次转发。
The file instructs the skill to use the Chinese template when the user is speaking Chinese, and similarly mandates the English template when the user is speaking English. This is a natural-language locale policy decision embedded in the skill content, but it does not explicitly offer the user a language choice or opt-in.
This line directs the skill to use the English template whenever the user is speaking English, which enforces a locale choice implicitly. The policy exception for language constraints does not apply here because the file does not document user choice or a justified region-specific requirement.