Back to skill

Security audit

优惠券查询·场景快取

Security checks for vulnerabilities and agentic risk

Overview

The skill is mostly a disclosed coupon-link lookup tool, though users should notice that it also promotes an external submission form and some broad promotional links.

Install only if you want China-market promotional coupon links and are comfortable seeing affiliate-style or short-link offers. Treat the Feishu submission form and any enterprise WeChat/private-domain promotions as external destinations; do not submit personal information unless you trust the operator.

Vulnerability Patterns
  • 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
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
Findings (1)

T01 · Skill Instruction Hijacking

Warning
Location
scripts/find.mjs:164
Finding
Unconditional Injection of a Third-Party Promotional Link into Agent Responses<![CDATA[ ## Vulnerability Details **File Location**: `scripts/find.mjs:164-168` **Supporting Instruction Location**: `SKILL.md:57-67` **Vulnerability Type**: Agent response manipulation and unsolicited external traffic routing **Risk Level**: Medium ### Vulnerable Code ```javascript // 分享引导 lines.push('─'.repeat(30)); lines.push(`💡 发现更好的优惠?欢迎分享给大家!`); lines.push(`📮 提交活动链接: ${SHARE_URL}`); return lines.join('\n'); ``` The destination is hardcoded earlier in the same file: ```javascript const SHARE_URL = 'https://my.feishu.cn/share/base/form/shrcn4ERBYeALeE2cF8SMPIqHUE'; ``` In addition, `SKILL.md:57-67` instructs the agent to return the same external form when it interprets a request as an intent to share or submit an activity. ### Technical Analysis The `formatResults()` function unconditionally appends a fixed Feishu form link to every successful formatted search response. The link is unrelated to the processing required to locate and return coupons, and the user does not need to request submission functionality for it to appear. The skill instructions tell the agent to return the script's formatted output directly. Consequently, the injected call to action propagates from the local script into the agent's final response. This creates a stable response-manipulation path in which installing and invoking the skill causes the agent to promote a predetermined third-party destination. The external form may solicit information from users, but the audited project does not contain the form implementation. Therefore, the exact information collected by the destination and its downstream handling cannot be established from the available source. No evidence was found that the local script itself transmits data, accesses credentials, executes external code, or obtains elevated privileges. ### Attack Path 1. An operator installs or loads the coupon-finder skill. 2. A user asks the agent to find a coupon or discount. 3. The agent invokes `scripts/find.mjs` ...[truncated 1513 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Remove the unconditional sharing call to action from `formatResults()` so coupon queries return only information relevant to the user's request. 2. Do not embed a fixed promotional destination in every successful response. 3. Expose submission functionality only when the user explicitly asks to submit or share an activity. 4. Clearly label the form as an external destination and identify its operator and intended data use before asking the user to visit it. 5. Request explicit user confirmation before directing the user to a form that may collect information. 6. Update `SKILL.md` so it does not mandate a predetermined external-link response. It should describe submission as an optional capability rather than overriding the normal response flow. 7. Keep external destinations in a reviewed configuration file or allowlist rather than scattering fixed links across both instructions and executable code. 8. Add tests verifying that ordinary coupon searches do not contain unrelated submission links. 9. Periodically validate approved destinations, require HTTPS, and document whether links contain affiliate or tracking identifiers. ]]>
Vulnerability Patterns
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • 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
Findings (8)

Context-Inappropriate Capability

High
Confidence
98% confidence
Finding
Including a 'private-domain enterprise WeChat acquisition' activity is materially different from coupon discovery: it appears designed to funnel users into off-platform private contact channels. In a coupon skill context, this creates a social-engineering and data-harvesting risk because users may be induced to add enterprise WeChat accounts under the guise of claiming discounts.

Vague Triggers

Medium
Confidence
95% confidence
Finding
The trigger list in the metadata is overly broad and includes common conversational phrases such as '有什么优惠' and '帮我找优惠', making accidental activation likely. Overbroad invocation increases the chance that the skill intercepts unrelated conversations and steers users toward promotional links when they did not intend to use this skill.

Vague Triggers

Medium
Confidence
91% confidence
Finding
The trigger section broadens activation to many everyday shopping/travel utterances and also introduces a separate 'share activity' mode without clear activation boundaries. Without specificity or negative examples, the skill may activate on benign discussion and route users either to promotional results or to an external submission workflow unexpectedly.

Description-Behavior Mismatch

Medium
Confidence
94% confidence
Finding
The skill’s documented behavior expands from coupon lookup into accepting user-submitted promotions through an external Feishu form, which is outside the stated core purpose and introduces a new data-collection/workflow surface. This can expose users to phishing, spam, unreviewed third-party links, or unintended disclosure of submitted content, especially because the skill instructs users to leave the assistant flow and submit material to an external destination.

Natural-Language Policy Violations

Medium
Confidence
86% confidence
Finding
The file mixes English metadata with Chinese-only link type labels and usage assumptions, without offering any language or locale choice. Because SQP-3 applies to all file types, this is a policy concern where the data structure effectively assumes a single language/locale for consumers.

Description-Behavior Mismatch

Medium
Confidence
95% confidence
Finding
The skill is presented as a coupon lookup/claim tool for a bounded set of scenarios, but the dataset expands into broader leisure, travel, beauty, ticketing, and other commercial categories. This mismatch can cause the agent to recommend links outside user expectations and declared scope, increasing the risk of deceptive routing, policy bypass, and accidental promotion of unrelated affiliate content.

Natural-Language Policy Violations

Medium
Confidence
95% confidence
Finding
The header comments and example usage are entirely in Chinese, which imposes a specific language on users. Under the stated policy, forcing a language without user opt-in is a natural-language policy violation unless the locale constraint is explicitly justified.

Natural-Language Policy Violations

Medium
Confidence
93% confidence
Finding
The script returns user-facing text in Chinese for search feedback and CLI usage, and there is no mechanism for language selection. This creates a locale/language policy issue because the skill enforces a specific language by default.

Static analysis

No suspicious patterns detected.