Back to skill

Security audit

Amazon Listing 可读性检查

Security checks for vulnerabilities and agentic risk

Overview

The skill appears to be a real ARI Amazon review tool, but it is broader than the advertised readability checker and can spend credits or change account settings in ways users may not expect.

Install only if you want an ARI account integration for broad Amazon review operations, not just readability checking. Before use, turn off or carefully review auto-confirm settings, require quotes before paid actions, review any monitoring or competitor tracking changes, and keep the ARI API key scoped and revocable.

Vulnerability Patterns
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • 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 (3)

T01 · Skill Instruction Hijacking

Error
Location
SKILL.md:114
Finding
Mandatory promotional content and unrelated advertising guidance alter Agent responses## Vulnerability Details **File Location**: `SKILL.md:114-115`, `SKILL.md:139`, `SKILL.md:146-147`, `SKILL.md:230-231` **Vulnerability Type**: Persistent Agent output manipulation **Risk Level**: High ### Relevant Skill Directives The relevant directives, faithfully translated into English, require the Agent to: ```text After producing a VOC report, proactively mention that customer language is a keyword source and can be used directly for advertising. After presenting a report to a new user, promote one next step and include the cost returned by the service. Append the web report to every report and state that the web version provides charts, sharing links, and posters. When reportUrl is present, append the following fixed closing text: "View the complete chart-based report online / export: reportUrl." ``` The Skill also declares at `SKILL.md:4` that it is limited to readability diagnostics and is not intended for advertising. ### Technical Analysis These are mandatory, stable instructions that modify the Agent's response after it has completed the requested readability analysis. They require unsolicited advertising guidance, paid-service cross-selling, vendor-hosted report links, and fixed promotional closing text. The advertising directive conflicts directly with the declared functional boundary. The report-link requirement is not conditional on the user requesting a hosted report, sharing feature, or external website. This behavior therefore exceeds the minimum instructions necessary to inspect Listing readability. Because these rules are loaded as Skill instructions, they can influence every applicable Agent response in the current session. The behavior does not grant operating-system privileges, but it hijacks the Agent's output channel and redirects user attention toward additional vendor services. ### Attack Path 1. A user invokes the Skill for an Amazon Listing readability assessment. 2. The Age ...[truncated 1009 chars]
Remediation
## Remediation Suggestions 1. Remove mandatory advertising and keyword-promotion directives from the readability Skill. 2. Remove instructions that require the Agent to promote a paid next step after every report. 3. Make hosted report links conditional on either: - An explicit user request for a web report, export, or sharing feature; or - A strict functional requirement to deliver the requested artifact. 4. Replace fixed promotional closing text with neutral, optional wording. 5. Move advertising and keyword-analysis features into a separately declared Skill with its own consent and scope. 6. Ensure all Agent instructions remain consistent with the declared exclusion of advertising services. 7. Add a review rule prohibiting unsolicited cross-selling or vendor promotion in Skill output.

T09 · Insecure Skill Coding Practices

