Back to skill

Security audit

Douyin Creator Marketplace (Xingtu) KOL Comment Keyword Analysis API

Security checks for vulnerabilities and agentic risk

Overview

The skill is a focused JustOneAPI client, but it handles the API token through command-line arguments and URL query parameters, which can expose credentials through process lists or logs.

Review before installing. Use a narrowly scoped, revocable JustOneAPI token, avoid running this on shared systems where process arguments may be visible, and be aware that the token may appear in URL logs unless JustOneAPI or surrounding infrastructure redacts query parameters.

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

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

Content
View full analysis
"}' ``` `bin/run.mjs:62-79` reads the command-line token, inserts it into the request parameters, constructs the URL, and sends the request: ```js const args = parseArgs(process.argv.slice(2)); if (!args.operation) { fail("Missing required --operation argument."); } const operation = manifest.operations.find((item) => item.operationId === args.operation); if (!operation) { fail(`Unknown operation "${args.operation}".`, { availableOperations: manifest.operations.map((item) => item.operationId) }); } 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:134-152` accepts the credential through `--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; ...[truncated 3447 chars]
Remediation
View remediation
"}' ``` If the variable is already exported, it does not need to be repeated on the command line. 5. **Apply defense-in-depth redaction.** Ensure request URLs, headers, errors, tracing data, and telemetry redact authentication values. Never include credentials in error payloads. 6. **If the upstream API only supports query authentication, document the residual risk.** Disable full-URL logging where possible, configure proxies and observability systems to redact the `token` parameter, use short-lived and narrowly scoped tokens, and rotate any token suspected of appearing in logs or process-monitoring records. ]]>
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
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (5)

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
90% confidence
Finding

The skill invokes a network-capable helper (node .../bin/run.mjs) and is explicitly designed to call an external API, but it does not declare an explicit tool scope such as permissions or allowed-tools. This can lead to overbroad execution in hosting environments, making it harder to enforce least-privilege controls or prevent unintended outbound requests if the skill is reused or modified.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The skill defines the authentication token as a query parameter and later appends all query parameters directly into the request URL. Tokens in URLs are commonly exposed through logs, browser/history tooling, reverse proxies, monitoring systems, error messages, and referrer leakage, so this creates unnecessary credential disclosure risk even though the request is sent over HTTPS.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

The manifest and endpoint path indicate a hot-comment token or keyword analysis API, but the operation description states it returns 'core metrics, trend signals, and performance indicators' for broader analytics. This documentation overstates what the operation appears intended to do and creates an intent-code/documentation divergence within the skill definition.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

Passing an authentication token in the query string is risky because query parameters are commonly logged by clients, proxies, gateways, browser history, and observability systems. The lack of any user-facing warning or safer auth mechanism increases the chance of accidental credential disclosure and token reuse by unauthorized parties.

Content

No source excerpt is available for this finding.

Vague Triggers

Low
Category
Not specified by scanner
Confidence
77% confidence
Finding

This JSON manifest describes the skill's purpose in broad natural language but does not provide explicit trigger phrases, scope limits, or exclusion conditions. For manifest files, that can create ambiguity about when the skill should activate versus when similar everyday requests about comments, keywords, or analysis should not invoke it.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.