T09 · Insecure Skill Coding Practices
- Location
src/client.ts:360- Finding
Documented Model-Invocation Protection Is Not Enforced
- Content
View full analysis
{ return this.request( 'POST', `/api/wallets/${walletId}/send`, request ); } ``` The Skill documentation makes the following security claims: ```markdown Send crypto transactions (only if `disableModelInvocation: false` is explicitly overridden by user) ``` ```json "disableModelInvocation": true, "noModelAutonomy": true ``` ### Technical Analysis The documented `disableModelInvocation` option is only metadata in `SKILL.md`. It is not part of `AgentsBankConfig`, is not read by the client, and is not checked before a transaction is submitted. The exported `send` method immediately submits a transfer request. The same absence of approval enforcement applies to other write-capable methods, including `sendSafe`, `sendMultiple`, `createWallet`, and `register`. Consequently, the implementation does not provide the default-deny financial-operation boundary promised by the Skill definition. Any caller with access to an authenticated client can invoke the write methods without presenting proof of explicit user approval. ### Attack Path 1. A user loads the Skill and authenticates the SDK. 2. The user or agent relies on the documentation stating that autonomous transfers are disabled by default. 3. An agent, compromised workflow, or untrusted instruction invokes `send` with an attacker-controlled recipient address. 4. The SDK performs no user-confirmation or `disableModelInvocation` check. 5. The SDK submits the transaction directly to `/api/wallets/{walletId}/send`. 6. The custodial s ...[truncated 506 chars]- Remediation
View remediation
