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 client, but it handles the user's API token in exposure-prone ways that deserve review before installation.

Install only if you are comfortable sending a JustOneAPI token to api.justoneapi.com for this endpoint. Use a narrowly scoped, revocable token, avoid shared machines where process arguments may be visible, and treat returned creator marketing and rate-card data as business-sensitive.

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

API Credential Exposed Through Process Arguments and URL Query Parameters

Content
View full analysis
"}' ``` The helper injects that credential into the parameter object: ```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 declared with a query location—including `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 endpoint: ```js const baseUrl = manifest.baseUrl; const url = new URL(operation.path, ensureBaseUrl(baseUrl)); applyPathParams(operation, params, url); applyQueryParams(operation, params, url); ...[truncated 2921 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
89% confidence
Finding

The skill invokes a network-capable helper (node {baseDir}/bin/run.mjs calling a remote API) but does not declare an explicit tool/permission scope such as allowed network access. This creates a governance gap: an agent runtime may permit broader-than-intended outbound requests or make it harder to enforce least-privilege controls and review what external access the skill requires.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The operation requires a user authentication token as a query parameter for an external API, but the manifest provides no user-facing warning that credentials will be transmitted to a third party. This creates a real risk of sensitive credential disclosure, especially because query parameters are commonly logged, cached, or exposed in intermediary systems, making the skill context more dangerous than a typical non-sensitive API call.

Content

No source excerpt is available for this finding.

Vague Triggers

Low
Category
Not specified by scanner
Confidence
80% confidence
Finding

This manifest-style JSON describes what the skill does, but it provides no explicit activation scope, trigger phrases, or exclusion conditions. In systems that rely on manifest text for routing, the broad descriptive wording could contribute to unintended invocation because it does not clarify when the skill should or should not be used.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
89% confidence
Finding

The documentation omits an explicit warning that the endpoint requires a user authentication token and returns potentially sensitive creator marketing metrics. This can mislead downstream users or agents into treating the operation as low-risk, increasing the chance of inappropriate token handling, overbroad use, or access to business-sensitive data without adequate notice or safeguards.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.