T09 · Insecure Skill Coding Practices
- Location
publish.sh:10- Finding
Hardcoded ClawHub and GitHub Access Tokens
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill appears to be an AI coding helper, but it requests broad agent, command, file, and session powers while also shipping exposed publishing tokens and risky install guidance.
Install only after the publisher removes and rotates the exposed tokens, narrows the manifest permissions to implemented features, and adds explicit confirmation for global package installation, command execution, file modification, session-history access, and persistent thread binding. Use a sandboxed workspace if evaluating it before those changes.
publish.sh:10Hardcoded ClawHub and GitHub Access Tokens
src/index.ts:25Unsafe Global Installation of External npm Packages
skill.json:115Manifest Requests Broad Unused Execution, Filesystem, and Session Permissions
Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).
claw skill uninstall feishu-ai-coding-assistant
rm -rf ~/.openclaw/skills/feishu-ai-coding-assistant
## 获取帮助
Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).
claw skill uninstall feishu-ai-coding-assistant
rm -rf ~/.openclaw/skills/feishu-ai-coding-assistant
## 获取帮助
The script contains hardcoded ClawHub and GitHub access tokens directly in source code, which is a clear credential exposure vulnerability. Anyone with access to the file can reuse these secrets to authenticate to external services, publish content, push code, or take other actions permitted by the tokens, and the publication context makes the exposure especially dangerous because the script is intended to be shared and executed.
The script not only embeds authentication tokens but also uses them directly in commands without any safe handling, masking, or user protection. This can expose secrets through source control, terminal history, process inspection, logs, or accidental redistribution, enabling unauthorized access to GitHub and ClawHub.
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.
### 问题 3: 子 Agent 创建失败
**错误:** `Failed to create subagent`
**解决:**
1. 检查 OpenClaw 权限配置
The uninstall section instructs users to run a recursive force-delete command against a path under their home directory without any warning, confirmation guidance, or backup caution. While the specific path is narrower than a full home-directory wipe, destructive shell commands in installation docs can cause irreversible data loss if copied incorrectly, expanded unexpectedly, or adapted by users without understanding the risk.
The README explicitly advertises automatic tool installation and background sub-agent execution, but does not clearly warn users that invoking the skill may install global packages, launch autonomous processes, and modify files in the workspace. In an agent skill context, lack of disclosure materially increases the risk of unexpected system changes and unsafe delegation to sub-agents.
Documenting autoInstall: true without a warning normalizes unattended package installation and hides the trust boundary around external dependencies and global system changes. If users enable this blindly, the skill could fetch and install tooling from package registries with elevated trust and little operator awareness.
The skill explicitly enables automatic installation of developer tools and promotes ACP/file-command capable runtimes, but it does not clearly warn that using the skill may modify the host system, install global packages, create files, or execute commands. In an agent setting, this can lead users to authorize actions with system-wide impact without informed consent, increasing the risk of unwanted package installation, workspace modification, or execution of unsafe generated commands.
The script logs into ClawHub, pushes to GitHub, and publishes the skill remotely, all of which are network operations that transmit repository and skill data. While the script prints step names, it does not clearly warn the user that running it will send data to third-party services using provided credentials.
The manifest enables automatic installation of external tooling and grants powerful permissions including exec, process control, session spawning, and filesystem write/edit access, but the description does not clearly warn users that installing the skill may execute package-manager commands and create code-executing subagents. In a coding-assistant context these capabilities may be functionally expected, but combining autoInstall=true with broad permissions materially increases the risk of unintended command execution, supply-chain exposure, and abuse if the skill or its downstream tools are compromised.
The top-level documentation explicitly claims automatic tool detection/installation, child-agent session creation, persistence support, and execution monitoring. In the code, tool checks are stubbed to always report not installed, install only prints shell commands, and agent management paths return placeholder text rather than invoking real operations.
The file’s user-facing descriptions, menus, help text, and prompts are consistently presented only in Chinese. Under the stated policy, forcing a specific language without user opt-in is a natural-language policy violation unless the locale limitation is explicitly justified, which is not present here.
The help documentation describes operational commands such as creating sub-agents, checking installation status, killing agents, and steering running sessions. However, the corresponding handlers only return explanatory strings saying the real action would need to be executed in a real environment, so the documented behavior materially overstates what the code actually does.
This TypeScript test file contains natural-language expectations exclusively in Chinese, including user-facing command descriptions and prompts. Under the policy rule for language/locale, this indicates the skill is designed to respond in a fixed language without evidence of user choice or documented locale restriction.
The document forces a specific language/locale for all user-facing instructions, and there is no indication that the skill is region-specific or that alternative language documentation is available. Under the stated policy, a fixed language without user opt-in can be a natural-language policy violation.
All user-facing instructions and examples in the README are presented in Chinese, and the document does not indicate that another language option is available. Under the policy, forcing a specific language without user opt-in can be a natural-language policy issue unless the locale limitation is clearly documented and justified.
The skill's natural-language interface and examples are entirely presented in Chinese, and no opt-in or language-selection guidance is provided. Under the policy, forcing a specific language without user choice can be a locale-policy issue unless the skill is clearly documented as region-specific.
The skill advertises persistent session history and thread-bound channel routing without clearly disclosing retention, visibility, or privacy implications. Persistent bindings can cause prior context, project data, or sensitive prompts to be retained and automatically routed across interactions in ways users may not expect.
The manifest description is written entirely in Chinese and presents the skill as a Chinese-language assistant, but this file does not indicate that language selection is optional or that the skill is intentionally limited to a Chinese-speaking context. Under the stated policy, forcing a specific language without user opt-in can be a natural-language policy issue.
Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.
"author": "OpenClaw Skill Master",
"license": "MIT",
"devDependencies": {
"@types/node": "^20.10.0",
"@types/jest": "^29.5.0",
"@typescript-eslint/eslint-plugin": "^6.0.0",
"@typescript-eslint/parser": "^6.0.0",
Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.
"license": "MIT",
"devDependencies": {
"@types/node": "^20.10.0",
"@types/jest": "^29.5.0",
"@typescript-eslint/eslint-plugin": "^6.0.0",
"@typescript-eslint/parser": "^6.0.0",
"eslint": "^8.50.0",
Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.
"devDependencies": {
"@types/node": "^20.10.0",
"@types/jest": "^29.5.0",
"@typescript-eslint/eslint-plugin": "^6.0.0",
"@typescript-eslint/parser": "^6.0.0",
"eslint": "^8.50.0",
"jest": "^29.7.0",
Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.
"@types/node": "^20.10.0",
"@types/jest": "^29.5.0",
"@typescript-eslint/eslint-plugin": "^6.0.0",
"@typescript-eslint/parser": "^6.0.0",
"eslint": "^8.50.0",
"jest": "^29.7.0",
"ts-jest": "^29.1.0",
Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.
"@types/jest": "^29.5.0",
"@typescript-eslint/eslint-plugin": "^6.0.0",
"@typescript-eslint/parser": "^6.0.0",
"eslint": "^8.50.0",
"jest": "^29.7.0",
"ts-jest": "^29.1.0",
"ts-node": "^10.9.2",
Detected: suspicious.destructive_delete_command, suspicious.exposed_secret_literal