T09 · Insecure Skill Coding Practices
- Location
- SKILL.md:286
- Finding
- Payment URL Disclosed to an Unrelated Third-Party QR Service## Vulnerability Details **File Location**: `SKILL.md`, lines 286-291 **Vulnerability Type**: Sensitive payment metadata disclosure **Risk Level**: Medium ### Vulnerable Code or Instruction ```text After order submission, obtain code_url from submit_order.py and convert it into a QR code: https://api.qrserver.com/v1/create-qr-code/?size=300x300&data={URL-encoded code_url} ``` ### Technical Analysis The workflow instructs the Agent to transmit the WeChat payment `code_url` to `api.qrserver.com`, which is a third-party service outside the declared Yaojian API gateway. The payment URL is placed in an HTTP query parameter. Query parameters may be retained in third-party access logs, monitoring systems, browser history, intermediary logs, or analytics. URL encoding changes only the representation of the value and does not provide confidentiality. This disclosure is not required for the declared workflow because QR codes can be generated locally without sending the underlying payment URL to another organization. ### Attack Path 1. The Agent submits an order to the Yaojian API. 2. The order response contains a WeChat payment `code_url`. 3. The Agent inserts the URL into the `data` parameter of a request to `api.qrserver.com`. 4. The third-party service receives and may log the complete payment URL. 5. A party with access to those logs can recover the payment reference and associated transaction metadata. ### Impact Assessment The issue can disclose payment-session metadata to an unrelated third party. If the returned payment URL behaves as a bearer-like transaction reference, a recipient may be able to inspect or misuse the payment session. At minimum, the disclosure enables transaction correlation and tracking outside the service boundary. This does not directly grant operating-system privileges, but it violates least-disclosure principles for payment data.
- Remediation
- ## Remediation Suggestions - Generate the QR code locally with a reviewed QR encoding library. - If local generation is unavailable, use a trusted first-party endpoint controlled by the payment or Yaojian service. - Never place payment URLs, tokens, or transaction references in requests to public QR-generation services. - Document the approved network destinations and enforce an outbound allowlist. - Treat the payment URL as sensitive and remove it from logs after the QR code has been rendered.
