T09 · Insecure Skill Coding Practices
- Location
SKILL.md:78- Finding
Feishu application secret exposed through command-line arguments
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill appears to do what it says, but it handles long-lived Feishu app secrets in ways that could expose them locally.
Review before installing. Use this only on a trusted single-user machine or after tightening file permissions, because it creates a Feishu app and stores its app secret locally. After setup, verify Feishu permissions manually, avoid granting broad document/drive/calendar/contact scopes unless needed, and rotate the app secret if it may have appeared in command logs.
SKILL.md:78Feishu application secret exposed through command-line arguments
quick-setup.mjs:89Sensitive registration state and persistent credentials written without restrictive file permissions
The skill instructs execution of Node scripts that perform external Feishu registration and local credential persistence, but the manifest does not declare any tool scope or permissions boundary. This creates a transparency and policy-enforcement gap: an agent may invoke network-capable code and write secrets to local config without an explicit capability declaration or user-facing guardrails.
The description says the skill creates a Feishu app but does not prominently warn that newly issued app credentials will be saved to a local OpenClaw config file. This weakens informed consent around secret handling and local persistence, increasing the risk that users authorize storage of sensitive credentials without understanding where they will be written.
The trigger list includes an open-ended 'etc.', making activation criteria ambiguous and potentially broader than intended. In an agent setting, this can cause the skill to run on loosely related user requests, leading to unintended app creation, external authorization prompts, or credential writes.
The message states that '基础权限(消息收发等)已默认开启', implying the created Feishu app has remote permissions enabled. However, this function only updates local openclaw.json fields and does not call any API to grant or enable Feishu app permissions. This is an active contradiction between the inline/user-facing documentation text and the code's actual behavior.
The returned user-facing message is entirely in Chinese string literals, which forces a specific language for successful setup output. The file does not provide any user opt-in, locale selection, or justification that this skill is intended only for Chinese-speaking users.
The returned message states that '基础权限(消息收发等)已默认开启', implying the skill has enabled the bot's Feishu-side permissions. However, the implementation only creates the app via registration and writes credentials into openclaw.json; it does not call any API to grant or enable application permissions. This is an active contradiction between documentation/message text and actual behavior.
This permission guide encourages enabling broad Feishu scopes across messages, documents, drive, calendar, tasks, wiki, and contacts, but it does not clearly explain the privacy, surveillance, and data-exposure consequences of granting those permissions. In the context of a one-click bot setup skill that creates a new app for users, omission of consent and least-privilege warnings can cause users to over-provision access without understanding that the bot may read sensitive enterprise content and personal data.
The success message returned by saveFeishuConfig is entirely in Chinese, which forces a specific language for users regardless of their preferences. This is a natural-language policy concern because the file does not offer localization, fallback text, or any opt-in for that locale.
This markdown file presents all troubleshooting guidance exclusively in Chinese, with no indication that the skill or documentation is intentionally limited to Chinese-speaking users. Under the policy, forcing a specific language without user opt-in can be a natural-language policy violation.