Back to skill

Security audit

Amazon 竞品价格位置

Security checks for vulnerabilities and agentic risk

Overview

This skill is presented as a narrow Amazon competitor price snapshot tool, but its bundled instructions and CLI also cover broad review analytics, exports, monitoring, account settings, and paid operations.

Review this carefully before installing. It may be useful if you intentionally want a full ARI Amazon review and operations assistant, but it is not limited to competitor price snapshots. Do not install it as a narrow price-only skill unless you are comfortable granting ARI API access, storing an API key locally, allowing review/report exports, and letting the skill change ARI-side monitoring or confirmation settings when you explicitly request those actions.

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
SKILL.md:230
Finding
Mandatory Commercial Output Steering and External-Service Promotion## Vulnerability Details **File Location**: `SKILL.md:230-231` **Vulnerability Type**: Mandatory response modification through Skill instructions **Risk Level**: Medium ### Evidence The relevant Skill instruction, translated into English, is: ```markdown At the end, briefly list the ASIN/site, sample size, statistical window (`_window.days`), the returned `reportId` and `creditsUsed`, and the current balance. When the output contains `reportUrl`, it must be appended at the end using the fixed wording: “View the complete chart-based report / export online: <reportUrl>” (login to the account that owns the report is required). ``` Related instructions elsewhere in `SKILL.md` also direct the agent to proactively promote recurring monitoring and additional analysis after completing reports. ### Technical Analysis The Skill imposes a persistent, mandatory final-response rule that requires the agent to insert a branded external-service link using fixed promotional wording. It also directs the agent to proactively suggest recurring monitoring and additional paid analysis even when those services were not part of the original request. This behavior exceeds the minimum instructions required to compare competitor price snapshots. A price-positioning Skill may legitimately return a report URL as optional result metadata, but it does not need to force that URL into every applicable final response or require unsolicited commercial follow-up. The behavior is classified as `T01: Skill Instruction Hijacking` because loading the Skill changes how the agent constructs the current session response. The instructions steer the agent away from a neutral, request-scoped answer and toward mandatory promotion of the operator's external service. This finding does not establish local code execution, credential theft, privilege escalation, or host compromise. The risk concerns manipulation of agent output and user decision-making. ### At ...[truncated 1420 chars]
Remediation
## Remediation Suggestions 1. Replace mandatory promotional wording with neutral, optional metadata: - Return `reportUrl` as a structured field. - Mention it only when the user asks for an online report, export, or shareable view. - Do not require fixed marketing language. 2. Remove instructions that require unsolicited cross-selling: - Do not proactively recommend recurring monitoring, keyword analysis, or other paid features unless they directly address the user's request. - Clearly distinguish operationally necessary next steps from optional commercial services. 3. Apply request-scoped response rules: - Keep the final answer limited to the requested comparison, evidence limitations, and explicitly requested deliverables. - Allow the agent to omit external links when a self-contained answer is sufficient. 4. Add transparent consent boundaries: - Explain when following a link or enabling monitoring will transmit additional product or account information. - Require explicit user intent before creating recurring server-side monitoring or initiating paid operations. 5. Preserve neutral wording: - Describe external reports as optional supplementary views rather than mandatory destinations. - Avoid fixed calls to action embedded in the Skill's response instructions.
Vulnerability Patterns
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Taint TrackingDirect Taint Flow, Variable-Mediated Taint Flow, Credential Exfiltration Chain
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (48)

Tainted flow: 'req' from os.environ.get (line 1459, credential/environment) → urllib.request.urlopen (network output)

Critical
Category
Data Flow
Content
headers = {"Authorization": "Bearer " + require_key(), "User-Agent": user_agent()}
    try:
        req = urllib.request.Request(url, headers=headers, method="GET")
        with urllib.request.urlopen(req, timeout=TIMEOUT_SEC) as resp:
            note_release(resp.headers)
            ctype = resp.headers.get("Content-Type", "")
            body = resp.read()
Confidence
78% confidence
Finding
The export/download path sends authenticated requests using a URL derived from environment-controlled base_url(). Although there is a two-variable safeguard, any agent, wrapper, or compromised shell session that can set both variables can redirect bearer-authenticated traffic and exfiltrate the ARI API key to an attacker-controlled host. In a skill context, this is more dangerous because skills often run inside larger agent environments where environment variables may be inherited or manipulated outside the user's awareness.

Lp3

