T09 · Insecure Skill Coding Practices
- Location
SKILL.md:87- Finding
Sensitive Wallet Results Can Be Redirected to Arbitrary Destinations
- Content
View full analysis
` OR - `resultType=json` and `result=` - On failure: - `error=` Template mode (no bridge, good for messaging apps): - If `redirect_url` contains `{{...}}`, placeholders are replaced and no query params are appended. - Placeholders: - `{{result}}`: URL-encoded result string (or URL-encoded `JSON.stringify(result)`) - `{{result_raw}}`: unencoded result string (or `JSON.stringify(result)`) - `{{resultType}}`: `string` or `json` - `{{error}}`: URL-encoded error message - `{{error_raw}}`: unencoded error message Implementation note for agents: - Consider generating a “compose draft” deep link into your chat with the user and using that as `redirect_url` so, after approval, the user lands in a pre-filled message back to you containing the result. ``` ### Technical Analysis The skill permits the caller to choose a `redirect_url` to which wallet operation results are transmitted. These results may include transaction hashes, message signatures, typed-data signatures, structured JSON responses, or error information. The documented design does not require: - An allowlist of trusted redirect origins. - HTTPS for redirect destinations. - Origin or destination validation. - Explicit disclosure of the final result recipient. - User confirmation before transmitting a signature. - Separation between ordinary transaction identifiers and authorization-bearing cryptographic signat ...[truncated 1914 chars]- Remediation
View remediation
