Back to skill

Security audit

Amazon 产品质量问题线索

Security checks for vulnerabilities and agentic risk

Overview

This skill can spend account credits during a promised preview and exposes paid functions beyond its stated quality-analysis scope.

Prefer a corrected version that keeps previews read-only and enforces the quality-only scope. If proceeding, select account-level confirmation before every paid action, use quote for previews, and request manual collection for one-time work. Absence of --confirm does not reliably mean an operation is free; approve recurring costs separately.

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
scripts/ari.py
Finding

Deepdive's quote-only path can silently become a paid analysis

Content
View full analysis

Impact

A preview can consume account credits and generate an archived report without the command-specific confirmation promised to the user. In the missing-product case, output can additionally claim that analysis was downgraded to a quote even after it executed.

Vulnerability Patterns
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • 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 (88)

Description-Behavior Mismatch

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

The file combines a quality-only, explicitly confirmed paid workflow with generic instructions to run VOC and deduct credits automatically, including uncapped first-run exceptions. These conflicting instructions create a concrete authorization risk, although the supplied Markdown does not independently verify the finding's claims about local code enforcement.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
MCP Tool Poisoning
Confidence
94% confidence
Finding

Persistent scheduled monitoring, competitor tracking, and price acceptance materially exceed the declared scope of deriving product-quality leads from reviews and product fields. These are user-facing operational capabilities rather than merely supporting implementation details. The chunk contains command examples rather than implementation, so it establishes the exposed operations but does not prove that any watch was created or any charge occurred.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
MCP Tool Poisoning
Confidence
94% confidence
Finding

The description promises quality-issue analysis, whereas the supplied commands manage persistent, scheduled monitoring with explicit pricing acceptance. Those are material operational capabilities not disclosed in the description, rather than merely internal analysis implementation details. The chunk does not show review analysis or quality-evidence prioritization. It also does not establish that any watch was actually created or any charge incurred.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
MCP Tool Poisoning
Confidence
94% confidence
Finding

The comparison workflow says that binding a competitor starts weekly automatic collection, without explicitly attaching recurring-cost disclosure and consent to that binding step. Authorization for a one-time comparison does not necessarily authorize ongoing collection, creating a consent gap despite the general scheduling safeguards elsewhere.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
MCP Tool Poisoning
Confidence
93% confidence
Finding

Review-based monitoring could support quality analysis, but persistent scheduled jobs, competitor tracking, and price-acceptance operations materially expand the declared capability. The description does not disclose these ongoing monitoring and potentially paid operations. The supplied chunk contains CLI invocations rather than the underlying implementation, so it does not establish what data is collected or whether charges actually occur.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
MCP Tool Poisoning
Confidence
90% confidence
Finding

The declared purpose describes quality-issue analysis, but the supplied commands also manage ongoing collection schedules. Enabling recurring, potentially billable activity is a consequential operational capability beyond an ordinary implementation detail of summarizing reviews. The underlying script is not supplied, so its implementation and any actual charges cannot be independently verified.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
MCP Tool Poisoning
Confidence
83% confidence
Finding

The visible commands concern watch-service pricing and watch inventory rather than the declared quality-issue analysis. These are additional user-facing capabilities not disclosed in the description. The snippet does not show the underlying implementation, so it does not establish that watches are created, modified, or billed.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
MCP Tool Poisoning
Confidence
82% confidence
Finding

The supplied invocation explicitly selects '--type compare' and supplies '--competitor', indicating a comparison workflow rather than the declared quality-issue extraction workflow. Amazon product identifiers and ARI usage are consistent with the description, but competitor comparison is an additional, undeclared capability. The script implementation is not supplied, so its precise analysis, network access, and the effects of --confirm cannot be established.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
MCP Tool Poisoning
Confidence
82% confidence
Finding

The supplied command selects '--type compare' and provides '--competitor', exposing a competitor-comparison capability beyond the stated scope. The underlying script is not supplied, so the comparison's contents, data access, and any additional behavior cannot be verified.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
MCP Tool Poisoning
Confidence
81% confidence
Finding

The visible commands expose watch-service pricing and listing functionality that is not described in the declared quality-analysis purpose. The snippet does not show review or product-field analysis, nor establish that these watch operations support that analysis. Because only usage commands are supplied, the underlying implementation and any additional effects cannot be verified.

Content

No source excerpt is available for this finding.

Paid analysis can execute without the explicit --confirm flag promised by the module documentation.

High
Category
Excessive Agency
Confidence
99% confidence
Finding

run_analysis changes confirm to True when a server response supplies a truthy autoConfirm value, allowing paid execution without the documented explicit --confirm requirement. This also affects deepdive, whose purported quote-only downgrade can still execute analysis through this function.

Content

No source excerpt is available for this finding.

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
85% confidence
Finding

This entry endorses the automatic-confirmation policy described in v1.5.0, under which a server-provided flag can trigger paid operations without transaction-specific approval. The concern is the documented default authorization of spending, not the identifier itself; this is a duplicate of the underlying issue at line 32, and the changelog alone does not establish that this specialized package exposes the affected commands.

Content