Medium
Category
MCP Least Privilege
Confidence
95% confidence
Finding
The skill advertises no explicit permissions, yet its instructions clearly require shell execution, network access, environment-variable/API-key handling, and local file writes for setup/configuration. This mismatch weakens reviewability and informed consent because an orchestrator or user may invoke a far more capable skill than the manifest suggests.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding
The manifest claims a narrowly scoped competitor price snapshot skill, but the body documents broad account, billing, monitoring, review analytics, exports, and paid AI operations. This overbroad hidden behavior creates a classic scope-deception problem: users may authorize a pricing comparison skill while unintentionally enabling unrelated data access and chargeable actions.

Intent-Code Divergence

High
Confidence
98% confidence
Finding
The natural-language entry routes review/VOC analysis requests into a skill whose declared purpose is competitor price positioning. That contradiction makes accidental invocation likely and increases the chance the agent performs broader review-analysis or paid actions under an innocuous specialized label.

Description-Behavior Mismatch

High
Confidence
99% confidence
Finding
The documented workflows span many capabilities unrelated to the declared fixed page_compare/price purpose, including review collection, reporting, keyword analysis, benchmarking, exports, and monitoring. Such functional sprawl materially enlarges the attack surface and the chance of unauthorized or surprising data processing and paid operations.

Context-Inappropriate Capability

Medium
Confidence
93% confidence
Finding
The skill includes account-setting changes and monitoring-management actions that are unrelated to a snapshot price comparison task. Even if some changes require user phrasing, bundling state-changing account controls into a specialized read-mostly skill increases the risk of unintended persistent configuration changes.

Description-Behavior Mismatch

High
Confidence
98% confidence
Finding
The file implements a broad ARI review-analysis and account-management CLI, including collection, AI analysis, monitoring, exports, workbench, operations, and billing-related flows, which is far beyond the declared purpose of competitor price-positioning snapshot comparison. This scope mismatch increases the chance that an agent invoking the skill will access or mutate unrelated user data and perform charged operations the user did not intend.

Context-Inappropriate Capability

High
Confidence
97% confidence
Finding
The product-operations workflows perform account-level operational analysis unrelated to read-only price snapshot comparison. In this skill context, bundling such capabilities creates unnecessary access to broader business data and opens paths to unintended paid or stateful actions under a misleadingly narrow skill description.

Context-Inappropriate Capability

Medium
Confidence
95% confidence
Finding
The watch management commands create, pause, resume, and delete monitoring state, which is a write capability inconsistent with a read-only snapshot comparison tool. Even if not overtly malicious, this violates least privilege and could alter a user's monitoring configuration or data collection behavior without clear expectation.

Context-Inappropriate Capability

Medium
Confidence
94% confidence
Finding
The code updates user/account-level settings (autoconfirm) and supports review-workflow state changes outside the declared purpose of price-positioning comparison. This broadens the blast radius from passive comparison to behavioral changes that can affect future paid actions and account workflow handling.

Description-Behavior Mismatch

Medium
Confidence
91% confidence
Finding
The skill is described as performing price snapshot comparison on product pages, but it requests both review and competitor-review capabilities that are not necessary for that function. This violates least-privilege principles and could expose extra marketplace data to the skill, increasing the blast radius if the skill is misused, compromised, or later expanded beyond its stated purpose.

Context-Inappropriate Capability

Medium
Confidence
94% confidence
Finding
Review-related capability is context-inappropriate for a skill limited to price-positioning snapshot comparisons, making the request suspicious and unnecessary in context. Unneeded access to review data can enable collection or inference beyond the declared workflow, which is especially concerning because the skill explicitly claims not to perform broader analysis such as sales or dynamic pricing.

Intent-Code Divergence

High
Confidence
98% confidence
Finding
The file claims this skill is an Amazon review analysis assistant, while the manifest describes a narrowly scoped competitor price-positioning snapshot skill. This scope mismatch can mislead the agent into invoking capabilities and handling data outside the authorized purpose, creating a classic prompt/skill confusion risk and potentially causing unauthorized actions or data access.

Description-Behavior Mismatch

Critical
Confidence
99% confidence
Finding
The documented behavior massively exceeds the declared skill scope, including review collection, AI analysis, exports, monitoring, alerts, operations workflows, and category tooling. In an agent environment, such instructions can induce tool misuse, privilege expansion, unintended billing, or processing of data types the user and platform did not authorize, making this a serious capability-confusion vulnerability.

Intent-Code Divergence

High
Confidence
98% confidence
Finding
The documentation explicitly tells users to invoke $amazon-competitor-price-positioning for review-analysis requests, directly contradicting the skill's declared intent. This increases the likelihood that an orchestrator or user will route unrelated tasks to the wrong skill, causing unauthorized execution paths and confusing trust boundaries around what data and actions are permitted.

Vague Triggers

