Back to skill

Security audit

Douyin Creator Marketplace (Xingtu) KOL Content Keyword Analysis API

Security checks for vulnerabilities and agentic risk

Overview

The skill is narrowly aimed at one JustOneAPI endpoint, but it handles the required API token in ways that can expose it through process arguments and URL query strings.

Install only if you are comfortable giving this skill a JustOneAPI token for the declared Douyin Xingtu endpoint. Prefer a short-lived or low-scope token, rotate it if exposed, avoid shared machines where process arguments may be inspected, and be aware that URL query tokens may appear in service or proxy 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:75
Finding

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

Content
View full analysis
"}' ``` `SKILL.md:47`: ```markdown - Pass the token with `--token "$JUST_ONE_API_TOKEN"`; do not paste token values into chat messages, screenshots, or logs. ``` `bin/run.mjs:25-33`: ```js { "defaultValue": null, "description": "User authentication token.", "enumValues": [], "location": "query", "name": "token", "required": true, "schemaType": "string" } ``` `bin/run.mjs:75-87`: ```js const params = parseParams(args.paramsJson); applyDefaults(operation, params); injectToken(operation, params, args.token); validateRequired(operation, params); 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", }, method: operation.method, }; ``` `bin/run.mjs:148-166`: ```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; } ``` `bin/run.mjs:207-218`: ```js function ...[truncated 3262 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 (6)

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
94% confidence
Finding

The skill invokes a network-capable helper (node {baseDir}/bin/run.mjs) that sends requests to an external API, but the manifest does not declare any explicit tool scope such as permissions or allowed-tools. That mismatch weakens least-privilege controls and reviewability, making it easier for a skill to perform network access without clear authorization boundaries or policy enforcement.

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 then appends all query parameters directly into the request URL. Tokens in URLs are commonly exposed through logs, browser history, proxy/CDN access logs, monitoring systems, crash reports, and referrer leakage, making credential disclosure more likely than if the token were sent in an Authorization header. In this skill context, the risk is heightened because the code is explicitly designed to handle an auth token for a third-party API and provides no warning or alternative safer transport.

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 URL query string is risky because query parameters are commonly captured in logs, browser history, intermediary proxies, analytics systems, and error traces. Even when sent over HTTPS, the token may be exposed through operational telemetry or accidental sharing, which can enable unauthorized API access if the token is reused or long-lived.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The documentation requires a token query parameter but provides no warning that it is a sensitive credential. Putting authentication tokens in the URL is risky because query strings are commonly logged by servers, proxies, observability tools, browser history, and analytics systems, which can lead to credential leakage and unauthorized API access.

Content

No source excerpt is available for this finding.

Vague Triggers

Low
Category
Not specified by scanner
Confidence
83% confidence
Finding

This manifest-style JSON describes the skill's purpose but does not define any explicit activation phrases, scope limits, or exclusion conditions. For manifest files, that can create ambiguity about when the skill should be invoked versus when similar requests should not trigger it.

Content

No source excerpt is available for this finding.

Vague Triggers

Low
Category
Not specified by scanner
Confidence
85% confidence
Finding

This markdown file describes the operation and endpoint but provides no clear activation conditions, allowed trigger phrases, or exclusion criteria. Without specificity on when this skill should be invoked, the description is broad enough to risk unintended activation in related content-analysis contexts.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.