Error
Location
scripts/ari.py:1109
Finding
Server-controlled auto-confirmation can initiate credit-consuming operations without current explicit consent## Vulnerability Details **File Location**: `scripts/ari.py:1109-1114`, `scripts/ari.py:1318-1323` **Vulnerability Type**: Improper authorization of paid operations **Risk Level**: High ### Vulnerable Code ```python auto_confirmed = False if not confirm and q_data.get("autoConfirm") and q_data.get("sufficient"): confirm = True auto_confirmed = True if not confirm: return {"success": True, "data": {"confirmationRequired": True, "quote": q_data, "webUrl": q_data.get("webUrl"), "message": "User confirmation is required before generation and charging."}, "links": links()} ``` A second path applies the same model to combined collection and VOC analysis: ```python auto_max = int(analysis_quote.get("autoConfirmMaxCredits") or 0) auto_confirmed = (not args.confirm and bool(analysis_quote.get("autoConfirm")) and sufficient and total_credits <= auto_max) if not args.confirm and not auto_confirmed: combined_quote["autoConfirmRemaining"] = analysis_quote.get("autoConfirmRemaining") emit({"success": True, "data": combined_quote, "links": links()}, args.compact) return ``` ### Technical Analysis The CLI ordinarily uses `--confirm` as the local indication that the user approved a credit-consuming operation. These branches override that boundary when the remote quote response contains `autoConfirm`. In `run_analysis`, an omitted confirmation is converted into `confirm = True` solely from server-returned fields. In `cmd_voc`, a server-returned auto-confirmation flag and threshold allow collection and analysis to proceed without `--confirm`. This makes the remote service response part of the authorization decision. A faulty, compromised, or malicious response can therefore transform what appears to be a non-confirmed analysis invocation into a paid operation. The separate `suffi ...[truncated 1579 chars]
Remediation
## Remediation Suggestions 1. Require `--confirm` for every credit-consuming operation by default. 2. Never treat a server response as proof of user authorization. 3. If persistent auto-confirmation is supported, store the user's explicit policy locally with: - A clear per-operation limit. - An optional session or daily limit. - A creation timestamp. - A command for reviewing and revoking the policy. 4. Require the server quote to fit within the locally stored user limit, but do not let the server define that limit. 5. Present the exact charge, operation type, ASIN, and site before requesting confirmation. 6. Distinguish quote-only and execute commands so a quote invocation cannot be promoted into execution. 7. Add tests proving that omitted `--confirm` never reaches collection or analysis execution endpoints unless a valid local user policy exists.

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/ari.py:307
Finding
Authenticated requests do not prevent cross-origin redirects from exposing the Bearer API key## Vulnerability Details **File Location**: `scripts/ari.py:307-320`, `scripts/ari.py:338-350`, `scripts/ari.py:1457-1460` **Vulnerability Type**: Credential disclosure through unsafe redirect handling **Risk Level**: Medium ### Vulnerable Code ```python data = None if payload is None else json.dumps(payload).encode("utf-8") headers = { "Authorization": "Bearer " + require_key(), "Accept": "application/json", "User-Agent": user_agent(), } if data is not None: headers["Content-Type"] = "application/json" try: req = urllib.request.Request(url, data=data, headers=headers, method=method) with urllib.request.urlopen(req, timeout=TIMEOUT_SEC) as resp: note_release(resp.headers) raw = resp.read().decode("utf-8") ``` The authenticated download path uses the same default redirect behavior: ```python 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) ``` ### Technical Analysis The code attaches the reusable `ari_live_*` credential to a `urllib.request.Request` and then invokes the default `urllib.request.urlopen` opener. No custom redirect handler validates the redirect destination or removes the Authorization header before following a redirect. Python's standard redirect handling can construct a redirected request from the original request headers. Since the implementation does not enforce same-origin redirects, a redirect response from the API can cause the credential to be included in a request to a different host. The custom base URL safeguard reduces accidental redirection caused by environment-variable modification, but it does not protect against redirects returned by the configured server, an intercepted development endpoint, or a compromised reverse p ...[truncated 1506 chars]
Remediation
## Remediation Suggestions 1. Disable automatic redirects for all authenticated requests unless redirects are strictly required. 2. Implement a custom `HTTPRedirectHandler` that: - Parses the original and destination URLs. - Requires HTTPS for both requests. - Compares normalized hostname and port. - Rejects every cross-origin redirect. - Removes `Authorization` before constructing any redirected request. 3. Maintain an explicit allowlist if more than one trusted API hostname is required. 4. Apply the same protected opener to JSON, SSE, and download requests. 5. Limit the maximum number of redirects to prevent loops. 6. Add tests using a local redirect server to verify that cross-origin destinations never receive the Authorization header. 7. Document immediate key revocation and rotation procedures for suspected exposure.
Vulnerability Patterns
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • 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
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (37)

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
88% confidence
Finding
The export/download path sends the bearer API key to a URL derived from environment-controlled base_url(). Although a second opt-in variable is required, any environment where both variables are preset, inherited, or manipulated by a wrapper/agent could redirect authenticated requests and expose the API key and exported data to an attacker-controlled host.

Lp3

