Back to skill

Security audit

Douyin Creator Marketplace (Xingtu) Item Report Trends API

Security checks for vulnerabilities and agentic risk

Overview

This skill is narrowly aimed at one JustOneAPI lookup, but it handles the user's API token in a way that can expose it through command-line arguments and URL query logs.

Review before installing. Use a narrowly scoped or disposable JustOneAPI token if possible, avoid shared machines where process arguments can be inspected, and assume the token may appear in JustOneAPI or proxy URL logs unless the upstream service confirms query logging is redacted. Rotate any token used with this helper if exposure is a concern.

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

API Token Exposed Through URL Query Parameters and Process Arguments

Content
View full analysis
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); } } function appendValue(searchParams, name, value) { if (Array.isArray(value)) { for (const item of value) { appendValue(searchParams, name, item); } return; } if (value && typeof value === "object") { searchParams.append(name, JSON.stringify(value)); return; } searchParams.append(name, String(value)); } ``` The resulting URL is transmitted to the declared API endpoint: ```js const baseUrl = manifest.baseUrl; const url = new URL(operation.path, ensureBaseUrl(baseUrl)); applyPathParams(operation, params, url); applyQueryParams(operation, params, url); const requestInit = { headers: { "accept": "application/json", ...[truncated 3194 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
93% confidence
Finding

The skill invokes a network-capable helper (node .../bin/run.mjs) and uses an API token, but the manifest does not declare any explicit tool scope such as permissions or allowed-tools. That mismatch weakens sandboxing and review controls because a host may permit broader tool usage than intended or fail to clearly signal that external network access occurs.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The skill defines the authentication token as a query parameter and injects it into the request URL, which means the secret may be exposed in logs, browser/history equivalents, proxies, monitoring systems, error traces, and upstream infrastructure that records URLs. Even though the request uses HTTPS, query strings are commonly retained and propagated more broadly than headers, making accidental credential disclosure more likely.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The documentation explicitly specifies a user authentication token in the query string, which is a real security issue because query parameters are commonly logged by servers, proxies, browser history, analytics systems, and monitoring tools. In the context of an API integration skill, this is more dangerous because downstream users may implement the API exactly as documented, causing credential leakage and possible account or API access compromise.

Content

No source excerpt is available for this finding.