Back to skill

Security audit

Amazon 卖家行动计划

Security checks for vulnerabilities and agentic risk

Overview

This skill is not clearly malicious, but it exposes broader paid, persistent, and account-mutating ARI capabilities than its narrow seller action-plan description suggests.

Install only if you are comfortable granting this skill access to your ARI account and review data, and review the auto-confirm, monitoring, competitor, export, and workflow settings before use. For least surprise, set paid actions to ask every time and avoid using this package for ad keyword decisions or broader account operations unless you intend those actions.

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

T05 · Unauthorized Access and Privilege Escalation

Warning
Location
scripts/ari.py:1205
Finding
Specialized Workflow Restrictions Can Be Overridden Through CLI Arguments## Vulnerability Details **File Location**: `scripts/ari.py`, lines 1205-1222 **Vulnerability Type**: Specialized workflow scope bypass **Risk Level**: Medium The Skill declares that its specialized operations entry point is restricted to the fixed `audit/action` workflow and must not accept arbitrary workflow or focus values. However, command-line values take precedence over the immutable defaults: ```python def operation_payload(args): defaults = operation_defaults() workflow = (getattr(args, "workflow", None) or defaults.get("workflow") or "").strip() focus = (getattr(args, "focus", None) or defaults.get("focus") or "").strip() if not workflow or not focus: return None, error_obj( "ARI_VALIDATION_ERROR", 0, "运营工作流缺少 workflow/focus", "通用 Skill 请显式传 --workflow 和 --focus;专属 Skill 会内置固定值。") request_id = (getattr(args, "request_id", None) or "").strip() or str(uuid.uuid4()) return { "requestId": request_id, "workflow": workflow, "focus": focus, "asin": args.asin.upper(), "site": args.site or defaults.get("defaultSite") or "amz_us", "competitorAsin": (getattr(args, "competitor", None) or "").upper(), }, None ``` The parser also exposes `--workflow` and `--focus` for specialized operations commands: ```python def add_operation_args(parser, confirm=False): parser.add_argument("--asin", required=True) parser.add_argument("--site", default="amz_us", choices=SITES) parser.add_argument("--workflow") parser.add_argument("--focus") parser.add_argument("--competitor") parser.add_argument("--request-id", default="") ``` ### Technical Analysis The project configuration fixes the permitted workflow to `audit` and the focus to `action`: ```json { "workflow": "audit", "focus": "action", "outputTemplate": "ops_audit" } ``` Nevertheless, `operation_payl ...[truncated 2409 chars]
Remediation
## Remediation Suggestions 1. Enforce package defaults for specialized builds: ```python def operation_payload(args): defaults = operation_defaults() workflow = str(defaults.get("workflow") or "").strip() focus = str(defaults.get("focus") or "").strip() if not workflow or not focus: return None, error_obj( "ARI_VALIDATION_ERROR", 0, "This specialized Skill is missing fixed workflow settings." ) if getattr(args, "workflow", None) or getattr(args, "focus", None): return None, error_obj( "ARI_SPECIALIZED_WORKFLOW_OVERRIDE_BLOCKED", 0, "This Skill does not permit workflow or focus overrides." ) ``` 2. Do not register `--workflow` or `--focus` for specialized Skill distributions. Maintain a separate parser or build flag for the generic CLI if generic workflow selection is required elsewhere. 3. Validate all package-level constraints before making capability, quote, or run requests: - Require `workflow == "audit"`. - Require `focus == "action"`. - Require the expected output template to be `ops_audit`. - Reject mismatches locally before loading the API key where practical. 4. Include the expected Skill channel or template identifier in the quote and run contract, and have the server verify that the selected workflow is valid for that channel. 5. Add regression tests proving that: - Omitting workflow arguments produces `audit/action`. - Passing any other workflow or focus is rejected. - A server-advertised but package-disallowed combination remains rejected. - The run request exactly matches the fixed package configuration and the previously quoted request.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (80)

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding
The manifest presents the skill as a narrow single-ASIN action-plan tool, but the documented behavior covers a much broader operational surface: billing-sensitive report generation, recurring monitoring, competitor management, exports, account/profile access, and other analysis modes. This mismatch can mislead users and hosting platforms into granting trust or permissions under false assumptions, resulting in unexpected account changes, charges, and data handling.

Ae1

High
Category
analysis-evasion
Content
- CLI:本 Skill 目录下的 `scripts/ari.py`。在 Skill 根目录执行,例如
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Ae1

High
Category
analysis-evasion
Content
- CLI:本 Skill 目录下的 `scripts/ari.py`。在 Skill 根目录执行,例如
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Ae1

High
Category
analysis-evasion
Content
- CLI:本 Skill 目录下的 `scripts/ari.py`。在 Skill 根目录执行,例如
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Ae1

High
Category
analysis-evasion
Content
- CLI:本 Skill 目录下的 `scripts/ari.py`。在 Skill 根目录执行,例如
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Ae1

High
Category
analysis-evasion
Content
- CLI:本 Skill 目录下的 `scripts/ari.py`。在 Skill 根目录执行,例如
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Ae1

