Back to skill

Security audit

Douyin Creator Marketplace (Xingtu) KOL Content Keyword Analysis API

Security checks for vulnerabilities and agentic risk

Overview

This skill is narrowly scoped to one JustOneAPI lookup, but it handles the API token in ways that can expose it through process arguments and URL logs.

Review this before installing if the JustOneAPI token is valuable or broadly scoped. Prefer a short-lived or restricted token, avoid shared systems where process arguments may be monitored, and rotate the token if command logs, process listings, proxy logs, or API gateway logs may have captured it.

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

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

Content
View full analysis
"}' ``` The operation manifest declares the token as a required query parameter: ```js { "defaultValue": null, "description": "User authentication token.", "enumValues": [], "location": "query", "name": "token", "required": true, "schemaType": "string" } ``` The token is injected into the request parameters, appended to the URL, and transmitted: ```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, }; 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, }); } ``` ```js function injectToken(operation, params, cliToken) { const tokenParam = operation.parameters.find((parameter) => parameter.name === "token"); if (!tokenParam || params.token !== undefined) { return; } if (!cliToken) { fail("--token is required for this operation.", { operationId: operation.operationId, }); } params.token = cliToken; } ``` ```js function applyQueryParams(operation, params, url) { f ...[truncated 3375 chars]
Remediation
View remediation
"}' ``` 5. If the upstream API exclusively supports query-string authentication: - Document the residual URL-logging risk. - Use short-lived, narrowly scoped tokens. - Ensure access logs, proxy logs, tracing systems, and error reports redact the `token` parameter. - Disable unnecessary URL capture in monitoring systems. - Rotate the token promptly after suspected exposure. - Avoid printing or returning the constructed URL in errors. 6. Add automated tests verifying that secrets do not appear in process arguments generated by documentation, request URLs where header authentication is supported, standard output, standard error, or application logs. ]]>
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 (3)

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
92% confidence
Finding

The skill instructs execution of a Node helper that performs authenticated network access, but it does not declare an explicit tool scope such as allowed network access or permissions. This weakens sandboxing and review guarantees because an agent runtime may permit broader tool use than intended, making it harder to enforce least privilege and to audit what external communication the skill is expected to perform.

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 required query parameter and injects it into the request URL, which causes the secret to be exposed in places URLs are commonly logged or retained, such as shell history, proxy logs, browser/debug tooling, and upstream server access logs. Even though the request is sent over HTTPS, putting bearer-style credentials in the query string increases the chance of accidental disclosure far beyond using an Authorization header.

Content

No source excerpt is available for this finding.

Vague Triggers

Low
Category
Not specified by scanner
Confidence
77% confidence
Finding

This JSON file is a manifest-like interface definition, but it only describes the API operation and purpose without any explicit activation constraints, trigger phrases, or exclusion conditions. That lack of specificity can make it unclear when this skill should be invoked versus other analytics or creator-research skills.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.