T09 · Insecure Skill Coding Practices
- Location
scripts/approve-tx.ts:27- Finding
Blind Approval of an Unverified Safe Transaction Hash
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This Safe wallet skill is mostly purpose-aligned, but it can sign or execute high-impact blockchain actions with weak review and endpoint safeguards.
Review this skill carefully before installing. Use it only with low-value test Safes or low-privilege signers until approval signing verifies transaction details, endpoint validation is added, dependencies are updated, and signing/execution requires an explicit human review of chain, Safe, nonce, recipient, value, calldata, and service host.
scripts/approve-tx.ts:27Blind Approval of an Unverified Safe Transaction Hash
scripts/safe_lib.ts:76Sensitive API Credentials and Authorization Signatures Can Be Sent to Unvalidated Custom Endpoints
Dependency has known vulnerabilities (CVEs). Using packages with unpatched security flaws exposes the environment to known exploits.
This skill declares vitest v4, and the provided analysis indicates resolution to vitest 4.0.18, which is affected by critical issues including arbitrary file read and possible code execution when the Vitest UI server is exposed. Although vitest is a devDependency, exploitation can still affect developer workstations, CI runners, or test environments; in a multisig-wallet skill, compromise of those environments is especially dangerous because they may hold RPC credentials, private keys, API tokens, or transaction data.
The declared description promises a broad Safe multisig operational skill implemented with the Safe{Core} SDK in strict TypeScript. The supplied code is instead a small shell utility whose sole purpose is to derive a Safe Transaction Service API base URL for a given chain and fetch its /v1/about/ metadata endpoint. While this is loosely related to Safe infrastructure and could support troubleshooting or service discovery, it does not implement any of the primary declared capabilities such as Safe creation, transaction proposal/confirmation/execution, nonce inspection, or pending transaction listing. The implementation language and mechanism also differ materially from the stated TypeScript SDK-based skill.
The description promises a full Safe multisig transaction skill centered on Safe{Core} SDK capabilities. However, the provided code chunk is only a test suite for utility helpers. The tested behaviors are mostly configuration and validation helpers: mapping chain slugs to Safe transaction service URLs and chain IDs, resolving RPC URLs, requiring a signer private key from env vars, validating addresses and transaction hashes, warning about missing API keys, performing generic fetch-with-timeout JSON requests, and constructing CLI commands/options. These are supporting utilities, not the declared primary functionality. Since the actual code shown does not implement the core Safe operations named in the description, the description does not accurately represent this code chunk.
There is a clear mismatch between the declared purpose and the provided code. The description claims operational Safe multisig capabilities via Safe{Core} SDK, but the code chunk is merely a Vitest configuration file for running tests. This is unrelated support tooling and does not demonstrate any of the claimed Safe-related behavior. Therefore the supplied code does not accurately represent the declared skill functionality.
Referenced artifact was not completely inspected
| `safe-info.ts` | Fetch Safe info (owners/threshold/nonce) |
Referenced artifact was not completely inspected
| `safe-info.ts` | Fetch Safe info (owners/threshold/nonce) |
Referenced artifact was not completely inspected
| `list-pending.ts` | List pending (queued) multisig transactions |
Referenced artifact was not completely inspected
| `list-pending.ts` | List pending (queued) multisig transactions |
Referenced artifact was not completely inspected
| `safe_txs_list.ts` | List all multisig transactions (queued + executed) |
Referenced artifact was not completely inspected
| `propose-tx.ts` | Create + propose a multisig tx |
Referenced artifact was not completely inspected
| `propose-tx.ts` | Create + propose a multisig tx |
Dependency has known vulnerabilities (CVEs). Using packages with unpatched security flaws exposes the environment to known exploits.
Dependency has known vulnerabilities (CVEs). Using packages with unpatched security flaws exposes the environment to known exploits.
Dependency has known vulnerabilities (CVEs). Using packages with unpatched security flaws exposes the environment to known exploits.
Dependency has known vulnerabilities (CVEs). Using packages with unpatched security flaws exposes the environment to known exploits.
Dependency has known vulnerabilities (CVEs). Using packages with unpatched security flaws exposes the environment to known exploits.
Dependency has known vulnerabilities (CVEs). Using packages with unpatched security flaws exposes the environment to known exploits.
Dependency has known vulnerabilities (CVEs). Using packages with unpatched security flaws exposes the environment to known exploits.
The skill documents commands that use shell execution, environment variables, and network access, but it does not declare any explicit tool scope or permissions boundaries. In an agent setting, missing scope makes it easier for the runtime to grant broader capabilities than necessary, increasing the chance of unintended command execution, secret exposure, or live blockchain interaction.
Using npx tsx without pinning an exact package version introduces supply-chain risk because dependency resolution may pull a newer or compromised package at runtime. In a skill that handles transaction signing and environment-based secrets, executing an unexpected package version could expose private keys or alter transaction behavior.
Using npx tsx without pinning an exact package version introduces supply-chain risk because dependency resolution may pull a newer or compromised package at runtime. In a skill that handles transaction signing and environment-based secrets, executing an unexpected package version could expose private keys or alter transaction behavior.
Using npx tsx without pinning an exact package version introduces supply-chain risk because dependency resolution may pull a newer or compromised package at runtime. In a skill that handles transaction signing and environment-based secrets, executing an unexpected package version could expose private keys or alter transaction behavior.
Using npx tsx without pinning an exact package version introduces supply-chain risk because dependency resolution may pull a newer or compromised package at runtime. In a skill that handles transaction signing and environment-based secrets, executing an unexpected package version could expose private keys or alter transaction behavior.
Using npx tsx without pinning an exact package version introduces supply-chain risk because dependency resolution may pull a newer or compromised package at runtime. In a skill that handles transaction signing and environment-based secrets, executing an unexpected package version could expose private keys or alter transaction behavior.
Detected: suspicious.env_credential_access