T09 · Insecure Skill Coding Practices
- Location
src/utils/request.js:94- Finding
Authentication Token Exposed in URL Query Strings
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill mostly does what it says, but its credential handling and runtime messages have material safety and disclosure problems that should be reviewed before installation.
Install only if you are comfortable sending Douyin URLs, search terms, result limits, and your GUAIKEI_API_TOKEN to www.guaikei.com. Treat the token as sensitive because this implementation places it in request URLs. Review or patch the authentication-error messages and local logging behavior before using it in shared, regulated, or sensitive environments.
src/utils/request.js:94Authentication Token Exposed in URL Query Strings
src/utils/token.js:23Runtime Promotional and Contact Output Contradicts the Declared Neutral Authentication Policy
The skill states that logs are automatically written to a local logs/ directory, but this file-level description does not clearly scope or constrain what gets logged. Because the skill processes user queries, URLs, and uses a token-backed API, local log persistence can capture sensitive operational data and create unintended retention or leakage paths on shared hosts.
The skill states that logs are automatically written to a local logs/ directory, but this file-level description does not clearly scope or constrain what gets logged. Because the skill processes user queries, URLs, and uses a token-backed API, local log persistence can capture sensitive operational data and create unintended retention or leakage paths on shared hosts.
The skill states that logs are automatically written to a local logs/ directory, but this file-level description does not clearly scope or constrain what gets logged. Because the skill processes user queries, URLs, and uses a token-backed API, local log persistence can capture sensitive operational data and create unintended retention or leakage paths on shared hosts.
The skill states that logs are automatically written to a local logs/ directory, but this file-level description does not clearly scope or constrain what gets logged. Because the skill processes user queries, URLs, and uses a token-backed API, local log persistence can capture sensitive operational data and create unintended retention or leakage paths on shared hosts.
The skill states that logs are automatically written to a local logs/ directory, but this file-level description does not clearly scope or constrain what gets logged. Because the skill processes user queries, URLs, and uses a token-backed API, local log persistence can capture sensitive operational data and create unintended retention or leakage paths on shared hosts.
The skill states that logs are automatically written to a local logs/ directory, but this file-level description does not clearly scope or constrain what gets logged. Because the skill processes user queries, URLs, and uses a token-backed API, local log persistence can capture sensitive operational data and create unintended retention or leakage paths on shared hosts.
The trigger rules explicitly allow invocation even when Douyin is not named, using broad phrases like '查一下' or '帮我看看' for short-video content, creators, comments, or trends. Overbroad triggers can cause the agent to invoke this external-data skill in contexts the user did not intend, leading to unnecessary access to third-party services, data collection, logging, and possible confusion between platforms.
The skill explicitly depends on an environment variable (GUAIKEI_API_TOKEN) but does not declare any permissions or allowed-tools scope indicating access to environment data. This creates hidden capability surface: an orchestrator may grant broader runtime access than users or reviewers expect, reducing transparency and making secret handling harder to audit.
The implicit trigger examples remain ambiguous, especially for requests like competitor research or finding hot content without explicitly naming the platform. In an agent environment, ambiguous routing can result in the wrong skill being called, causing unintended data retrieval, unnecessary token use, and privacy or compliance issues if the request was meant for another platform or internal source.
The README presents the skill name and all operating instructions exclusively in Chinese, and section 9/10 defines natural-language command mappings only for Chinese phrases. This effectively imposes a specific language/locale on users without documenting an opt-in or offering alternatives, which matches the language-policy violation criteria.
This markdown file documents commands to fetch a Douyin creator's published works and a video's comments, which can affect user privacy and involve collection of third-party content data. The documentation provides usage details only and does not include any warning or disclosure about privacy considerations, responsible use, or platform-policy implications.
This code sends a skill token and a video URL to remote API endpoints via requestApi, which is a network operation involving potentially sensitive user or system data. While the functions have developer-facing docstrings, there is no user-facing warning, confirmation, or visible disclosure in this file about transmitting that data externally.
The GET request places the authentication token in query parameters, which are more likely to be exposed through logs, proxies, browser history, analytics, or intermediary monitoring than headers or POST bodies. In a skill that processes user-supplied Douyin URLs, leakage of this token could let an attacker reuse the credential to query the backend API or perform other authorized actions.
The CLI persists fetched comment data to a local JSON file after completing a read/query action, creating an undeclared secondary data sink on disk. Comment content can include personal data, sensitive opinions, or identifiers, and silent local retention increases exposure through later access, backup synchronization, or accidental disclosure.
The program writes retrieved comments to a local file without explicit user confirmation or a clear indication that query results will be retained. In the context of a skill advertised primarily as search/query functionality, silent persistence is more dangerous because users may reasonably expect ephemeral processing rather than local storage of third-party comment data.
This code contains user-facing natural-language strings exclusively in Chinese, including status and error messages. Under the policy rule, forcing a specific language without user opt-in or a documented locale-specific justification is a natural-language policy violation.
Natural-language strings in the CLI, including flag descriptions and help text, are exclusively Chinese with no documented language selection or opt-in. That can violate language/locale policy when a skill mandates one language for all users.
Several user-visible error strings are hardcoded in Chinese, including the authentication failure message and request/parse failures, without offering any language or locale choice. Under the stated policy, forcing a specific language without user opt-in is a natural-language policy violation.
This JavaScript code constructs GET query parameters and POST JSON bodies and sends them over HTTPS via request, which can transmit user or system data to an external service. Within this file there is no confirmation prompt, user-facing notice, or comment/docstring warning users that request parameters, skill name, and payload data will be sent over the network.
This code emits user-visible warnings and status messages only in Chinese via string literals. Under the language/locale policy rule, forcing a specific language without user opt-in or documented regional justification is a natural-language policy violation.
This code file contains natural-language comments and multiple user-facing error/result strings entirely in Chinese, beginning with the function documentation and continuing throughout the module. Under the policy rule for language/locale, this is a potential violation because the skill does not offer a language choice or document that it is intentionally limited to a Chinese-only context.
The title and description fields use Chinese-language text exclusively, which can impose a specific language on users without any opt-in or documented locale restriction. Under the policy, language constraints should either offer a choice or be clearly justified as region-specific.
This JSON schema includes title and description text exclusively in Chinese, such as the top-level metadata and property descriptions. Because the file does not indicate that the skill is region-specific or that Chinese is an intentional locale choice, it may impose a language constraint without user opt-in.
This JSON schema contains user-facing title and description strings entirely in Chinese, but it does not document that the skill is China/Chinese-locale specific or offer a language choice. Under the policy, forcing a specific language without opt-in can be a natural-language policy violation.
The title and description are written only in Chinese, which imposes a specific language on users without any indication of opt-in or an explicit region-specific justification. Under the policy, language constraints should either provide user choice or be clearly documented as intentionally locale-bound.
No suspicious patterns detected.