Medium
Category
MCP Least Privilege
Confidence
93% confidence
Finding
The skill documents capabilities that require environment access, local file writes, shell execution, and network access, yet it declares no permissions or scope restrictions. This creates a transparency and control failure: operators may invoke a skill that can persist credentials locally, call external services, and run CLI commands without an explicit permission boundary.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding
The manifest presents the skill as a narrow readability checker, but the body instructs the agent to perform billing-related operations, account inspection, schedule management, competitor management, exports, monitoring, and multiple unrelated AI analyses. This mismatch is dangerous because users and policy systems may grant trust or execution based on the benign description while the skill actually enables much broader and potentially chargeable or state-changing behavior.

Description-Behavior Mismatch

High
Confidence
97% confidence
Finding
The skill claims it is only for listing readability diagnostics and not for advertising use, yet it explicitly provides keyword generation, negative keyword suggestions, competitor brand terms, and search-term writing guidance. That is a direct scope escalation into ad-targeting assistance, which can bypass user expectations and any policy controls tied to the advertised purpose.

Description-Behavior Mismatch

High
Confidence
96% confidence
Finding
The documented scope expands from readability analysis into broad product operations, monitoring management, exports, alerts, competitor workflows, and operational reporting. This materially changes the trust boundary of the skill: a user invoking a diagnostic tool could trigger account-affecting, persistent, or chargeable workflows far beyond the declared purpose.

Context-Inappropriate Capability

Medium
Confidence
95% confidence
Finding
Allowing the skill to modify account-level confirmation settings via `autoconfirm` is unrelated to readability checking and weakens financial and consent safeguards for future actions. A user may not understand that a one-time content analysis request can change persistent billing-confirmation behavior across later sessions.

Description-Behavior Mismatch

High
Confidence
97% confidence
Finding
The skill metadata claims a narrow readability-diagnosis purpose, but the code implements broad account, billing, collection, monitoring, competitive-intelligence, export, and operational workflows. This scope mismatch is dangerous because users or calling agents may grant credentials and invoke actions under false assumptions about what the skill can do.

Context-Inappropriate Capability

High
Confidence
98% confidence
Finding
The code supports paid review collection, monitoring, competitor tracking, reports, and other intelligence features unrelated to a page-readability checker. In an agent setting, this creates a material risk of over-privileged use, unexpected charges, and collection of data beyond what the user believed they authorized.

Context-Inappropriate Capability

High
Confidence
98% confidence
Finding
The skill can change remote state via PUT/POST/DELETE operations such as autoconfirm, schedules, watches, competitors, alerts, workbench status, and other account/product settings, despite being framed as diagnostic-only. That mismatch can cause silent account changes or paid behavior shifts that a user would not reasonably expect from a readability tool.

Description-Behavior Mismatch

Medium
Confidence
86% confidence
Finding
Local export-to-file functionality is not reflected in the skill's narrow diagnostic description. In a hosted or agent-mediated environment, writing files can unexpectedly persist sensitive review/report data to disk or shared volumes without the user understanding that the skill performs local data export.

Intent-Code Divergence

Medium
Confidence
90% confidence
Finding
The CLI self-describes as an 'Amazon review collection and intelligent analysis CLI,' which conflicts with the manifest's readability-check framing. This inconsistency is a strong indicator that the skill's true operational scope is much broader than disclosed, increasing the risk of misuse by downstream agents and users.

Description-Behavior Mismatch

High
Confidence
96% confidence
Finding
The documentation exposes a much broader Amazon review intelligence and operations platform than the manifest describes, including collection, monitoring, paid analysis, exports, and operational workflows. This capability mismatch is dangerous because users or host platforms may grant trust, permissions, or billing expectations based on a narrow readability-check description while the skill can drive substantially different data access and paid actions.

Context-Inappropriate Capability

High
Confidence
97% confidence
Finding
Documented support for operations audits, product monitoring, watch creation, competitor tracking, and recurring activity goes well beyond what a readability-diagnosis skill needs. In this context, overbroad operational and monitoring features increase the chance of unauthorized paid actions, excessive data processing, and user deception about the true scope of the installed skill.

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
94% confidence
Finding
The workflow instructs the agent to proceed with a paid VOC generation whenever the backend marks the request as `autoConfirmed: true`, without obtaining an immediate, transaction-specific confirmation from the user. Even if the server permits it, this is autonomous execution of a chargeable action and increases the risk of unexpected spending under a narrowly described skill.

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
90% confidence
Finding
The documented flow defaults to running `voc` and then conditionally asks for confirmation only if the response says confirmation is required. That means the agent may initiate a paid or state-changing request first and only ask later in some cases, which weakens user control over billable actions.