Scanner excerpt · CHANGELOG.md (reported line 23)May include surrounding context.

md
- 重新发布:各市场首批上架的 1.5.0 包早于免确认修复,新注册的免费版用户仍会被要求先确认报价。
  1.5.1 与当前官网下发的修复版一致,市场侧以新版本号覆盖旧包。
- 免确认只认服务端报价返回的 `autoConfirm`;采集报价扣除首次采集免费页;
  非美国站首次采集可用赠送积点时不再提示「赠送积点不可用」(行为与修复后的 1.5.0 相同)。
- 命令、字段与计费规则不变,不提高最低支持版本。

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
88% confidence
Finding

The documented policy permits the first N paid generations without an amount ceiling and automatically adds collection, analysis, and credit deductions to a simple product request. Gift credits, balance checks, and optional user thresholds reduce exposure but do not establish informed authorization for the default spending behavior; charges disclosed afterward cannot provide prior consent.

Content

Scanner excerpt · CHANGELOG.md (reported line 32)May include surrounding context.

md
- 行为变更:新用户(注册并验证邮箱后)第一次要 VOC,只给 ASIN 即可(站点默认美国站),
  `voc` 直接执行——自动补采集(默认 3 页)、生成报告、按服务端定价扣费并归档,
  不再停在报价等确认。费用在报告返回的 `charges` 字段透明展示(采集/分析/合计/余额前后)。
- 免确认与否**只认服务端报价返回的 `autoConfirm` 布尔**:服务端策略前 N 次付费生成不看金额上限
  (新用户赠送积点按设计覆盖「3 页采集 + 一份 VOC」);用户自设阈值优先、显式要求「每次先问」
  时仍先报价;余额不足不自动。客户端不再从 `autoConfirmNote` 文案或 `autoConfirmRemaining`
  自行推断——文案匹配会把 Free 小额提示里的「先确认」误判成用户要求每次询问,恰好挡住新用户。

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
85% confidence
Finding

Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Content

Scanner excerpt · CHANGELOG.md (reported line 34)May include surrounding context.

md
不再停在报价等确认。费用在报告返回的 `charges` 字段透明展示(采集/分析/合计/余额前后)。
- 免确认与否**只认服务端报价返回的 `autoConfirm` 布尔**:服务端策略前 N 次付费生成不看金额上限
  (新用户赠送积点按设计覆盖「3 页采集 + 一份 VOC」);用户自设阈值优先、显式要求「每次先问」
  时仍先报价;余额不足不自动。客户端不再从 `autoConfirmNote` 文案或 `autoConfirmRemaining`
  自行推断——文案匹配会把 Free 小额提示里的「先确认」误判成用户要求每次询问,恰好挡住新用户。
- 采集报价同口径扣除服务端 `trialFreePages`(首次采集试用免费页),避免新用户被误报「积点不足」。
- 非美国站:服务端 `credits.gift` 策略下用户首次采集不限站点,`credits/balance` 返回 `giftAllSites`,

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
85% confidence
Finding

Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Content

Scanner excerpt · CHANGELOG.md (reported line 34)May include surrounding context.

md
不再停在报价等确认。费用在报告返回的 `charges` 字段透明展示(采集/分析/合计/余额前后)。
- 免确认与否**只认服务端报价返回的 `autoConfirm` 布尔**:服务端策略前 N 次付费生成不看金额上限
  (新用户赠送积点按设计覆盖「3 页采集 + 一份 VOC」);用户自设阈值优先、显式要求「每次先问」
  时仍先报价;余额不足不自动。客户端不再从 `autoConfirmNote` 文案或 `autoConfirmRemaining`
  自行推断——文案匹配会把 Free 小额提示里的「先确认」误判成用户要求每次询问,恰好挡住新用户。
- 采集报价同口径扣除服务端 `trialFreePages`(首次采集试用免费页),避免新用户被误报「积点不足」。
- 非美国站:服务端 `credits.gift` 策略下用户首次采集不限站点,`credits/balance` 返回 `giftAllSites`,

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
85% confidence
Finding

This entry extends the same automatic paid-execution policy to multiple analysis types, increasing the operations that may consume credits without transaction-specific approval. It is another manifestation of the line-32 consent issue rather than a separate exploit, and actual exposure depends on whether these commands are available in this specialized package.

Content

Scanner excerpt · CHANGELOG.md (reported line 41)May include surrounding context.

md
为 true 时赠送积点计入 `nonUsCollectCredits`、`siteNote` 为空;UK/DE/JP 卖家的第一份 VOC 同样一步直出。
- 余额不足仍在执行前拦截(402)并引导充值;定价以服务端配置为准,代码常量仅为兜底。
- 一致性:`analyze` 各类型(insight / keywords / trend / variant / compare)走同一口径,
  `autoConfirm=true` 即直接生成并返回 `charges`。
- 文档:移除所有写死的单价与合计示例。采集/分析单价与页数由后台 `pricing` 配置决定,
  一律以本次报价返回的 `credits` / `totalCredits` 为准,不得凭文档或记忆报数。

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
85% confidence
Finding

Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Content

Scanner excerpt · CHANGELOG.md (reported line 77)May include surrounding context.

