Back to skill

Security audit

Douyin Creator Marketplace (Xingtu) Creator Link Structure API

Security checks for vulnerabilities and agentic risk

Overview

This is a coherent JustOneAPI API wrapper, but it needs review because the user's API token is passed through command-line arguments and placed in the request URL query string.

Install only if you trust JustOneAPI and are comfortable with this skill using your API token for the documented Douyin Creator Marketplace endpoint. Prefer a short-lived or limited-scope token if available, avoid sharing command logs or process listings, and rotate the token if it may have been exposed.

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

API Token Exposed Through Command-Line Arguments and URL Query Parameters

Content
View full analysis
"}' ``` The manifest declares the token as a query parameter: ```js { "defaultValue": null, "description": "User authentication token.", "enumValues": [], "location": "query", "name": "token", "required": true, "schemaType": "string" }, ``` The command-line parser reads the token from `--token`: ```js function parseArgs(argv) { const parsed = { operation: null, paramsJson: "{}", token: null }; for (let index = 0; index < argv.length; index += 1) { const flag = argv[index]; const value = argv[index + 1]; if (flag === "--operation") { parsed.operation = value; index += 1; continue; } if (flag === "--params-json") { parsed.paramsJson = value; index += 1; continue; } if (flag === "--token") { parsed.token = value; index += 1; continue; } fail(`Unknown argument "${flag}".`); } return parsed; } ``` The 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 (!c ...[truncated 3341 chars]
Remediation
View remediation
` header or the provider's documented authentication header. - Remove `token` from the operation's query-parameter list so generic query construction cannot append it to the URL. 3. **If the upstream API mandates query authentication:** - Continue reading the secret only from the environment or a protected secret manager. - Construct the authenticated URL immediately before transmission and do not print, persist, or include it in error payloads. - Configure API gateways, reverse proxies, access logs, and observability tooling to redact the `token` parameter. - Avoid exposing complete request URLs in tracing spans and network error reports. - Document the residual URL-logging risk clearly. 4. **Limit credential impact.** - Use short-lived and narrowly scoped tokens where the service supports them. - Apply usage limits and anomaly detection. - Establish token rotation and immediate revocation procedures. 5. **Update all documentation and generated specifications.** - Replace the documented `--token "$JUST_ONE_API_TOKEN"` invocation with environment-only authentication. - Ensure `SKILL.md`, `generated/operations.json`, and `generated/operations.md` accurately reflect the hardened authentication mechanism. ]]>
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
87% confidence
Finding

The skill invokes a network-capable helper (node .../run.mjs) and requires an API token, but it does not declare any explicit tool scope such as permissions or allowed-tools. This creates a policy gap where an agent may be allowed to make external authenticated requests without a clearly declared or reviewable boundary, increasing the risk of unintended data exfiltration or misuse of the provided credential.

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 into the full request URL. URLs are commonly captured in logs, proxies, browser/history tooling, monitoring systems, crash reports, and upstream infrastructure, so this increases the chance of credential disclosure even when HTTPS is used. In this skill context, the risk is real because the token is the primary credential for accessing creator marketplace data and there is no warning to users that it will be propagated in the URL.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The operation requires a user authentication token as a query parameter, and the skill metadata provides no visible warning, handling guidance, or minimization controls around this sensitive credential. Query parameters are commonly exposed in logs, traces, browser history, intermediary systems, and analytics tooling, increasing the risk of credential leakage and unauthorized API access.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

This markdown file documents a token query parameter used for user authentication, which is a sensitive credential. The description does not include any warning about secure handling, logging avoidance, or exposure risks, even though markdown files should disclose behaviors that could affect privacy or system integrity.

Content

No source excerpt is available for this finding.

Vague Triggers

Low
Category
Not specified by scanner
Confidence
78% confidence
Finding

This manifest-style JSON describes what the skill does, but it does not provide any explicit trigger phrases, activation boundaries, or exclusion conditions. For manifest files, that can make invocation scope ambiguous because nothing indicates when this skill should or should not be selected relative to similar API skills.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.