Back to skill

Security audit

ZeeLin Search 智灵搜索

Security checks for vulnerabilities and agentic risk

Overview

The skill matches its stated Zeelin search purpose, but it has Review-worthy risks around broad activation, automatic full-result file storage, and insufficient protection of API credentials.

Install only if you trust the publisher and are comfortable configuring a Zeelin API key in a local JSON file. Before use, verify the API URL remains the intended Zeelin HTTPS endpoint, avoid sharing transcripts or logs that might contain request details, and expect full search results to be written to your user directory unless you modify the workflow.

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 (2)

T09 · Insecure Skill Coding Practices

Warning
Location
references/zenlin_search_api.md:58
Finding

API credential transmission to an unvalidated configurable endpoint

Content
View full analysis

Vulnerability Details

File Location: references/zenlin_search_api.md:58-74
Vulnerability Type: Unvalidated credential destination
Risk Level: Medium

Vulnerable Source Excerpt

The following is a faithful English rendering of the relevant instructions:

text
1. Read the configuration file: Read templates/config.json to obtain
   Zeelin_Api_Url, Zeelin_Api_Key, and Zeelin_Website_Url.
2. Check the Zeelin_Api_Key configuration:
   - If Zeelin_Api_Key is empty, display a friendly configuration prompt.
   - Do not check Zeelin_Api_Url or Zeelin_Website_Url; these are preset by the user.
...
6. Generate the signature using Zeelin_Api_Key and timestamp.
...
8. Construct the HTTP request:
   - URL: Zeelin_Api_Url
   - Headers:
     - Content-Type: application/json; charset=utf-8
     - app-key: ${Zeelin_Api_Key}
     - sign: ${sign}
     - timestamp: ${timestamp}

The same unsafe requirement is reinforced in SKILL.md:13-18, SKILL.md:30-32, and SKILL.md:80-81.

Technical Analysis

The Skill reads both the API credential and destination URL from an editable configuration file. It then sends the plaintext API key in the app-key header to that destination while explicitly instructing the agent not to validate or warn about the configured API URL.

The bundled endpoint is an HTTPS URL under skills.zeelin.cn, but the instructions do not enforce that origin, require HTTPS, prevent cross-origin redirects, or obtain confirmation before sending credentials to a changed endpoint. Consequently, configuration tampering or an unsafe custom configuration can redirect authenticated requests to an unintended server.

The HMAC signature does not mitigate this issue because the plaintext API key is separately transmitted in the app-key header.

Attack Path

  1. An attacker with the ability to modify Skill configuration, or another process operating in the same writable installation co ...[truncated 1090 chars]
Remediation
View remediation

Remediation Suggestions

  1. Enforce HTTPS for every authenticated request.
  2. Validate the destination against an exact allowlist of approved scheme, host, port, and path values.
  3. Reject IP literals, user-information components, malformed URLs, and unexpected ports.
  4. Disable redirects for authenticated requests or validate every redirect target before forwarding credentials.
  5. If custom API endpoints are a legitimate requirement, display the resolved destination and obtain explicit user approval before transmitting credentials.
  6. Store the API key in a protected secret store or environment-backed credential facility rather than a plaintext project configuration file.
  7. Apply restrictive file permissions to any fallback credential file.
  8. Add tests proving that credentials are never sent to HTTP endpoints, unapproved hosts, or cross-origin redirect targets.

T09 · Insecure Skill Coding Practices

Warning
Location
references/zenlin_search_api.md:7
Finding

Debug output instructions may expose API authentication material

Content
View full analysis

Vulnerability Details

File Location: references/zenlin_search_api.md:7-13
Vulnerability Type: Sensitive authentication data exposure through debugging output
Risk Level: Medium

Vulnerable Source Excerpt

The following is a faithful English rendering of the relevant instructions:

text
3. Read configuration: Read Zeelin_Api_Url, Zeelin_Api_Key, and
   Zeelin_Website_Url from templates/config.json.
4. Generate signature: Generate an HMAC-SHA256 signature.
5. Send HTTP request: Put question_name in the body and include
   app-key, sign, and timestamp headers.
6. Print parameters: Output request parameters for debugging.

The authentication parameters are defined in references/zenlin_search_api.md:69-74:

text
- URL: Zeelin_Api_Url
- Headers:
  - Content-Type: application/json; charset=utf-8
  - app-key: ${Zeelin_Api_Key}
  - sign: ${sign}
  - timestamp: ${timestamp}

The requirement to print request parameters also appears in SKILL.md:30-32.

Technical Analysis

The Skill requires request parameters to be printed for debugging but provides no redaction rule and does not limit output to the non-sensitive request body. The documented request parameters include the plaintext app-key and an authentication signature.

An implementation that follows these instructions literally may expose authentication values in the conversation, execution logs, observability systems, or retained transcripts. The API key is a reusable secret and therefore must not be treated as an ordinary debug parameter.

