Back to skill

Security audit

Douyin Creator Marketplace (Xingtu) Video Details API

Security checks for vulnerabilities and agentic risk

Overview

This is a coherent fixed-endpoint API skill, but it handles the JustOneAPI token in ways that can expose it in process metadata and URL logs.

Review before installing if your JustOneAPI token has meaningful quota, billing, or data access. Prefer a version that reads the token from the environment and sends it in an Authorization header, or rotate and tightly scope the token if this query-token API is the only supported option.

Vulnerability Patterns
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • 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 (1)

T09 · Insecure Skill Coding Practices

Warning
Location
bin/run.mjs:29
Finding

API Token Exposure Through Process Arguments and URL Query Parameters

Content
View full analysis
"}' ``` The operation manifest designates the token as a query parameter: ```js { "defaultValue": null, "description": "User authentication token.", "enumValues": [], "location": "query", "name": "token", "required": true, "schemaType": "string" } ``` The token is injected into the parameter collection and all query parameters are appended to the request URL: ```js const params = parseParams(args.paramsJson); applyDefaults(operation, params); injectToken(operation, params, args.token); validateRequired(operation, params); const baseUrl = manifest.baseUrl; const url = new URL(operation.path, ensureBaseUrl(baseUrl)); applyPathParams(operation, params, url); applyQueryParams(operation, params, url); ``` The resulting URL, including the token, is sent to the remote service: ```js response = await fetch(url, requestInit); ``` Token injection and query-parameter handling are implemented as follows: ```js function injectToken(operation, params, cliToken) { const tokenParam = operation.parameters.find((parameter) => parameter.name === "token"); if (!tokenParam || params.token !== undefined) { return; } if (!cliToken) { fail("--token is required for this operation.", { operationId: operation.operationId, }); } params.token = cliToken; } ``` ```js function applyQueryParams(operation, params, url) { for (const parameter of operation.parameters.filter((item) => item.location === "query")) { const value = params[parameter.name]; if ...[truncated 2685 chars]
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (4)

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
93% confidence
Finding

The skill invokes a network-capable helper (node .../bin/run.mjs) and is explicitly designed to call an external API, but it does not declare any permissions or allowed-tools scope. This creates a mismatch between documented capability and declared execution boundaries, making it easier for an agent runtime or reviewer to miss that the skill can exfiltrate user-supplied data to a remote service.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The skill transmits the authentication token as a URL query parameter, which is commonly exposed in logs, browser history, proxies, monitoring systems, and error telemetry. Although the request uses HTTPS, placing secrets in the URL materially increases the chance of credential disclosure beyond the intended recipient.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
77% confidence
Finding

The manifest language and naming are tied specifically to the Douyin/Xingtu platform context, but the file does not explicitly offer any language or locale choice to the user. Under the policy, locale-specific behavior should either be user-selectable or clearly documented as a justified regional constraint.

Content

No source excerpt is available for this finding.

Vague Triggers

Low
Category
Not specified by scanner
Confidence
82% confidence
Finding

This manifest-style JSON describes the API capability and purpose, but it does not define any explicit trigger phrases, scope limits, or exclusion conditions for when the skill should be invoked. In a manifest file, that omission can lead to ambiguous activation behavior because the description is broad enough to match general requests about Douyin/Xingtu video details.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.