Autonomous Decision Making

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

**确认与扣点**
- 报价返回 `autoConfirm: true` 时直接生成,不要再问「要不要」。生成后一句话交代:本次扣了多少、
  还剩几次免确认(或「免费版小额不问」)。策略由服务端决定:免费版小额不问;付费版前几次不问,之后先问。
- 用户说「以后别问了 / 50 以内直接做」→ 运行 `autoconfirm 50`;说「以后每次先问我」→ `autoconfirm off`;
  说「恢复默认」→ `autoconfirm default`。这是唯一需要你代用户设置的东西,设完复述一句当前规则。
Confidence
93% confidence
Finding
The instruction to directly generate results when `autoConfirm: true` formalizes autonomous execution for chargeable operations. In the context of a skill marketed as readability-only, this makes the behavior more dangerous because users are less likely to expect backend-approved spending or report generation.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
**确认与扣点**
- 报价返回 `autoConfirm: true` 时直接生成,不要再问「要不要」。生成后一句话交代:本次扣了多少、
  还剩几次免确认(或「免费版小额不问」)。策略由服务端决定:免费版小额不问;付费版前几次不问,之后先问。
- 用户说「以后别问了 / 50 以内直接做」→ 运行 `autoconfirm 50`;说「以后每次先问我」→ `autoconfirm off`;
  说「恢复默认」→ `autoconfirm default`。这是唯一需要你代用户设置的东西,设完复述一句当前规则。
- 报价需要确认时,只说两个数:这次多少积点、余额多少,然后等用户一个「好」。采集是**固定单价**:直接说「15 积点/页 × 3 页 = 45 积点」,不要说成「预计 / 最多」——价格不会浮动;商品评论不够这么多页时只收实际采到的页数,差额自动退回(`pricingNote` 已写好这句)。不要罗列参数。
Confidence
95% confidence
Finding
Natural-language-triggered `autoconfirm` changes reduce friction for spending-policy modification but also reduce assurance that the user intended a persistent authorization change. Because this setting affects future billable actions, misuse or misunderstanding can cause repeated unauthorized charges.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
**确认与扣点**
- 报价返回 `autoConfirm: true` 时直接生成,不要再问「要不要」。生成后一句话交代:本次扣了多少、
  还剩几次免确认(或「免费版小额不问」)。策略由服务端决定:免费版小额不问;付费版前几次不问,之后先问。
- 用户说「以后别问了 / 50 以内直接做」→ 运行 `autoconfirm 50`;说「以后每次先问我」→ `autoconfirm off`;
  说「恢复默认」→ `autoconfirm default`。这是唯一需要你代用户设置的东西,设完复述一句当前规则。
- 报价需要确认时,只说两个数:这次多少积点、余额多少,然后等用户一个「好」。采集是**固定单价**:直接说「15 积点/页 × 3 页 = 45 积点」,不要说成「预计 / 最多」——价格不会浮动;商品评论不够这么多页时只收实际采到的页数,差额自动退回(`pricingNote` 已写好这句)。不要罗列参数。
Confidence
95% confidence
Finding
Natural-language-triggered `autoconfirm` changes reduce friction for spending-policy modification but also reduce assurance that the user intended a persistent authorization change. Because this setting affects future billable actions, misuse or misunderstanding can cause repeated unauthorized charges.

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
91% confidence
Finding
The reference explicitly allows `analyze` to execute paid analysis when a server-side `autoConfirm` rule is hit, without fresh user confirmation in the current interaction. In an agent setting, this creates autonomous action risk because the agent may trigger billable operations based only on prior account settings or remote policy, reducing user awareness and consent for cost-incurring actions.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
| `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 | 否 |
| `alerts` | alerts(`--mark-read` 时 alerts/read) | 否 |
Confidence
95% confidence
Finding
The `autoconfirm` command changes account-level confirmation behavior, allowing future paid actions to proceed with reduced or no user interaction. In an agent workflow, exposing or using this setting can let the agent weaken safety controls and enable unintended spending across later requests, not just the current task.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
| `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 | 否 |
| `alerts` | alerts(`--mark-read` 时 alerts/read) | 否 |
Confidence
95% confidence
Finding
The `autoconfirm` command changes account-level confirmation behavior, allowing future paid actions to proceed with reduced or no user interaction. In an agent workflow, exposing or using this setting can let the agent weaken safety controls and enable unintended spending across later requests, not just the current task.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
voc B0... --site amz_us 是完整 VOC 的入口:先取得报价,已有足够评论时使用当前分析价格;
数据不足时合并采集与分析费用。符合服务端免确认规则且总额不超过上限时可能直接生成,
返回 autoConfirmed。否则返回 confirmationRequired,取得用户同意后追加 --confirm,
自动完成必要采集、等待、分析和归档。只读询价应使用 quote / collect 报价入口。