Although a signature may be short-lived because it incorporates a timestamp, exposing it still unnecessarily reveals authentication material. More importantly, disclosure of the app-key can permit continued unauthorized use until the key is revoked or rotated.

Attack Path

  1. A user configures a valid Zeelin_Api_Key.
  2. The Skill constructs an authenticated request with ...[truncated 891 chars]
Remediation
View remediation

Remediation Suggestions

  1. Remove the instruction to print complete request parameters.
  2. Explicitly prohibit displaying or logging app-key, sign, and other authentication headers.
  3. If debugging output is necessary, use an allowlist containing only non-sensitive fields such as the destination host, HTTP method, request-body field names, and timeout.
  4. Redact identifiers using a form such as app-key: [REDACTED]; do not expose partial values unless operationally necessary.
  5. Ensure exception handlers and HTTP-client tracing also redact authentication headers.
  6. Configure transcript, telemetry, and application-log systems to apply defense-in-depth secret filtering.
  7. Add automated tests that fail if known test credentials appear in generated messages or logs.
  8. Rotate any production credential that may previously have been printed under the existing instructions.
Vulnerability Patterns
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (13)

Vague Triggers

High
Category
Not specified by scanner
Confidence
97% confidence
Finding

The skill advertises extremely broad trigger phrases such as generic references to public opinion, news, trends, and similar everyday topics. This can cause the skill to activate on ordinary conversation and initiate external API usage, file reads, and data persistence without the user clearly intending to invoke this specific integration.

Content

No source excerpt is available for this finding.

Vague Triggers

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The trigger list includes many vague placeholder-style patterns like '...舆情' and '...新闻报道', making the activation boundary ambiguous. In context, this is more dangerous because the skill then reads config, accesses API documentation, calls a remote service, and writes full results to the user's directory, so a false trigger can lead to unintended data disclosure or unnecessary external processing.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The skill requires saving the complete API response JSON into the user's directory but does not mention consent, retention, sensitivity, or local exposure risks. Search results may contain sensitive investigative, reputational, or personal data, and writing the full payload to disk increases the chance of unintended access by other local users, tools, backups, or malware.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
80% confidence
Finding

文档要求“使用智灵搜索API时,要使用中文支持的编码(UTF-8)”,且整体说明均默认中文交互,没有为用户提供语言/locale 选择。若该技能面向通用用户,这种强制语言倾向可能违反语言/地区选择政策。

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

The entire skill specification is written to operate in Chinese and all examples and required outputs are framed around Chinese-language inputs, without offering any language choice or stating that the skill is intentionally limited to a Chinese-only context. This creates a language/locale constraint that is not presented as an explicit user opt-in or justified regional requirement.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The file explicitly instructs the agent to remember prior conversion parameters and automatically reuse them when later inputs are partial. That creates a real context-retention/privacy issue because previously supplied subjects, sources, or other user-provided query details can be silently carried into later outputs without fresh confirmation, potentially exposing earlier user data to the current response.

Content

No source excerpt is available for this finding.

Ssd 3

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

These instructions tell the agent to retain and reuse all prior parameters from conversation history for partial follow-up queries. In a search skill, that can leak earlier user-provided entities, topics, time ranges, or other contextual data into later outputs even when the user did not intend to restate or disclose them again.

Content

No source excerpt is available for this finding.

Ssd 3

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The workflow repeatedly directs the agent to inspect conversation history and merge old parameters into new requests. That design increases the chance of unintended data propagation across turns, especially when abbreviated follow-ups cause the agent to reconstruct a full query from previously supplied information.

Content

No source excerpt is available for this finding.

Ssd 3

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The examples and final instructions normalize rewriting full query descriptions from prior context and showing the reconstructed JSON back to the user. That behavior can restate historical user inputs verbatim, amplifying privacy leakage by surfacing prior subjects or parameters in later responses where the user only supplied a short update.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
86% confidence
Finding

The file repeatedly requires Chinese-specific behavior, such as using Chinese-support encoding and presenting fixed Chinese-language user messages and examples, but does not offer the user any language or locale choice. Under the policy, forcing a specific language without opt-in is a natural-language policy violation unless the locale restriction is clearly documented and justified.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The skill instructs the agent to write the complete API response to a JSON file in the user's directory, which exceeds the stated query-and-display behavior and creates an unnecessary persistence channel for potentially sensitive search results. Persisting third-party response data locally can expose private, regulated, or proprietary content to other local users, backups, sync services, or later unintended reuse.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill mandates saving complete API search results into a file in the user directory without any privacy notice, consent flow, or data minimization guidance. Because the full JSON may contain URLs, authorship, media identifiers, and other potentially sensitive or regulated content, automatic local persistence increases the risk of unintended disclosure and over-retention.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
90% confidence
Finding

L227写明成功时应“展示接口返回的所有结果”,而L515又要求“展示前5条结果数据给用户,如果有更多数据,优先展示前5条”。这是对同一行为的主动性说明冲突,会导致实现意图不清并可能与用户预期不一致。

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.