Back to skill

Security audit

Douyin Creator Marketplace (Xingtu) Showcase Items API

Security checks for vulnerabilities and agentic risk

Overview

This skill is a narrow JustOneAPI data lookup, but it handles the API token in ways that can expose it through command arguments and URL query logs.

Install only if you trust JustOneAPI with the token and understand that this skill may expose the token in process metadata and URL/query logs. Prefer a short-lived, revocable, least-privilege token, avoid shell tracing or command logging, and rotate the token after use if the environment records process arguments or outbound URLs.

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:237
Finding

API Token Exposed Through Process Arguments and URL Query Parameters

Content
View full analysis
"}' ``` The operation manifest defines the token as a required query parameter: ```js { "defaultValue": null, "description": "User authentication token.", "enumValues": [], "location": "query", "name": "token", "required": true, "schemaType": "string" } ``` The runner injects the command-line value into the request parameters: ```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; } ``` All parameters marked as query parameters, including the token, are appended to the URL: ```js function applyQueryParams(operation, params, url) { for (const parameter of operation.parameters.filter((item) => item.location === "query")) { const value = params[parameter.name]; if (value === undefined) { continue; } appendValue(url.searchParams, parameter.name, value); } } ``` The resulting URL is then transmitted to the fixed JustOneAPI HTTPS endpoint: ```js const baseUrl = manifest.baseUrl; const url = new URL(operation.path, ensureBaseUrl(baseUrl)); applyPathParams(operation, params, url); applyQueryParams(operation, params, url); const requestInit = { headers: { "accept": "application/json", }, method: operation.method ...[truncated 3103 chars]
Remediation
View remediation
"}' ``` 6. Add automated tests confirming that errors, diagnostics, and standard output never contain the token. ]]>
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 (3)

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
88% confidence
Finding

The skill invokes a network-capable helper (node {baseDir}/bin/run.mjs) and is designed to call an external API, but it does not declare an explicit tool scope such as permissions or allowed-tools. This weakens policy enforcement and reviewability because the runtime may permit broader tool/network access than the skill actually needs, increasing the chance of unintended outbound requests or misuse if the skill is modified or composed with other behaviors.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The manifest describes an external API call that requires a token, but it does not warn users that their authentication token will be transmitted to api.justoneapi.com. This lack of disclosure undermines informed consent and increases the chance of credential exposure to a third party, particularly in a skill whose primary function is data retrieval rather than obvious account authentication.

Content

No source excerpt is available for this finding.

Vague Triggers

Low
Category
Not specified by scanner
Confidence
91% confidence
Finding

The manifest requires a user authentication token as a query parameter but provides no trigger-scope limitation, provenance guidance, or constraints on when the token may be requested or sent. This creates a real risk that the skill will collect and transmit sensitive credentials to an external service more broadly than users expect, especially because query parameters are commonly exposed in logs, telemetry, and intermediary systems.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.