Back to skill

Security audit

Douyin Creator Marketplace (Xingtu) Audience Touchpoint Distribution API

Security checks for vulnerabilities and agentic risk

Overview

The skill appears to call only the stated JustOneAPI endpoint, but it handles the API token in ways that can expose it in command-line process listings and URL logs.

Install only if you are comfortable giving this skill a JustOneAPI token for the Douyin/Xingtu endpoint. Prefer a narrowly scoped, revocable token, avoid logging command lines or full request URLs, and rotate the token if it may have appeared in process-monitoring or URL logs.

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

API Token Exposure Through Process Arguments and URL Query Parameters

Content
View full analysis
"}' ``` The operation manifest defines the authentication token as a query parameter: ```js { "defaultValue": null, "description": "User authentication token.", "enumValues": [], "location": "query", "name": "token", "required": true, "schemaType": "string" } ``` The command-line token is copied 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 query parameters, including `token`, are appended to the request 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 sent to the external API: ```js applyQueryParams(operation, params, url); const requestInit = { headers: { "accept": "application/json", }, method: operation.method, }; response = await fetch(url, requestInit); ``` ### Te ...[truncated 2393 chars]
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (3)

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
92% confidence
Finding

The skill invokes a network-capable helper (node .../bin/run.mjs) and requires an API token, but it does not declare an explicit tool scope such as permissions or allowed-tools. This creates an authorization gap where an agent runtime may permit broader external access than intended, reducing policy enforcement and auditability around outbound requests.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
77% confidence
Finding

The description and display name are explicitly tied to Douyin Creator Marketplace (Xingtu), a China-specific platform context, but the manifest does not clarify that this skill is region-specific or intended only for that locale. Under the policy rule for language/locale constraints, hard-coded locale targeting should be documented or offered as an explicit choice when applicable.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
90% confidence
Finding

The documentation instructs callers to supply a user authentication token in a query parameter but provides no warning about secure handling. Query parameters are commonly exposed in logs, browser history, monitoring tools, and intermediary infrastructure, which can lead to credential leakage if implementers follow the spec naively.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.