T09 · Insecure Skill Coding Practices
- Location
src/utils/request.js:41- Finding
API Token Exposed in HTTP Query Strings
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This Xiaohongshu analytics skill is mostly coherent, but it sends user inputs and an API token to a third-party service, handles that token insecurely, accepts bypassable URLs, and saves results locally.
Review this skill before installing. Only use it if you are comfortable sending Xiaohongshu search terms, note URLs, and your Guaikei API token to the Guaikei service, and with result files being saved locally. Avoid sensitive or private research topics, do not submit non-Xiaohongshu URLs, and rotate the API token if it has already been used with this version.
src/utils/request.js:41API Token Exposed in HTTP Query Strings
src/validate/url.js:6Bypassable Xiaohongshu URL Allowlist
The documentation describes a Xiaohongshu analysis skill, but it instructs users to obtain a third-party API token via WeChat and static analysis notes reference a non-Xiaohongshu external resource. This mismatch is dangerous because it obscures where data is actually sent and processed, preventing informed consent and making covert exfiltration or policy-violating collection harder to detect.
Referenced artifact was not completely inspected
command: "node src/xiaohongshu/detail-cli.js -u 'https://www.xiaohongshu.com/explore/xxx?xsec_token=yyy'"
Referenced artifact was not completely inspected
command: "node src/xiaohongshu/detail-cli.js -u 'https://www.xiaohongshu.com/explore/xxx?xsec_token=yyy'"
The skill requires an environment variable token (GUAIKEI_API_TOKEN) but does not declare any explicit tool scope or permissions boundary. This weakens reviewability and user awareness because the skill can access secrets at runtime without a clear manifest-level disclosure.
The activation guidance is broad enough to trigger on generic research requests, which can cause the skill to run in contexts where users did not specifically intend external platform analysis. That increases the risk of unnecessary transmission of user prompts, keywords, or URLs to third-party services.
The documentation advertises competitor monitoring and real-time hot-search retrieval beyond the clearly declared scope. Overstated capabilities are risky because users may provide broader inputs or expect actions the skill was not reviewed for, increasing the chance of improper data handling or unauthorized scraping behavior.
The skill requires an API token and likely sends search keywords and note URLs to an external service, but the documentation lacks a clear privacy and data-transmission warning. Users may unknowingly disclose sensitive research topics, URLs, or operational metadata to a third party without informed consent.
The warning and recovery messages are hard-coded in Chinese, which imposes a specific language on users. There is no indication that the skill is region-specific or that users can opt into their preferred language, so this conflicts with the language/locale policy criteria.
The hardcoded error string is entirely in Chinese and directs the user to contact a specific WeChat number, with no indication that language is selectable or region-specific. This can violate language/locale policy because it imposes a specific language on all users without opt-in or documented justification.
This JavaScript file contains natural-language comments and error messages exclusively in Chinese, such as the function comment and multiple validation errors. Because the skill does not indicate that it is intentionally limited to Chinese-speaking users or offer any language/locale opt-in, it creates a language-policy concern under the locale-choice rule.
The script reads GUAIKEI_API_TOKEN and sends the search keyword and options through search.createSearchTask(...) and search.getSearchTask(...), which are network operations transmitting user and system-associated data. Although the help mentions that the token must be configured, it does not warn users that their query data will be sent to an external service.
The CLI writes full search output, including the user’s keyword and returned content, to a local JSON file automatically without explicit notice or opt-in. This can create unintended data retention on disk, exposing potentially sensitive research terms or collected platform data to other local users, backups, or later exfiltration if the host is shared or compromised.
All user-facing natural-language instructions in the manifest and README content are presented in Chinese, and the file does not indicate that language selection is optional or user-configurable. This can constitute a language/locale policy issue when a skill implicitly forces one language for all users.
The skill is consistently documented as a Xiaohongshu/RedNote analytics tool, but L117 says '仅抓取抖音公开数据', which refers to a different platform. This is an active contradiction in the documentation about the target service and could mislead users about the skill’s actual intent.
This code sends a caller-supplied API token and note URL to a remote endpoint via postJson, but the function only has technical docstrings and retry error logs. There is no user-facing warning, confirmation, or explicit disclosure here that these inputs will be transmitted off-box.
The getDetailTask function performs a network request containing the API token and URL, which can expose user or system data to an external service. While retry errors are logged, the code does not include any warning or explanatory comment to disclose this data transmission behavior.
This JavaScript file uses Chinese-only natural-language documentation and error/logging strings, indicating the skill is tailored to a single language without offering any language choice or documenting a justified locale restriction. The policy explicitly calls for flagging language or locale constraints when they are forced without user opt-in.
The code emits fixed Chinese-language status and error messages in string literals, which imposes a specific language on users without offering a choice or documenting a justified locale restriction. This matches the policy category for language or locale constraints lacking user opt-in.
This code sends JSON data over HTTPS via postJson, but there is no confirmation prompt, user-facing log, or inline warning indicating that provided data will be transmitted to an external service. For a reusable request utility, this network transmission is safety-relevant and not disclosed here.
The thrown error string is hard-coded in Chinese ("重试${maxAttempts}次后失败"). This imposes a specific language in user-visible output without any indication of locale selection, opt-in, or region-specific justification, which matches the language policy violation criteria.
This code contains user-facing Chinese text in the module comment, banner output, and localized logging context, but provides no indication that the language choice is optional or tied to a justified region-specific requirement. The policy explicitly calls for flagging language or locale constraints when the skill forces a specific language without user opt-in.
The natural-language strings in comments and user-facing error messages are exclusively in Chinese, including input guidance and validation feedback. This creates a locale policy concern because the skill appears to require a specific language for understanding outputs without offering a language choice or documenting a justified region-specific constraint.
No suspicious patterns detected.