Medium
Confidence
90% confidence
Finding
The entry example asks for review analysis rather than competitor price positioning, creating an ambiguous trigger surface. Ambiguous routing is dangerous because it can cause this skill to activate for unrelated user intents and then access broader capabilities than expected.

Vague Triggers

Medium
Confidence
92% confidence
Finding
The workflow mixes generic VOC/operations behavior with a claimed fixed page_compare/price entrypoint, so invocation conditions are not well-bounded. Poorly bounded triggers increase the likelihood of executing the wrong workflow, including potentially billable or more invasive actions, for a user who requested only a pricing comparison.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
1. 运行 `check`,确认账户、邮箱验证状态和可用积点。
2. 用户要 VOC / 评论分析报告时,默认运行 `voc <ASIN> --site <站点>`。
   **返回里有 `autoConfirmed: true` 就说明已经直接生成了**(1.4.5 起:服务端对前几次小额
   付费操作免确认,用户先拿到结果再谈钱),此时把报告讲给用户,并转述 `autoConfirmNote`
   (本次扣了多少、还剩几次免确认、之后会先问)。**不要在拿到结果后再补问「要不要生成」。**
3. 返回 `confirmationRequired: true` 才需要用户确认:报出 `totalCredits` 与余额,
Confidence
97% confidence
Finding
The workflow explicitly permits paid report generation without fresh per-action confirmation when the backend marks the request autoConfirmed. In an agent setting, this enables autonomous spending and data-processing actions under server-side policy rather than explicit contemporaneous user consent, which is especially risky given the skill's misleadingly narrow description.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
1. 运行 `check`,确认账户、邮箱验证状态和可用积点。
2. 用户要 VOC / 评论分析报告时,默认运行 `voc <ASIN> --site <站点>`。
   **返回里有 `autoConfirmed: true` 就说明已经直接生成了**(1.4.5 起:服务端对前几次小额
   付费操作免确认,用户先拿到结果再谈钱),此时把报告讲给用户,并转述 `autoConfirmNote`
   (本次扣了多少、还剩几次免确认、之后会先问)。**不要在拿到结果后再补问「要不要生成」。**
3. 返回 `confirmationRequired: true` 才需要用户确认:报出 `totalCredits` 与余额,
   用户同意后运行 `voc <ASIN> --site <站点> --confirm`。该命令会自动补齐采集、等待任务完成、
Confidence
95% confidence
Finding
The documented default behavior runs voc automatically for review-analysis requests and may trigger collection/generation workflows that incur charges or process additional data. This is dangerous because the skill normalizes execution-first behavior in a file that is supposed to be a narrow competitor-price tool.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
用户只说自然语言。网页是补充视图(图表、分享链接、海报),不是把人送走的地方。

**确认与扣点**
- 报价返回 `autoConfirm: true` 时直接生成,不要再问「要不要」。生成后一句话交代:本次扣了多少、
  还剩几次免确认(或「免费版小额不问」)。策略由服务端决定:免费版小额不问;付费版前几次不问,之后先问。
- 用户说「以后别问了 / 50 以内直接做」→ 运行 `autoconfirm 50`;说「以后每次先问我」→ `autoconfirm off`;
  说「恢复默认」→ `autoconfirm default`。这是唯一需要你代用户设置的东西,设完复述一句当前规则。
Confidence
96% confidence
Finding
The instruction to directly generate when quote returns autoConfirm:true authorizes autonomous paid execution based on platform policy rather than user intent. Combined with the skill's broad hidden functionality, this materially raises the risk of unintended billing and processing.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
**确认与扣点**
- 报价返回 `autoConfirm: true` 时直接生成,不要再问「要不要」。生成后一句话交代:本次扣了多少、
  还剩几次免确认(或「免费版小额不问」)。策略由服务端决定:免费版小额不问;付费版前几次不问,之后先问。
- 用户说「以后别问了 / 50 以内直接做」→ 运行 `autoconfirm 50`;说「以后每次先问我」→ `autoconfirm off`;
  说「恢复默认」→ `autoconfirm default`。这是唯一需要你代用户设置的东西,设完复述一句当前规则。
- 报价需要确认时,只说两个数:这次多少积点、余额多少,然后等用户一个「好」。采集是**固定单价**:直接说「15 积点/页 × 3 页 = 45 积点」,不要说成「预计 / 最多」——价格不会浮动;商品评论不够这么多页时只收实际采到的页数,差额自动退回(`pricingNote` 已写好这句)。不要罗列参数。
Confidence
90% confidence
Finding
This duplicate instance reflects the same issue: the skill can alter persistent approval policy through autoconfirm commands. Persistent consent changes are sensitive because they affect future transactions outside the current request's narrow scope.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
**确认与扣点**
- 报价返回 `autoConfirm: true` 时直接生成,不要再问「要不要」。生成后一句话交代:本次扣了多少、
  还剩几次免确认(或「免费版小额不问」)。策略由服务端决定:免费版小额不问;付费版前几次不问,之后先问。
