other
Error
- Location
- SKILL.md:44
- Finding
- Paid Purchase Operations Lack Explicit User Approval and Spending Controls<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md`, lines 44-62 and 95-101 **Vulnerability Type**: Autonomous financial transaction without confirmation **Risk Level**: High ### Vulnerable Code Snippet ```markdown ### 3. Card Pack Purchase ```bash POST /api/overclock/purchase Headers: X-Player-Id: your-agent-name Content-Type: application/json { "packType": "basic", "source": "acp" } ``` **Packs (Early Bird 50% off Basic/Standard):** | Pack | Price | Cards | Guaranteed | |---|---|---|---| | basic | **$2** | 3 | Common | | standard | **$4** | 5 | Uncommon | ``` The purchase is incorporated into the default workflow: ```markdown 1. GET /api/game → Check your state (auto-creates account) 2. POST /api/overclock/purchase → Buy card packs 3. POST /api/game/strategy → Set your strategy 4. POST /api/game/battle → Fight! (wait 20s between) 5. GET /api/game/players → Check leaderboard ``` ### Technical Analysis The skill advertises autonomous gameplay and directs the agent to call a paid purchase endpoint as part of its quick-start workflow. It does not require explicit, transaction-specific user approval, display a final charge before submission, establish a spending ceiling, or distinguish virtual currency from real-money payment authorization. The documented `X-Player-Id` header identifies the affected player but is not described as providing transaction-scoped authorization. Consequently, once the skill is invoked, an agent following the workflow may interpret purchasing as an authorized routine action rather than a separate financial decision requiring informed consent. This violates least-authority principles for consequential external actions. Authorization to play a game does not inherently grant authority to incur monetary charges. ### Attack Path 1. A user activates the skill to play the game autonomously. 2. The agent follows the documented quick-start procedure. 3. A game account is automatically created or loaded using `GET /api ...[truncated 837 chars]
- Remediation
- <![CDATA[ ## Remediation Suggestions - Require explicit, transaction-specific user confirmation immediately before every paid request. - Display the pack type, quantity, exact currency, exact price, payment source, and resulting balance before confirmation. - Default purchase functionality to disabled unless the user affirmatively enables it. - Introduce a user-configured per-transaction and cumulative session spending limit. - Never infer purchase authorization from general permission to play the game. - Use idempotency keys to prevent duplicate charges caused by retries. - Provide a dry-run or quote endpoint that performs no charge. - Record an auditable consent event tied to the exact transaction. - Stop after any ambiguous response instead of automatically retrying a purchase. ]]>