md
- 能力层收窄:44 个专属包不再只是「声明窄」,包体 `scripts/ari.py` 同时按各自契约裁剪。
  构建期用 AST 删除文档未承诺的命令、它们的解析器注册块,以及只被它们引用的辅助函数与
  常量;专属包因此不再包含 `export`(任意路径写文件)、`autoconfirm`(撤销逐次确认)、
  `workbench`(改写差评处理状态)、`alerts`(标记预警已读)、`competitors`、`schedule`、
  `voc` / `analyze` / `charts` / `deepdive` 等母版命令。
- 新增运行期兜底闸:专属包在包内写入 `allowedCommands` 白名单,`ari.py`

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
85% confidence
Finding

Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Content

Scanner excerpt · scripts/ari.py (reported line 660)May include surrounding context.

python
def cmd_autoconfirm(args):
    """免确认阈值:不带参数=查看;`autoconfirm 50`=50 积点以内不问;`autoconfirm off`=每次都问;`autoconfirm default`=恢复默认。"""
    value = (args.value or "").strip().lower()
    if value:
        if value in ("off", "ask", "0"):

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
85% confidence
Finding

Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Content

Scanner excerpt · scripts/ari.py (reported line 660)May include surrounding context.

python
def cmd_autoconfirm(args):
    """免确认阈值:不带参数=查看;`autoconfirm 50`=50 积点以内不问;`autoconfirm off`=每次都问;`autoconfirm default`=恢复默认。"""
    value = (args.value or "").strip().lower()
    if value:
        if value in ("off", "ask", "0"):

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
85% confidence
Finding

Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Content

Scanner excerpt · scripts/ari.py (reported line 660)May include surrounding context.

python
def cmd_autoconfirm(args):
    """免确认阈值:不带参数=查看;`autoconfirm 50`=50 积点以内不问;`autoconfirm off`=每次都问;`autoconfirm default`=恢复默认。"""
    value = (args.value or "").strip().lower()
    if value:
        if value in ("off", "ask", "0"):

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
85% confidence
Finding

Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Content

Scanner excerpt · scripts/ari.py (reported line 672)May include surrounding context.

python
limit = int(value)
            except ValueError:
                emit(error_obj("ARI_BAD_ARGUMENT", 0, "参数不对",
                               "用法:autoconfirm 50(50 积点以内不问)/ autoconfirm off(每次都问)/ autoconfirm default(恢复默认)"),
                     args.compact)
                return
        out = request_json("PUT", "/api/v1/user/autoconfirm", {"limit": limit})

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
85% confidence
Finding

Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Content

Scanner excerpt · scripts/ari.py (reported line 672)May include surrounding context.

python
limit = int(value)
            except ValueError:
                emit(error_obj("ARI_BAD_ARGUMENT", 0, "参数不对",
                               "用法:autoconfirm 50(50 积点以内不问)/ autoconfirm off(每次都问)/ autoconfirm default(恢复默认)"),
                     args.compact)
                return
        out = request_json("PUT", "/api/v1/user/autoconfirm", {"limit": limit})

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
85% confidence
Finding

Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Content

Scanner excerpt · scripts/ari.py (reported line 672)May include surrounding context.

python
limit = int(value)
            except ValueError:
                emit(error_obj("ARI_BAD_ARGUMENT", 0, "参数不对",
                               "用法:autoconfirm 50(50 积点以内不问)/ autoconfirm off(每次都问)/ autoconfirm default(恢复默认)"),
                     args.compact)
                return
        out = request_json("PUT", "/api/v1/user/autoconfirm", {"limit": limit})

Skill declares no tool scope ('permissions' or 'allowed-tools') but code capabilities were detected: env, file_write, network, shell.

Medium
Category
MCP Least Privilege
Confidence
70% confidence
Finding

Without declared permissions the skill's intent is opaque and cannot be validated.

Content

No source excerpt is available for this finding.

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
96% confidence
Finding

The automatic execution rule permits credit deductions based on first-run allowances or server defaults, not just a spending limit explicitly authorized by the user. Uncapped first-run eligibility is not equivalent to consent, and it conflicts with this skill's mandatory quote-and-confirm entry point.

Content

Scanner excerpt · SKILL.md (reported line 57)May include surrounding context.

md
`voc <ASIN>`(没说站点就用默认的美国站,不要为此追问)。
  命中服务端免确认规则(新用户首次体验不看金额 / 账户剩余免确认次数 / 用户自设阈值)且余额充足时,
  **直接完成采集 + 生成 + 扣点并归档**,不再停在报价环节。绝不能描述成“先帮你问个价 / 只报价不扣点”。
  免确认与否以返回里的 `autoConfirm` 为准,不要自己从提示文案里猜。
- 直接生成成功后,返回结果带 `charges`(采集扣点、分析扣点、合计、扣前/扣后余额)与 `autoConfirmNote`。
  **先讲报告,再用一句话转述实际扣点**,不要在拿到结果后再补问「要不要生成」,也不要回头补一次报价。
- 只有在返回 `confirmationRequired: true` 时(余额不足、或用户自行设置了“每次先问”)