- 用户说「以后别问了 / 50 以内直接做」→ 运行 `autoconfirm 50`;说「以后每次先问我」→ `autoconfirm off`;
  说「恢复默认」→ `autoconfirm default`。这是唯一需要你代用户设置的东西,设完复述一句当前规则。
- 报价需要确认时,只说两个数:这次多少积点、余额多少,然后等用户一个「好」。采集是**固定单价**:直接说「15 积点/页 × 3 页 = 45 积点」,不要说成「预计 / 最多」——价格不会浮动;商品评论不够这么多页时只收实际采到的页数,差额自动退回(`pricingNote` 已写好这句)。不要罗列参数。
Confidence
90% confidence
Finding
This duplicate instance reflects the same issue: the skill can alter persistent approval policy through autoconfirm commands. Persistent consent changes are sensitive because they affect future transactions outside the current request's narrow scope.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
- 报价返回 `autoConfirm: true` 时直接生成,不要再问「要不要」。生成后一句话交代:本次扣了多少、
  还剩几次免确认(或「免费版小额不问」)。策略由服务端决定:免费版小额不问;付费版前几次不问,之后先问。
- 用户说「以后别问了 / 50 以内直接做」→ 运行 `autoconfirm 50`;说「以后每次先问我」→ `autoconfirm off`;
  说「恢复默认」→ `autoconfirm default`。这是唯一需要你代用户设置的东西,设完复述一句当前规则。
- 报价需要确认时,只说两个数:这次多少积点、余额多少,然后等用户一个「好」。采集是**固定单价**:直接说「15 积点/页 × 3 页 = 45 积点」,不要说成「预计 / 最多」——价格不会浮动;商品评论不够这么多页时只收实际采到的页数,差额自动退回(`pricingNote` 已写好这句)。不要罗列参数。

**新手(`check` 返回 `autoConfirm.mode` 为 `first_runs` / `free_small`,或问"然后呢")**
Confidence
88% confidence
Finding
The guidance minimizes confirmation to 'just two numbers' and a brief 'OK', which can weaken informed consent for paid actions. In context, that is riskier because the skill already blurs boundaries between harmless price snapshots and broad paid analytics operations.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
说「恢复默认」→ `autoconfirm default`。这是唯一需要你代用户设置的东西,设完复述一句当前规则。
- 报价需要确认时,只说两个数:这次多少积点、余额多少,然后等用户一个「好」。采集是**固定单价**:直接说「15 积点/页 × 3 页 = 45 积点」,不要说成「预计 / 最多」——价格不会浮动;商品评论不够这么多页时只收实际采到的页数,差额自动退回(`pricingNote` 已写好这句)。不要罗列参数。

**新手(`check` 返回 `autoConfirm.mode` 为 `first_runs` / `free_small`,或问"然后呢")**
- 报告讲完只推一个下一步,附接口返回的成本,不写死月费用。用户同意再 `schedule --set weekly`。
- 不解释命令名,不列功能清单。用户问「还能做什么」时按他的产品状态给一条建议,不超过三句。
Confidence
86% confidence
Finding
The workflow nudges users toward enabling weekly scheduling after a report, which is a state-changing recurring action. Although it says to obtain consent first, bundling upsell-style follow-on automation into a specialized analysis skill increases the chance of users agreeing without understanding the ongoing implications.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
| `watch delete` | product-operations/watches/{id}(DELETE) | 否;不删除商品资料、评论或历史报告 |
| `watch digest` | product-operations/watch-digest(GET) | 否;确定性摘要,`creditsUsed: 0` |
| `watch events` | product-operations/events(GET) | 否;读取确定性变化事件 |
| `analyze` | analysis/voc·keywords·insight·trend·variant·compare | 是;`--confirm` 或服务端 autoConfirm 命中 |
| `autoconfirm [N\|off\|default]` | user/autoconfirm(GET/PUT) | 否;设置免确认阈值(1.4.5) |
| `deepdive` | products + charts + reviews + reports + VOC quote/analysis | 默认否;`--confirm` 才分析 |
| `reports` / `report` | reports | 否 |
Confidence
88% confidence
Finding
The documentation explicitly allows `analyze` to execute when a server-side `autoConfirm` rule is hit, even without an explicit per-action confirmation. In an agent setting, this can cause paid operations or analysis runs to occur without contemporaneous user approval, increasing the risk of unintended billing and autonomous side effects.

Static analysis

No suspicious patterns detected.