High
Category
analysis-evasion
Content
- CLI:本 Skill 目录下的 `scripts/ari.py`。在 Skill 根目录执行,例如
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Ae1

High
Category
analysis-evasion
Content
- CLI:本 Skill 目录下的 `scripts/ari.py`。在 Skill 根目录执行,例如
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Ae1

High
Category
analysis-evasion
Content
- CLI:本 Skill 目录下的 `scripts/ari.py`。在 Skill 根目录执行,例如
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Ae1

High
Category
analysis-evasion
Content
- CLI:本 Skill 目录下的 `scripts/ari.py`。在 Skill 根目录执行,例如
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Ae1

High
Category
analysis-evasion
Content
- CLI:本 Skill 目录下的 `scripts/ari.py`。在 Skill 根目录执行,例如
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Ae1

High
Category
analysis-evasion
Content
- CLI:本 Skill 目录下的 `scripts/ari.py`。在 Skill 根目录执行,例如
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Ae1

High
Category
analysis-evasion
Content
- CLI:本 Skill 目录下的 `scripts/ari.py`。在 Skill 根目录执行,例如
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Description-Behavior Mismatch

High
Confidence
95% confidence
Finding
The skill claims it is not for ad-related decisions, yet it explicitly supports keyword-analysis workflows that generate advertising-relevant outputs such as search terms and negative keywords. This is a clear scope-deception issue: users may invoke the skill believing it cannot perform ad-adjacent actions when it actually can, increasing the risk of unintended spend-driving or business-impacting outputs.

Context-Inappropriate Capability

High
Confidence
97% confidence
Finding
These commands can change persistent collection schedules and competitor subscriptions, which are ongoing account mutations unrelated to generating a one-off single-ASIN plan. In the stated skill context this is especially risky because users may invoke it expecting read-only planning, while it can create recurring background actions and future charges.

Context-Inappropriate Capability

High
Confidence
96% confidence
Finding
Watch creation, pause/resume, delete, event, and digest management expose durable monitoring functionality beyond the declared single-ASIN planning purpose. This broadens the effective authority of the skill and can lead to stealthy long-lived monitoring changes not expected from the metadata.

Context-Inappropriate Capability

High
Confidence
95% confidence
Finding
Workbench status mutation and AI reply-advice generation go beyond producing a single-ASIN action plan and can alter workflow state or trigger additional paid AI actions. In this skill context, hidden access to these capabilities increases the risk of agents making operational decisions or purchases outside the user’s expected scope.

Description-Behavior Mismatch

High
Confidence
98% confidence
Finding
The skill metadata promises a narrow single-ASIN action-planning function, but the CLI exposes a much broader operational surface including account, monitoring, exports, billing-related flows, and persistent mutations. In an agent setting, this scope mismatch is dangerous because the orchestrator or user may grant trust based on the advertised purpose while the implementation can perform materially different actions.

Description-Behavior Mismatch

High
Confidence
98% confidence
Finding
The guide instructs the agent to handle capabilities well beyond the manifest’s stated single-ASIN action-planning scope, including competitor comparison, exports, alerts, and monitoring. Scope mismatch is dangerous because an agent may invoke higher-privilege or higher-cost workflows a user did not intend, undermining least-privilege and informed consent.

Description-Behavior Mismatch

High
Confidence
99% confidence
Finding
This section advertises persistent monitoring, watch creation, benchmark, leaderboard, exports, and other workflows not reflected in the declared purpose. In a tool that uses an API key and can trigger paid operations, broad hidden capability expansion increases the risk of unauthorized monitoring, unintended data access, and surprise charges.

Lp3

Medium
Category
MCP Least Privilege
Confidence
91% confidence
Finding
The skill documents shell, network, environment, and file-writing behavior but does not declare an explicit tool scope such as permissions or allowed-tools. That increases the blast radius if the skill is invoked in a host that grants broad defaults, because it can access local credentials, write files, and make network calls without a manifest-level least-privilege boundary.

Vague Triggers

Medium
Confidence
92% confidence
Finding
The skill says users only need to express a product and goal, with examples like '简要说说主要问题和趋势' and broad phrases such as 'seller action plan' or '下一步待办'. These are common analytic requests and the file does not provide negative examples or clear boundaries for when this skill should activate instead of other related skills.

Missing User Warnings

Medium
Confidence
89% confidence
Finding
The skill instructs users to obtain and save an API key locally but does not provide a user-facing warning about local credential storage, file location, machine trust, or rotation. On shared or unmanaged systems, silently persisted credentials can be exposed to other users, malware, backups, or logs, leading to unauthorized API use and billing abuse.

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
93% confidence
Finding
This section instructs the agent to begin with a paid-capable VOC flow and to accept server-side auto-confirmed charges without obtaining transaction-specific user approval at execution time. Even if the backend policy allows it, the skill behavior reduces meaningful consent and can produce unexpected charges for users who only asked for analysis.

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
93% confidence
Finding
The skill says that once confirmationRequired is false or autoConfirmed occurs, it should deliver the generated report without first confirming the spend with the user. This is dangerous because it normalizes autonomous financial decisions by the agent and can cause surprise billing or lock users into post-hoc acceptance of a completed charge.

Static analysis

No suspicious patterns detected.