T09 · Insecure Skill Coding Practices
- Location
src/utils/request.js:103- Finding
API Token Transmitted in URL Query Strings
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill mostly does the advertised Douyin data lookup, but it needs Review because it handles an API token unsafely, stores full results locally by default, and exposes download-link fields despite saying downloads are unsupported.
Before installing, be comfortable sending your Douyin search terms, creator/video URLs, and GUAIKEI_API_TOKEN to guaikei.com. Treat the token as sensitive, avoid sensitive searches on shared or synced machines, clear the generated logs directory when finished, and verify that returned playback/download URL fields fit your legal and platform-use obligations.
src/utils/request.js:103API Token Transmitted in URL Query Strings
src/utils/log.js:25Automatic Plaintext Persistence of Complete API Results
声明描述的是一个面向抖音数据检索/抓取的技能,核心能力应涉及抖音内容访问或相关业务逻辑。但提供的代码片段只是底层通用工具库,用于解析命令行参数和生成帮助文档,没有任何抖音相关接口调用、数据抓取、搜索逻辑、评论获取、热搜获取或作品列表处理。因此,就该代码片段本身而言,其实际行为与声明用途明显不一致。虽然这段代码可能作为整个技能的辅助模块存在,但按当前要求仅比较所给描述与代码行为,应判定为不匹配。
The skill requires access to the sensitive environment variable GUAIKEI_API_TOKEN but does not declare any explicit tool scope such as permissions or allowed-tools. That makes the trust boundary unclear and can allow broader-than-necessary runtime access, increasing the chance of accidental secret exposure or unauthorized use by the skill implementation.
The activation text uses very broad colloquial phrases like '想搜、想扒、想翻、想追抖音上的东西' and '抖音上这事儿啥情况', which can over-trigger in ordinary conversation. In an agent setting, that can cause the skill to run unexpectedly, sending user queries to a third-party API and consuming a sensitive token even when the user did not clearly request external data access.
This JSON schema contains user-facing title and description text only in Chinese, which can amount to a language policy violation when no user opt-in or locale justification is provided. The file does not indicate that the skill is region-specific or that alternative languages are supported.
The schema explicitly documents video_url as including both playback and download addresses, which conflicts with the skill description stating it does not provide download capability. In a scraping-oriented Douyin skill, exposing download URLs can enable users or downstream components to retrieve and redistribute content anyway, undermining declared restrictions and potentially creating policy, copyright, or abuse risk.
This JSON schema uses Chinese titles and descriptions throughout, such as the top-level title/description and nearly every property description. Because the file does not indicate that Chinese is optional, user-selected, or justified by a region-specific scope, it appears to impose a specific language/locale in violation of the language-choice policy.
The schema explicitly documents play_addr as both a playback URL and a video download address, which conflicts with the skill's stated restriction that it does not provide download capability. In a scraping/search skill for Douyin content, exposing or normalizing a download field can enable downstream agents or users to retrieve media directly, undermining policy, compliance, or platform restrictions.
The README explicitly advertises automatic JSON log generation and positions the data for later analysis, but it does not clearly warn users that scraped public content may still contain personal or sensitive information that will be persisted locally. In a skill that collects videos, author metadata, and comments at scale, silent local retention increases the risk of unintended exposure, over-retention, or accidental sharing of collected data.
The README states that search, author-post, and comment data are automatically written into the logs directory with predictable filenames, but it does not clearly warn that potentially sensitive profile and comment data will remain on disk. Because this skill is designed for bulk collection and analysis, persistent local storage materially raises privacy and data-handling risk, especially on shared machines or synced workspaces.
The function sends a token and user-supplied video URL to an external API via requestApi, which is a privacy-relevant network operation. Although the JSDoc describes parameters and errors, it does not disclose to the user that these values are transmitted off-process or to a remote service.
This function performs a GET request containing the token and video URL in request parameters, which transmits potentially sensitive or user-related data. The file lacks any confirmation, user-facing log, or explicit warning that this remote lookup occurs.
The CLI persists fetched comment data to a local JSON file automatically after successful execution, without explicit user consent, opt-in, or masking of potentially sensitive content. In this skill's context, comment data can include usernames, text content, and other metadata, so silent local retention increases privacy, compliance, and accidental disclosure risks if the host environment is shared or logs/artifacts are later collected.
The CLI persists retrieved Douyin post data to a local JSON file automatically after successful execution, without any consent prompt, opt-in flag, or visible notice before writing. Because this skill is designed to collect social-media content at scale, silently storing results can create privacy, data-retention, and local exposure risks, especially on shared systems or when the output includes metadata users did not expect to persist.
Multiple descriptions and console messages are presented only in Chinese, and the script does not offer any language selection or fallback. That creates a natural-language policy issue when a skill enforces a locale or language without explicit user choice or documented justification.
The CLI writes full search results and request metadata, including the user’s keyword, to a local JSON log file without any explicit consent or clear warning at runtime. In this skill’s context, users may search for sensitive topics or individuals on Douyin, so persistent local storage creates a privacy and data-retention risk if logs are later accessed by other users, malware, or backup/sync systems.
This code emits user-facing status and error messages only in Chinese, such as the validation errors on L07 and L11. The file provides no indication that the skill is region-specific or that users can opt into a preferred language, which violates the natural-language locale policy criteria.
The success and failure messages on L36-L38 are presented only in Chinese, again enforcing a single language for user-visible interaction. Without explicit documentation that this skill is intended only for Chinese-speaking users, this is a policy-relevant language constraint.
The user-facing warning and status messages in this file are entirely in Chinese, including operational guidance shown when the token is invalid. Under the policy, forcing a specific language without user opt-in is a natural-language policy violation unless the locale restriction is explicitly documented and justified, which is not present here.
This file contains natural-language comments and error/output strings in Chinese, and there is no indication that the skill is region-specific or that users can opt into this language. Under the policy, forcing a specific language without user choice is a natural-language policy violation.
This manifest-style JSON file contains user-facing title and description fields exclusively in Chinese, including parameter descriptions. The policy requires flagging language or locale constraints when a specific language is forced without user opt-in or documented justification, and no such choice or justification appears here.
This JSON schema contains human-readable title and description fields exclusively in Chinese, which imposes a specific language on users or integrators without offering an alternative or documenting a locale-specific constraint. Under the policy rule, forced language/locale in natural-language content can be a violation when there is no opt-in or justification.
The title and description fields force a specific language/locale in natural-language metadata. Under the policy, locale-specific language should either be optional for users or clearly justified as region-specific; this file provides no such justification or alternative.
This manifest file contains all user-facing title and description text in Chinese, including the schema title and parameter descriptions. For a general-purpose skill artifact, this is a language/locale restriction without any visible opt-in, alternative locale, or documented region-specific justification.
The title and description are written only in Chinese, which imposes a specific language in the skill metadata without any indication of user opt-in or that the skill is intentionally limited to a Chinese-language or region-specific context. Under the stated policy, locale or language constraints should be explicitly justified or optional.
The setup instructions require storing a private token in the GUAIKEI_API_TOKEN environment variable, which is a credential-handling behavior relevant to user security. A brief warning about protecting the token appears much later in the FAQ, but the initial setup path does not disclose credential sensitivity where users are first told to configure it.
No suspicious patterns detected.