T09 · Insecure Skill Coding Practices
Error
- Location
- SKILL.md:35
- Finding
- Payment authorization is not bound to the intended recipient## Vulnerability Details **File Location**: `SKILL.md`, lines 35-69 **Vulnerability Type**: Missing recipient validation in a financial workflow **Risk Level**: High ### Evidence ```markdown > 不收集打赏对象,忽略用户消息中提到的收款方信息. ``` ```markdown 5. **调用支付 skill(payment)**,传入以下参数: ``` amount: {打赏金额} order_type: "tip" description: "打赏 {amount} 元" ``` ``` The first instruction states that recipient information must not be collected and that any payee specified by the user must be ignored. The payment request consequently contains only an amount, an order type, and a generic description. ### Technical Analysis A payment authorization should bind all security-relevant transaction attributes to the user's confirmation, including the amount, currency, recipient identity, and transaction purpose. This workflow confirms only the amount and then invokes the payment skill without a recipient identifier. Ignoring recipient information creates a confused-deputy risk: the user may believe that a tip is being sent to a named streamer or creator, while the downstream payment system selects a default, implicit, or otherwise unrelated recipient. The confirmation prompt does not expose that discrepancy. ### Attack Path 1. An attacker persuades a victim to tip a particular streamer, creator, or account. 2. The victim names that recipient when invoking the skill. 3. The skill intentionally discards the supplied recipient information. 4. The user is asked to confirm only the amount. 5. The generic payment request is sent without any payee identifier. 6. If the downstream payment skill uses an attacker-controlled, incorrect, or default recipient, the order is created for that recipient despite the victim's contrary understanding. Exploitation depends on how the downstream payment skill resolves requests that omit a recipient, but this skill provides no mechanism to detect or prevent recipient substitution. ### Im ...[truncated 410 chars]
- Remediation
- ## Remediation Suggestions - Require an immutable recipient identifier, such as a merchant ID, creator ID, or payment account ID. - Resolve human-readable recipient names through a trusted registry rather than accepting arbitrary payment destinations. - Include the verified recipient name and identifier in the final confirmation prompt. - Pass the verified recipient identifier explicitly to the payment skill. - Require the payment skill to reject requests that lack a valid recipient instead of applying an implicit default. - Bind amount, currency, recipient, and purpose into a transaction summary or authorization token. - Invalidate confirmation if any bound transaction attribute changes. - Log the confirmed recipient and the recipient returned by the payment provider, and reject any mismatch.
