Back to skill

Security audit

guaikei-douyin-discover-extract-serve-trending

Security checks for vulnerabilities and agentic risk

Overview

The skill mostly matches its Douyin research purpose, but it has review-worthy issues around overbroad activation, credential handling, automatic data retention, and runtime promotional contact output that contradicts its own documentation.

Install only if you are comfortable sending Douyin search terms, profile/video URLs, and your GUAIKEI_API_TOKEN to www.guaikei.com. Review or patch the runtime auth-error messages before use, treat generated logs as retained scraped data that may contain personal information, and avoid using this skill for ambiguous non-Douyin requests or any video-download workflow.

Vulnerability Patterns
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (2)

T01 · Skill Instruction Hijacking

Error
Location
src/utils/request.js:51
Finding

Authentication Failures Inject Promotional Contact Information into Agent-Visible Output

Content
View full analysis
process.exit(exitCode), ); return; } ``` ### Technical Analysis The Skill documentation states that authentication failures must produce a neutral error and must not display contact information or promotional content at runtime. The implementation violates this policy by embedding a WeChat contact number in the `AuthError` generated for HTTP 401 and 403 responses. The CLI then propagates `error.message` through two Agent-visible channels: 1. The message is written to stderr through `utils.printError`. 2. The same message is placed in the structured JSON response written to stdout. Because the authentication status is controlled by the external API service, the remote service can reliably trigger this promotional message by retur ...[truncated 1528 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
src/api/search.js:58
Finding

API Token Is Exposed in URL Query Strings

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (51)

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

声明描述的是面向抖音内容搜索与数据抓取分析的终端用户技能,但提供的代码片段只是底层通用参数解析模块(args parser)。该代码不体现任何与抖音平台交互、搜索短视频、抓取博主作品、拉取评论、查看热榜等核心能力相关的实现,也没有网络请求、API 调用、页面抓取或数据处理逻辑。因此,代码实际行为与声明用途存在明显不匹配。虽然这段代码可能作为更大系统中的辅助组件存在,但就该代码片段本身而言,其功能与声明的主要目的 materially different。

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

声明描述的是面向抖音数据检索/分析的技能能力,而给出的代码片段没有体现任何抖音相关访问、搜索、抓取、评论获取或热榜查询逻辑。它的实际作用是向本地文件系统写日志文件,属于完全不同的功能领域。虽然日志记录可能是辅助实现细节,但当前提供的代码片段本身只展示了日志写入这一未声明能力,且无法支持所宣称的核心用途,因此描述与代码行为不一致。

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The declared description says the skill is for Douyin content discovery and analysis. However, the supplied code chunk does not implement any of those capabilities. It merely uses fs/path to locate and read package.json and expose the package name. This is a materially different behavior from the declared user-facing purpose. While this may be a supporting utility, based on the supplied chunk alone the actual behavior shown is unrelated to the declared Douyin functionality, so it should be flagged as a mismatch.

Content

No source excerpt is available for this finding.

Vague Triggers

High
Category
Not specified by scanner
Confidence
96% confidence
Finding

The trigger language is overly broad, including generic phrases like '查一下' and '帮我看看' without requiring clear Douyin context. This can cause the skill to activate on unrelated user requests, leading to unintended access to external data sources, unnecessary token use, and surprising behavior that bypasses user intent boundaries.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
84% confidence
Finding

The skill explicitly depends on an environment variable (GUAIKEI_API_TOKEN) but does not declare any tool scope, permissions, or allowed-tools boundary for env access. This creates an authorization and transparency gap: an orchestrator or reviewer cannot easily determine that the skill needs secret material, increasing the risk of unintended secret exposure or overbroad execution privileges.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The generalized activation rule says the skill should trigger even when users do not mention 'Douyin', as long as they discuss short-video research or related analysis. In a multi-skill environment, this increases the chance of incorrect routing and covert expansion of scope, causing data collection actions the user did not specifically request.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The phrase "纯中文界面" indicates a fixed language constraint. The file does not offer a language choice, opt-in, or a documented reason that this skill must operate only in Chinese.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The title and field descriptions are entirely in Chinese, which imposes a specific language on users or downstream developers without any opt-in or justification in the file. Under the policy, language constraints should either be optional or clearly documented as region-specific.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The manifest explicitly says the skill does not handle video downloading, but the response schema defines video_url as containing both playback and download addresses. That indicates the skill exposes download-capable data as part of its intended API surface, which exceeds the stated description.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

This JSON schema uses Chinese-only natural-language titles and descriptions throughout, such as the title at L004 and repeated Chinese descriptions for fields. Under the policy, forcing a specific language without user opt-in or a documented regional justification is a natural-language locale violation.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The schema explicitly documents play_addr as both a playback URL and a video download address, which conflicts with the skill’s stated scope of not handling downloads. That mismatch can enable downstream agents or users to retrieve downloadable media anyway, creating policy bypass and potential copyright/compliance exposure.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The README explicitly promotes automatic export of scraped Douyin video, author, and comment data to JSON logs, but it does not place a clear privacy/data-minimization warning next to that feature. Because comment and account data can contain personal information or sensitive user-generated content, automatic local retention increases the risk of unnecessary collection, over-retention, and accidental disclosure.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

This is a markdown file, so SQP-2 applies to omitted user warnings about behaviors affecting privacy or user data. The document describes searching content, fetching creator posts, and retrieving comment data, but provides no disclosure about privacy implications, data handling, or responsible use of collected platform data.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

Retrieved comment data is silently recorded to local storage in addition to being printed, which broadens the data handling surface beyond the stated inspection use case. Even if comments are public, bulk local retention can create privacy, compliance, and data-leak risks, especially on shared systems or in automated environments.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The CLI writes the full fetched comment dataset to a local JSON file after completing the query, creating persistent storage of potentially sensitive or regulated user-generated content without explicit user consent. This exceeds a transient query/display behavior and increases exposure through leftover files, accidental sharing, or collection by other local processes.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The tool writes comment results to disk without explicit warning or confirmation, so users may unknowingly leave behind a local archive of scraped content. This is dangerous because it undermines user expectations, can violate least surprise, and may expose stored data to later misuse or unintended disclosure.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
86% confidence
Finding

This JavaScript code reads a sensitive environment variable via process.env.GUAIKEI_API_TOKEN and then calls createPostTask/getPostTask with the token and user-provided inputs, which implies outbound network transmission. Although there are status messages about task progress, there is no clear disclosure that the skill uses credentials and sends the provided Douyin URL data to an external service.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The CLI writes the full fetched post results to a local JSON file after completing the request, even though the tool is presented as an on-demand lookup/extraction utility. Persisting scraped content and request metadata to disk creates unnecessary data retention risk, especially on shared systems or when handling research targets whose activity, comments, or profile URLs may be sensitive in context.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The calls to search.createSearchTask and search.getSearchTask are network/API operations that transmit the user's keyword and related parameters. While a search tool may reasonably be expected to query a service, this file does not provide any explicit user-facing notice in help text or runtime messaging that the input will be sent to an external API.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The CLI writes full search results to a local JSON file without explicit user notice or consent. Search results may contain sensitive or regulated content metadata, and silent persistence increases the chance of unintended disclosure through shared machines, backups, or later access by other processes/users.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

This code emits user-facing error text in Chinese (日志文件名必须是非空字符串, 日志内容必须是非空字符串) and later also prints Chinese success/error messages. For a general utility file, forcing a specific language in output without offering a language choice or documenting a region-specific scope is a natural-language locale policy violation.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The success and failure messages shown to users are hardcoded in Chinese (已保存到, 日志写入失败). Because the file provides no opt-in, configuration, or justification for a Chinese-only locale, this violates the language/locale policy for natural-language content.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

This code returns user-facing natural-language messages such as "请求失败" in Chinese, and similar Chinese-only strings appear throughout the file. Because the file forces a specific language without any opt-in or documented locale constraint, it violates the language/locale policy for natural-language content.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The AuthError message is presented only in Chinese and includes operational guidance, making it clearly user-facing natural-language content. Since no language choice or justified locale restriction is present, this is a language/locale policy violation.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The user-facing strings at L25-L30 force Chinese output ('警告', '快速获取通道', '已使用配置的私有TOKEN') without offering any language selection or documenting that this skill is intended only for Chinese-speaking users. This is a natural-language policy concern because the file imposes a specific language on all users by default.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.