Back to skill

Security audit

Douyin Creator Marketplace (Xingtu) Marketing Metrics API

Security checks for vulnerabilities and agentic risk

Overview

This is a focused JustOneAPI wrapper, but its token handling can expose the user's API credential in process arguments and request URLs.

Review this skill before installing if your JustOneAPI token has broad permissions, paid quota, or access to sensitive creator data. Prefer a short-lived, scoped token, avoid running it in environments that log command lines or full URLs, and rotate the token if it may have appeared in process telemetry or proxy/API 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:24
Finding

API Token Exposed Through Process Arguments and URL Query Parameters

Content
View full analysis
"}' ``` `bin/run.mjs:24-31` defines the authentication token as a query parameter: ```js { "defaultValue": null, "description": "User authentication token.", "enumValues": [], "location": "query", "name": "token", "required": true, "schemaType": "string" } ``` `bin/run.mjs:204-216` places the command-line token 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; } ``` `bin/run.mjs:238-247` appends every query parameter, including `token`, 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); } } ``` `bin/run.mjs:89-92` then transmits the resulting URL: ```js let response; try { response = await fetch(url, requestInit); } catch (error) { ``` ### Technical Analysis The API token is exposed through two separate mechanisms: 1. **Process argument exposure:** Supplying the token through `--token` places it in the process argument vector. Depending on operating-system ...[truncated 2425 chars]
Remediation
View remediation
"}' ``` 5. If the upstream API only supports query-string authentication: - Request that the provider add header-based authentication. - Configure gateways, proxies, access logs, and observability platforms to redact the `token` parameter. - Never include complete request URLs in errors or diagnostic output. - Use narrowly scoped, short-lived, and readily revocable tokens. - Document the residual query-string credential exposure explicitly. 6. Rotate any token that may already have appeared in process telemetry, shell traces, CI logs, proxy logs, or server access logs. ]]>
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 (6)

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
92% confidence
Finding

The skill invokes a network-capable helper (node {baseDir}/bin/run.mjs) that can make authenticated API requests, but the manifest does not declare any explicit tool scope such as permissions or allowed-tools. This creates a trust and review gap: an agent runtime or reviewer may not realize the skill performs outbound network access with a secret-bearing token, increasing the chance of unintended or unauthorized external calls.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The skill sends the authentication token as a query parameter, which places the secret in the full request URL. URLs are commonly captured in logs, proxies, browser/history tooling, monitoring systems, crash reports, and error messages, so the token can be exposed even when HTTPS is used for transport.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The documentation instructs use of a user authentication token and creator identifier as query parameters without warning that these values will be transmitted and may be logged by clients, proxies, gateways, or analytics systems. In a marketing metrics skill, this increases the risk of credential leakage and unauthorized access to creator-related data if implementers or users handle the endpoint unsafely.

Content

No source excerpt is available for this finding.

Vague Triggers

Low
Category
Not specified by scanner
Confidence
79% confidence
Finding

This JSON file is a manifest-style interface definition, so SQP-1 applies. It describes the API operation and skill identity but does not define any explicit invocation phrases, activation constraints, or negative examples, leaving the trigger scope ambiguous if this metadata is used to determine when the skill should run.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
66% confidence
Finding

The natural-language metadata consistently targets Douyin/Xingtu, a China-specific platform context, but provides no statement that this locale/platform specificity is intentional, optional, or user-selected. This can create a locale policy concern if the skill is surfaced generally without clarifying that it is region/platform-specific.

Content

No source excerpt is available for this finding.

Vague Triggers

Low
Category
Not specified by scanner
Confidence
80% confidence
Finding

This markdown describes an operation but does not define any explicit invocation boundaries, trigger phrases, or exclusion conditions for when the skill should be used. In a skill catalog or agent setting, the broad labels "Marketing Metrics" and the general description could cause unintended invocation for loosely related marketing-analysis requests.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.