Back to skill

Security audit

Toutiao Search API

Security checks for vulnerabilities and agentic risk

Overview

This is a narrow Toutiao search helper that calls JustOneAPI with a token and keyword; its main risk is API-token exposure through command-line and URL-query handling, not hidden or destructive behavior.

Install only if you are comfortable sending Toutiao search keywords and a JustOneAPI token to api.justoneapi.com. Treat the token as a secret, avoid sensitive or regulated keywords unless authorized, and be aware that command lines and full request URLs may be logged by local tooling or infrastructure; use a scoped or disposable token where possible.

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

API Token Exposed Through Process Arguments and URL Query Parameters

Content
View full analysis
"}' ``` The helper parses the token directly from the process argument list: ```js if (flag === "--token") { parsed.token = value; index += 1; continue; } ``` It then copies the token into the request parameters: ```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; } ``` All query parameters, including `token`, are appended to the 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); } } ``` The resulting URL is submitted to the remote API: ```js let response; try { response = await fetch(url, requestInit); } catch (error) { ``` ### Technical Analysis The JustOneAPI credential is exposed through two channels: 1. Supplying it through `--token` places the secret in the process argument vector. Depending on operating-system permissions and deployment configuration, process inspection, shell tracing, job telemetry, crash diagnostics, or command auditing may record or expose that value. 2. T ...[truncated 1919 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
86% confidence
Finding

The skill invokes a Node helper that performs outbound API requests using a bearer token, but the manifest does not declare an explicit tool scope such as allowed network access. That mismatch weakens policy enforcement and reviewability: a host may permit broader execution than intended, and users or automated scanners cannot clearly verify what external communication the skill is authorized to perform.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The API authentication token is defined and transmitted as a query parameter, which can be exposed in logs, browser/history equivalents, proxy caches, monitoring systems, and upstream infrastructure that records full URLs. In this skill, the token is automatically appended to the outbound request URL with no warning or mitigation, so credential leakage is a realistic risk even though the destination is fixed.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The skill sends user-supplied search keywords and an authentication token to a third-party external service, but the manifest provides no user-facing notice about outbound data transmission, credential sensitivity, or safe handling expectations. In this context, the keyword may contain sensitive user data and the token is a secret, so lack of transparency and handling guidance increases the risk of inadvertent privacy leakage or unsafe integration practices.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
84% confidence
Finding

The script sends the provided keyword and token to an external API via fetch, which transmits potentially sensitive user data off-system. There is error handling, but no confirmation prompt, visible notice, or inline warning explaining that user inputs are being sent to api.justoneapi.com.

Content

No source excerpt is available for this finding.

Vague Triggers

Low
Category
Not specified by scanner
Confidence
89% confidence
Finding

This is a manifest-style JSON file, so vague-trigger checks apply. The top-level and operation descriptions explain what the skill does but provide no explicit trigger phrases, activation boundaries, or exclusion conditions, which can make invocation overly broad in an agent-routing context.

Content

No source excerpt is available for this finding.

Static analysis

Detected: suspicious.secret_argv_exposure

Instructions pass high-value credentials through process argv.

Critical
Code
suspicious.secret_argv_exposure
Location
SKILL.md:48