T09 · Insecure Skill Coding Practices
- Location
send.js:143- Finding
Unvalidated API Base URL Can Receive the Bot Bearer Token
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill does what it says, but it uses local bot credentials to send real WeChat messages and has insufficient safeguards around where those credentials are sent and what identifiers are logged.
Install only if you intentionally want this agent to send messages and files to the configured WeChat recipient through your local WorkBuddy ClawBot account. Before use, verify ~/.workbuddy/settings.json points baseUrl exactly to the official Weixin iLink endpoint, avoid disabling sandbox broadly, and treat botToken, cursor files, context tokens, message contents, and recipient IDs as sensitive. Prefer adding an explicit confirmation step and redacting the recipient ID from logs before using it in routine workflows.
send.js:143Unvalidated API Base URL Can Receive the Bot Bearer Token
send.js:346Sensitive Recipient Identifier Is Written to Console Logs
Referenced artifact was not completely inspected
> 本仓库**只含 `SKILL.md` + `send.js`**,接收方用自己的 `settings.json` 即可,无需你提供任何密钥。
Referenced artifact was not completely inspected
> 本仓库**只含 `SKILL.md` + `send.js`**,接收方用自己的 `settings.json` 即可,无需你提供任何密钥。
Referenced artifact was not completely inspected
> 本仓库**只含 `SKILL.md` + `send.js`**,接收方用自己的 `settings.json` 即可,无需你提供任何密钥。
Referenced artifact was not completely inspected
> 本仓库**只含 `SKILL.md` + `send.js`**,接收方用自己的 `settings.json` 即可,无需你提供任何密钥。
Referenced artifact was not completely inspected
> 本仓库**只含 `SKILL.md` + `send.js`**,接收方用自己的 `settings.json` 即可,无需你提供任何密钥。
Referenced artifact was not completely inspected
> 本仓库**只含 `SKILL.md` + `send.js`**,接收方用自己的 `settings.json` 即可,无需你提供任何密钥。
Referenced artifact was not completely inspected
> 本仓库**只含 `SKILL.md` + `send.js`**,接收方用自己的 `settings.json` 即可,无需你提供任何密钥。
The README explicitly promotes proactive sending of text, images, files, and video to a boss's WeChat account, but it does not prominently warn about privacy, consent, or data-sharing implications before use. Because this skill enables outbound transmission over an external messaging channel, users may send sensitive business or personal content without understanding that data is being shared beyond the local environment.
The skill documents direct network access to external Tencent/Weixin endpoints and even advises disabling the sandbox, but it declares no explicit tool scope or permissions boundary. That increases the chance of unreviewed outbound actions and makes accidental or unauthorized message sending easier if the skill is invoked in the wrong context.
The trigger phrases are broad enough to overlap with ordinary user requests like '给老板发微信' or '发图片给老板', which can cause unintended invocation of a skill that performs real outbound messaging over a connected bot account. In this skill's context, mistaken activation is more dangerous because it can proactively contact a real recipient using locally stored credentials and sensitive identifiers.
The 'when to use' examples are ambiguous and omit scope boundaries, making it easy for the agent to select this skill for generic messaging requests. Because the skill reads local bot credentials and sends outbound messages/files to a boss's WeChat identity, accidental invocation can create privacy, consent, and unauthorized-communication risks.
The usage guidance at L031 says text messages '默认空 context_token,无需激活', presenting no activation requirement. Later, L084-L089 explicitly states that this old conclusion has expired and even empty-token text sends fail with ret:-2 after session expiry, so the earlier instruction actively contradicts the later documented behavior.
L154 documents the text path as defaulting to an empty token with no cursor or activation needed. But L084-L089 and L214 explain that after session expiry, even text messages with empty token are rejected and require the user to reactivate the bot chat, so this is an active contradiction rather than a mere omission.
L169 says '文本默认空 context_token 即可', implying that empty-token text sending is sufficient. This conflicts with L084-L089 and the troubleshooting table at L214, which state that after session expiry text sends are also blocked until the user sends a message to reactivate the session.
This markdown file makes a concrete implementation claim about send.js automatically adding a BOM for text-like files. Since the analyzed file is only documentation and no send.js source is provided here, the statement functions as documentation asserting behavior that is not evidenced within this file and may mislead users if inaccurate.
No suspicious patterns detected.