`collect --asin B0... --site amz_us --pages 3` 只返回报价;确认后追加
Confidence
94% confidence
Finding
This section states that `voc` may directly generate a report and combine collection plus analysis costs when server-side auto-confirm rules match. That permits the agent to trigger multi-step paid operations autonomously, including collection, waiting, analysis, and archival, which is risky because it can incur charges and perform side effects without explicit in-session approval.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
先调用 `quote --type ...`。报价字段:
`type, basePrice, price, sampledReviews, totalReviews, balance, sufficient`,
另有(1.4.5):`autoConfirm`(true = 服务端首次体验策略允许免确认直接生成)、
`autoConfirmMaxCredits`(免确认单次上限,采集 + 报告合计)、`autoConfirmRemaining`(还剩几次)、
`autoConfirmNote`、`webUrl`(该产品的网页报告页)。`sampleCap` / `degraded` 表示 Free 样本封顶与轻量模型。
`voc` / `analyze` 在 autoConfirm 命中时会直接生成,返回 `autoConfirmed: true` 与 `autoConfirmNote`,
Confidence
90% confidence
Finding
The quoted API fields include `autoConfirm`, signaling to the agent that immediate execution without another confirmation is acceptable. In a security context, this is dangerous because the agent may interpret server-provided policy as sufficient authority to spend credits or launch analysis, bypassing a principle of explicit user intent per action.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
先调用 `quote --type ...`。报价字段:
`type, basePrice, price, sampledReviews, totalReviews, balance, sufficient`,
另有(1.4.5):`autoConfirm`(true = 服务端首次体验策略允许免确认直接生成)、
`autoConfirmMaxCredits`(免确认单次上限,采集 + 报告合计)、`autoConfirmRemaining`(还剩几次)、
`autoConfirmNote`、`webUrl`(该产品的网页报告页)。`sampleCap` / `degraded` 表示 Free 样本封顶与轻量模型。
`voc` / `analyze` 在 autoConfirm 命中时会直接生成,返回 `autoConfirmed: true` 与 `autoConfirmNote`,
并附 `web.report` / `web.product` 网页链接。
Confidence
93% confidence
Finding
This line documents `voc`/`analyze` directly generating output when `autoConfirm` is hit. In an agent-integrated skill, that creates a true autonomous-decision vulnerability because external service state can cause immediate billable execution and data processing without the agent collecting explicit runtime consent.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
先调用 `quote --type ...`。报价字段:
`type, basePrice, price, sampledReviews, totalReviews, balance, sufficient`,
另有(1.4.5):`autoConfirm`(true = 服务端首次体验策略允许免确认直接生成)、
`autoConfirmMaxCredits`(免确认单次上限,采集 + 报告合计)、`autoConfirmRemaining`(还剩几次)、
`autoConfirmNote`、`webUrl`(该产品的网页报告页)。`sampleCap` / `degraded` 表示 Free 样本封顶与轻量模型。
`voc` / `analyze` 在 autoConfirm 命中时会直接生成,返回 `autoConfirmed: true` 与 `autoConfirmNote`,
并附 `web.report` / `web.product` 网页链接。
Confidence
93% confidence
Finding
This line documents `voc`/`analyze` directly generating output when `autoConfirm` is hit. In an agent-integrated skill, that creates a true autonomous-decision vulnerability because external service state can cause immediate billable execution and data processing without the agent collecting explicit runtime consent.

Static analysis

No suspicious patterns detected.