Back to skill

Security audit

Douyin Creator Marketplace (Xingtu) Audience Distribution API

Security checks for vulnerabilities and agentic risk

Overview

This is a focused JustOneAPI wrapper, but it handles the API token in ways that can expose it through command arguments and request URLs.

Review before installing if your JustOneAPI token has broad access, long lifetime, billing impact, or access to sensitive creator data. Prefer short-lived or scoped tokens where available, avoid running this in environments that log process arguments or full URLs, and rotate the token if it may have appeared in 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 Command-Line Arguments and URL Query Parameters

Content
View full analysis
"}' ``` The operation declares the token as a query parameter: ```javascript { "defaultValue": null, "description": "User authentication token.", "enumValues": [], "location": "query", "name": "token", "required": true, "schemaType": "string" } ``` The token is injected into the request parameters and all query parameters are appended to the URL: ```javascript const params = parseParams(args.paramsJson); applyDefaults(operation, params); injectToken(operation, params, args.token); validateRequired(operation, params); ``` ```javascript 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, including the token, is then submitted: ```javascript response = await fetch(url, requestInit); ``` ### Technical Analysis The API token is exposed through two credential-handling mechanisms: 1. Passing the token with `--token` can expose it in process listings, process inspection interfaces, command-execution telemetry, job-runner metadata, or other local monitoring systems. 2. Declaring the token as a query parameter causes it to appear in the complete request URL. Query strings are commonly retained by API gateways, reverse proxies, access logs, monitoring platforms, error reports, ...[truncated 2232 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 (5)

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
90% 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 explicitly declare tool permissions or allowed network scope. This creates a trust and policy gap: an agent runtime may permit broader network/tool use than intended, making it harder to constrain or review outbound access for this skill.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The skill defines the authentication token as a query parameter and automatically injects it into the request URL. Query-string tokens are commonly exposed via logs, proxies, browser/history tooling, monitoring systems, and error traces, making credential leakage more likely even when HTTPS is used. In this API-wrapper context, the risk is heightened because the token is a primary credential for a third-party service and the code provides no warning or safer alternative.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

Passing an authentication token in the query string is dangerous because query parameters are commonly logged by servers, proxies, client libraries, browser history, and monitoring systems. This increases the chance of credential leakage and unauthorized reuse of the token, especially since the manifest provides no warning or mitigation guidance to users or integrators.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The documentation instructs clients to send an authentication token as a query parameter, which is unsafe because query strings are commonly logged by browsers, reverse proxies, web servers, analytics tools, and monitoring systems. This can lead to credential disclosure through logs, referrer leakage, cached URLs, or copied links, especially in API integrations where tokens may grant access to creator audience data.

Content

No source excerpt is available for this finding.

Vague Triggers

Low
Category
Not specified by scanner
Confidence
80% confidence
Finding

This is a manifest-style JSON file, so vague-trigger checks apply. The description and display name describe the API capability but do not define specific trigger phrases, scope limits, or exclusion conditions, which can make invocation boundaries unclear in systems that infer activation from manifest text.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.