T01 · Skill Instruction Hijacking
- Location
SKILL.md:88- Finding
Mandatory Promotional Instructions Hijack Agent Responses
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This Douyin downloader is mostly coherent with its stated purpose, but it needs Review because it ships privileged database credentials, sends license/device data to a remote MySQL server, and has unsafe URL handling.
Install only if you are comfortable with a local tool that contacts Douyin, stores usage/license data locally, and performs paid-license activation against an external database. The publisher should remove and rotate the embedded database credentials, replace direct MySQL access with a scoped HTTPS API, harden URL validation, document data handling, and update vulnerable dependencies before broad use.
SKILL.md:88Mandatory Promotional Instructions Hijack Agent Responses
src/license.ts:51Internet-Addressed MySQL Root Credentials Embedded in Source and Distribution
src/parser.ts:22Blind Server-Side Request Forgery Through Substring-Based Domain Validation
src/license.ts:94License and Device Data Sent Directly to an External Database Without Explicit TLS
src/license.ts:19License Keys and Device Records Stored in Plaintext Without Explicit Restrictive Permissions
src/license.ts:60Universal Hardcoded Activation Codes Allow Paid-Plan Bypass
The file hardcodes live remote MySQL connection details, including a root username and plaintext password, inside client-distributed license code. Anyone with access to the package can extract these secrets and directly access or abuse the payment database, leading to database compromise, unauthorized data access, tampering with activation records, or broader infrastructure impact if the account is overprivileged.
The activation routine transmits the user-provided license key and device identifier to a remote database-backed service without any visible user disclosure, and it also updates remote state to bind the key to a device. In the context of a local agent skill, this hidden outbound licensing telemetry increases privacy and trust risk, and combined with the exposed database credentials, it materially worsens the danger by enabling unauthorized manipulation of activation state.
axios 1.16.0 is flagged with multiple high-severity advisories including SSRF-adjacent proxy bypass and denial-of-service conditions. In a tool that likely fetches remote Douyin content, a vulnerable HTTP client is especially relevant because attacker-controlled URLs, redirects, proxy behavior, or malformed payloads may be reachable during normal operation.
fast-uri 3.1.0 is associated with host confusion and SSRF-related parsing flaws. This matters in software that processes external URLs because incorrect canonicalization can let attackers bypass hostname validation, redirect protections, or internal-network restrictions.
form-data 4.0.5 has a CRLF injection issue in multipart field names/filenames, which can corrupt generated HTTP requests or enable header/request smuggling in downstream integrations. If this skill uploads or relays files or metadata derived from untrusted inputs, the affected package could turn user-controlled values into malformed outbound requests.
hono 4.12.16 is flagged with numerous advisories affecting routing, cookies, and denial of service. Because the MCP SDK includes Hono-based server functionality, these issues are materially relevant if the skill exposes HTTP/SSE endpoints or uses middleware paths influenced by remote clients.
ip-address 10.1.0 has advisories involving leading-zero parsing ambiguity and HTML-emitting methods. The host parsing issue can matter indirectly through rate limiting or network validation logic, though the XSS portion is less likely unless the library's HTML-rendering helpers are used in a UI context.
undici 7.25.0 has multiple high-severity advisories including response queue poisoning, information disclosure, and desynchronization issues. Since cheerio depends on undici and this skill likely performs remote fetches/scraping, a vulnerable HTTP stack substantially raises the risk of SSRF-like abuse, cross-request contamination, or service instability when processing attacker-controlled endpoints.
The manifest permits a known vulnerable axios release, and axios is typically used for outbound HTTP processing of attacker-influenced inputs such as URLs, headers, proxy settings, or parsed response bodies. In an MCP service that likely fetches remote Douyin-related content, known axios flaws could enable denial of service, proxy bypass, or unsafe handling paths depending on how requests are constructed.
This code embeds credentials for a remote MySQL payment database directly in the client-side license module, allowing anyone with source or package access to recover and misuse them. Because the credential is for the root account and the code performs remote activation lookups and updates, compromise could expose, alter, or destroy the payment/licensing backend and all activation data.
The entire skill description, commands, tool explanations, pricing, and user-facing quota message are written only in Chinese, with no indication that users may choose another language or that the skill is intentionally limited to a Chinese-speaking/regional audience. Under the stated policy, a skill that effectively forces a specific language without user opt-in is a natural-language policy violation.
The skill explicitly accepts user-supplied URLs and an optional device_id, and the documentation says it directly requests Douyin pages to extract content, but it does not clearly warn users that their input will be sent over the network to third-party services. This creates a transparency and privacy risk: users may unknowingly submit sensitive share links or persistent identifiers, and operators may process more data than users reasonably expect.
This .js file contains user-facing natural-language strings entirely in Chinese, including the banner, help text, prompts, and status/error messages. The policy requires flagging language or locale constraints when the skill forces a specific language without user opt-in, and this file provides no indication of alternative language support or a documented region-specific justification.
The shipped CLI exposes a reset command that invokes resetUsage() directly, while the help text labels it as debug-only. Any user can run this command locally to clear usage counters, which undermines quota enforcement and any licensing or billing controls that depend on those counters.
The file's comments, display name, description, and all user-facing upgrade/status messages are written only in Chinese. This creates a language/locale policy concern because the skill appears to enforce a single language without any opt-in, fallback, or explicit documentation that it is intentionally region-specific.
The tool schema describes device_id as optional and explicitly says it is used for usage tracking, but the file provides no confirmation prompt, privacy notice, or other user-facing disclosure about collecting or transmitting that identifier. This is a safety-relevant data handling behavior for a code file and should be surfaced clearly to users.
The code silently creates and writes a persistent state file in the user's home directory containing license and usage information without any visible disclosure or consent flow. While not code-execution dangerous, it creates an undisclosed local tracking artifact and may expose license data or usage history to other local users or processes if file permissions are not tightly controlled.
The code comment describes a 'simple device fingerprint' and constructs an identifier from hostname, platform, and architecture. In the absence of a manifest declaring host-identification or telemetry behavior, collecting host identity attributes is an additional capability beyond basic license key validation and usage counting.
This code sends the user-supplied URL to an external service via HTTP requests, which can disclose user-provided data and browsing targets. Although there are developer-facing console logs, there is no user-facing warning, confirmation, or inline documentation explaining that the input will be transmitted over the network.
The parser fetches metadata and fallback HTML from Douyin-controlled endpoints using the derived video ID, which is still based on user input and may reveal what content the user is analyzing. The file contains console logging for developers, but no user-facing notice or descriptive comment warning that the skill contacts remote services to retrieve video information.
The code intentionally transforms Douyin playback/download URLs to remove watermark indicators such as replacing '/playwm/' with '/play/' and changing watermark query values. This goes beyond ordinary metadata extraction and enables circumvention of platform-applied content markings, which can facilitate unauthorized redistribution and policy evasion.
The package description at L04 frames the skill as a Douyin video parsing/downloading service, which would plausibly require HTTP/network libraries. However, the additional MySQL dependency indicates database access capability that is not obviously required by that stated purpose and is not otherwise explained in the available manifest context.
The user-facing comments, banner, help text, and command feedback are written only in Chinese, which forces a specific language/locale on all users. The file does not provide any option to select another language or indicate that the tool is intentionally limited to a Chinese-speaking audience.
The CLI exposes a reset command that resets usage counters and is reachable by any user without authentication, confirmation, or environment gating, even though the help text says it is for debugging only. In a tool that enforces free-tier limits and paid plans, this directly undermines licensing and quota controls by allowing users to restore their allowance on demand.
This TypeScript config file contains natural-language strings exclusively in Chinese, including the display name, description, comments, and upgrade/status messages. Under the policy rules, forcing a specific language without user opt-in or a clearly documented regional justification is a natural-language policy violation.