Back to skill

Security audit

Douyin Creator Marketplace (Xingtu) Creator Link Metrics API

Security checks for vulnerabilities and agentic risk

Overview

The skill is narrowly scoped to one JustOneAPI lookup, but its required API token can be exposed through command-line arguments and URL query logs.

Review before installing if you use sensitive or high-value JustOneAPI credentials. Prefer a narrowly scoped, short-lived token if available, avoid shared machines or verbose process telemetry when invoking the skill, and rotate the token if it may have appeared in process listings, shell logs, proxy logs, or API request 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:103
Finding

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

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 parameters whose declared location is `query`, including `token`, are appended to the request URL: ```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 is sent to the remote API: ```javascript const url = new URL(operation.path, ensureBaseUrl(baseUrl)); applyPathParams(operation, params, url); applyQueryParams(operation, params, url); const requestInit = { headers: { "accept": "application/json", }, method: operation.method, }; let response; try { response = await fetch(url, requestInit); } catch (error) { fail("Network request failed.", { cause: error instanceof Error ? error.message : String(error), operationId: operation.operationId, }); } ``` The doc ...[truncated 2481 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
95% confidence
Finding

The skill invokes a network-capable helper (node {baseDir}/bin/run.mjs) and requires an API token, but it does not declare any explicit tool scope such as allowed tools or permissions. That omission weakens policy enforcement and reviewability, because an agent may execute network actions without a machine-readable restriction boundary, increasing the risk of unintended outbound requests or misuse of secrets.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The skill requires the authentication token to be sent as a URL query parameter (token), which is then embedded in the request URL. Query-string secrets are commonly exposed through logs, browser/history tooling, proxy/CDN access logs, monitoring systems, and error telemetry, making credential disclosure more likely even when HTTPS is used.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

Passing an authentication token in the query string is risky because URLs may be logged by clients, proxies, servers, observability systems, and browser history, causing credential exposure outside the intended trust boundary. Even over HTTPS, query parameters commonly persist in logs and analytics, making this a real credential-handling weakness for an API skill.

Content

No source excerpt is available for this finding.

Vague Triggers

Low
Category
Not specified by scanner
Confidence
78% confidence
Finding

This JSON file is a manifest-like interface definition, so vague-trigger review applies. The description fields explain what the skill does but do not define any explicit trigger phrases, scope limits, or exclusion conditions, which can make activation criteria ambiguous if these descriptions are used for routing or invocation.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
87% confidence
Finding

This markdown file describes a token query parameter used for user authentication, which is sensitive data, but it provides no warning about protecting the token, avoiding accidental exposure, or the implications of transmitting credentials. Under the markdown-specific warning criteria, omitting any disclosure around credential handling is a user-safety gap.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.