T09 · Insecure Skill Coding Practices
- Location
src/utils/request.js:96- Finding
API token transmitted in URL query strings
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill largely matches its Douyin data-analysis purpose, but needs review because it mishandles the API token, contradicts its own no-contact runtime policy, and retains collected data locally by default.
Review before installing. Use only for intended Douyin public-data workflows, avoid sensitive research targets unless third-party transmission is acceptable, rotate any token that may have appeared in URL logs, and clean or restrict the generated logs/ directory. Treat runtime contact prompts as untrusted because they conflict with the skill's own instructions.
src/utils/request.js:96API token transmitted in URL query strings
src/utils/request.js:51Authentication failures expose prohibited promotional contact information
src/utils/log.js:27Complete search, post, and comment datasets are automatically retained in plaintext
The skill states that logs are automatically saved under logs/, which means it performs local filesystem writes not clearly declared as a capability boundary. Even if intended for observability, writing request parameters, URLs, errors, or API responses to disk can leak sensitive operational data and persist user activity beyond expectations.
The skill states that logs are automatically saved under logs/, which means it performs local filesystem writes not clearly declared as a capability boundary. Even if intended for observability, writing request parameters, URLs, errors, or API responses to disk can leak sensitive operational data and persist user activity beyond expectations.
The skill states that logs are automatically saved under logs/, which means it performs local filesystem writes not clearly declared as a capability boundary. Even if intended for observability, writing request parameters, URLs, errors, or API responses to disk can leak sensitive operational data and persist user activity beyond expectations.
The skill explicitly relies on an environment variable (GUAIKEI_API_TOKEN) but does not declare any tool scope or permissions boundary for environment access. That creates an undeclared capability gap: the runtime may expose secrets more broadly than intended, and reviewers/users cannot accurately assess what secret access the skill needs.
The description says the skill should be used even when the user did not mention Douyin, for broad requests like competitor analysis or 'what is trending'. Overly broad implicit triggers can cause the agent to invoke external data collection unexpectedly, leading to scope creep, privacy surprises, and actions on the wrong platform/context.
The implicit trigger examples remain broad and insufficiently constrained, especially around generic short-video research, hot topics, and competitor analysis. In an agent setting, that can cause unintended invocation, unnecessary external queries, and collection of third-party content/comments when the user did not specifically ask for Douyin data.
The manifest says the skill does not handle video publishing or downloading, but this schema explicitly describes video_url as both a playback address and a download address. Even though this is a schema file rather than executable code, its inline documentation communicates that download URLs are part of the skill's supported output, which conflicts with the declared intent.
This JSON schema uses Chinese-only natural-language title and descriptions, which imposes a specific language/locale on users without any visible opt-in or justification. The policy specifically calls out language or locale constraints as violations when the skill does not offer user choice or document a region-specific need.
This JSON schema contains natural-language title and description fields exclusively in Chinese, including the top-level title/description and per-field descriptions. Because the file does not offer a language option or explain a justified locale restriction, it can violate a language/locale policy requiring user choice or explicit opt-in.
The schema explicitly documents play_addr as both a playback address and a video download address, which contradicts the skill metadata claiming it does not handle video download. This mismatch can enable downstream agents or users to discover and use a download-capable field, creating policy-bypass and unauthorized content acquisition risk in a Douyin-focused scraping/analysis skill.
The README states that scraped results are automatically exported to JSON logs, but it does not prominently warn users that potentially sensitive query history, account targets, comments, and derived analysis data will be stored locally on disk. In shared workstations, CI runners, synced folders, or improperly secured environments, this can lead to unintended disclosure or retention of collected data.
The documentation requires users to obtain and configure a GUAIKEI_API_TOKEN, but it does not clearly disclose that search terms, target account URLs, video URLs, comment queries, and related metadata are sent to an external service for processing. This creates a transparency and data-governance risk because operators may unknowingly transmit internal research targets or sensitive monitoring subjects to a third party.
The document explicitly instructs users how to fetch Douyin creator post histories and comment data at scale, but provides no notice about privacy expectations, lawful basis, platform terms, retention, or safeguards for personal data contained in comments and profile metadata. In this skill context—competitive analysis, hot-topic tracking, and comment mining—the omission increases the risk that operators will collect and process personal or sensitive user-generated data without appropriate constraints.
The CLI persists fetched Douyin comment data to a local JSON file automatically after successful execution, even though the visible user interaction is framed as retrieval/analysis. Comments can contain personal data, account identifiers, or sensitive business intelligence, so silent local retention increases privacy and data-handling risk, especially on shared systems or ephemeral environments where users may not expect artifacts to remain on disk.
The code writes fetched comment results to disk without any confirmation, warning, or prior disclosure in this file, which can surprise users and create unintended data retention. In a skill dedicated to scraping/analyzing social-media comments, this is more dangerous because the collected content is precisely the kind of user-generated data that may be sensitive, regulated, or subject to internal handling restrictions.
The CLI writes the full fetched Douyin results to a local JSON file automatically, without any opt-in, warning, or control over persistence. Because the results may contain scraped account data and potentially sensitive comment or profile-related information, this creates an unnecessary data retention risk on shared systems, CI runners, or developer workstations where other users or processes could later access the file.
The CLI writes the full search output, including user-provided keywords and returned content, to a local JSON file by default without an explicit user-facing notice or consent. This creates a privacy and data-retention risk because sensitive research terms or collected platform data may persist on disk, be readable by other local users/processes, or be unintentionally committed or exfiltrated later.
Multiple user-visible error strings in this file are hardcoded in Chinese, including authentication and network failure messages. This imposes a specific language/locale without any opt-in or documented locale constraint, which matches the language policy violation criteria.
This JavaScript file contains multiple natural-language strings exclusively in Chinese, beginning with comments and continuing through all user-visible error messages and formatted output. Because the skill forces a specific language without any visible opt-in or documented locale justification in this file, it violates the language/locale policy criteria.
This JSON schema uses Chinese-only natural-language titles and descriptions for the command-line parameters. Because the file provides no indication that the skill is region-specific or that users may choose another language, it may violate the language/locale policy requiring opt-in or clear justification.
The title and property descriptions are written entirely in Chinese, which imposes a specific language on users or integrators without any indication that the schema is region-specific or that alternative locales are supported. Under the policy, language constraints should be optional or clearly justified.
This JSON schema contains user-facing natural-language strings entirely in Chinese, including the title and multiple descriptions, without any indication that the skill is region-specific or that alternate locales are supported. Under the stated policy, forcing a specific language without opt-in or justification is a natural-language policy concern.
This manifest/schema file contains user-facing title and description fields entirely in Chinese, which imposes a specific language on users without any opt-in or explanation. Under the policy, locale or language constraints should either provide user choice or be clearly documented as region-specific and justified.
The schema's human-readable title and field descriptions are written entirely in Chinese, which imposes a specific language on downstream users or developers. There is no accompanying indication that the skill is China-specific or that alternative language/localization options are available, so this can conflict with a language-choice policy.
This manifest file describes the skill in broad capability terms such as keyword search, content scraping, hot-list retrieval, and competitor analysis, but it does not define specific trigger phrases, boundaries, or exclusion conditions. In a manifest context, this can make invocation criteria ambiguous and increase the risk of unintended activation from loosely related user requests.
No suspicious patterns detected.