T09 · Insecure Skill Coding Practices
- Location
SKILL.md:29- Finding
Hardcoded QQ Recipient Identifier May Cause Unintended Message Disclosure
- Content
View full analysis
Vulnerability Details
File Location:
SKILL.md, lines 29 and 72
Vulnerability Type: Hardcoded recipient identifier and unsafe example configuration
Risk Level: MediumVulnerable Code
At
SKILL.md:29, the documented target format contains a concrete recipient identifier:text qqbot:c2c:4AFDDAB3E1ABB0B75D790C12B22086EFAt
SKILL.md:72, the example configuration repeats the same identifier:json { "_readme": "QQ-bot-connect configuration file", "default": { "openid": "4AFDDAB3E1ABB0B75D790C12B22086EF", "type": "c2c", "name": "Owner" }, "_format": { "c2c_private": "qqbot:c2c:{openid}", "group": "qqbot:group:{groupid}" } }Technical Analysis
The skill embeds an actual-looking QQ
openidin operational examples. This conflicts with the packagedconfig.json, wheredefault.openidis an explicit placeholder. Because language-model agents frequently derive tool arguments directly from examples, the concrete identifier may be treated as a usable default rather than illustrative data.When the skill is invoked to send text or local media, the agent could copy the example target instead of resolving and validating the recipient from
config.jsonor the user's request. This is particularly significant because the skill supports files, images, audio, and video in addition to text.The identifier is not established to be a credential or secret. The security issue is unsafe recipient selection that can disclose user-provided content to an unintended QQ account.
Attack Path
- The skill is loaded in response to a request to send text or a local file through QQ.
- The agent reads the concrete
qqbot:c2c:4AFDDAB3E1ABB0B75D790C12B22086EFexample. - The packaged configuration provides no valid default identifier because its value is only a placeholder.
- Instead of rejecting the missing configuration or asking the user to confirm a recipient, the agent adopts the concrete example identifi ...[truncated 785 chars]
- Remediation
View remediation
Remediation Suggestions
- Replace every concrete QQ identifier in the documentation with an unmistakable placeholder:
text qqbot:c2c:{OPENID}- Update the example configuration accordingly:
json { "default": { "openid": "{OPENID}", "type": "c2c", "name": "{DISPLAY_NAME}" } }-
Require the agent to reject empty, placeholder, or malformed identifiers rather than falling back to documentation examples.
-
Resolve recipients only from an explicitly supplied user target or a validated local configuration value.
-
Before sending, present the resolved recipient type and identifier to the user for confirmation, especially when transmitting files or other potentially sensitive media.
-
Add an explicit rule stating that identifiers appearing in documentation are examples and must never be used as live recipients.
-
Consider maintaining an allowlist of approved recipients and requiring additional confirmation when a requested target is not on that list.
