T09 · Insecure Skill Coding Practices
- Location
scripts/ava.mjs:49- Finding
Bearer Token Can Be Forwarded to an Arbitrary Configured Endpoint
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill is clearly meant for Ava DeFi workflows, but its packaged CLI exposes broader and less clearly bounded financial authority than the instructions promise.
Install only if you are comfortable reviewing a live-finance skill carefully. Use the dedicated two-phase lend flow, do not set AVA_ENABLE_LIVE unless you fully understand the effect, avoid the generic call command for state-changing tools, keep the stored bearer token protected, use the official API endpoint unless intentionally developing locally, and prefer pinned or verified installer versions instead of unpinned npx commands.
scripts/ava.mjs:49Bearer Token Can Be Forwarded to an Arbitrary Configured Endpoint
scripts/ava.mjs:246Testnet-Only Approval Command Can Request Mainnet Execution
scripts/ava.mjs:275Generic Authenticated Tool Dispatcher Bypasses Command-Specific Safety Controls
SKILL.md:70Documentation Executes an Unpinned Third-Party Package Through npx
Referenced artifact was not completely inspected
node scripts/ava.mjs health
Referenced artifact was not completely inspected
node scripts/ava.mjs health
Referenced artifact was not completely inspected
node scripts/ava.mjs health
Referenced artifact was not completely inspected
node scripts/ava.mjs health
Referenced artifact was not completely inspected
node scripts/ava.mjs health
Referenced artifact was not completely inspected
node scripts/ava.mjs health
Referenced artifact was not completely inspected
node scripts/ava.mjs health
Referenced artifact was not completely inspected
node scripts/ava.mjs health
Referenced artifact was not completely inspected
node scripts/ava.mjs health
The file comments and usage text say approve is testnet-only, but cmdApprove will submit mode: "mainnet" whenever AVA_ENABLE_LIVE=true. In a money-moving context, misleading operators about network scope can cause accidental live approvals and real financial loss, especially when downstream agents rely on comments/help text as safety signals.
The README instructs users to run an unpinned package via npx skills, which fetches and executes code at install time without locking to a reviewed version. In a financial/agent-wallet context, a compromised upstream package, typosquat, or malicious newly published version could lead to arbitrary code execution on the user's machine and potentially tamper with trading or wallet-related workflows.
The command npx @getava-xyz/connect executes the latest published package version by default, creating a supply-chain risk if the package or publisher account is compromised. Because this skill is explicitly for live USDC lending and DeFi operations, compromise of the bootstrap/connect tool could redirect API endpoints, exfiltrate secrets, alter transaction parameters, or mislead users during a high-value workflow.
The skill exposes network and environment-related capabilities but does not declare any explicit tool scope or allowed-tools boundary. In a finance-oriented skill that can connect to live MCP endpoints and handle bearer-token-based sessions, this weakens least-privilege controls and increases the chance that an agent can invoke unintended capabilities or operate with broader access than the user expects.
Referencing an MCP bootstrap command in the manifest without version pinning embeds a mutable dependency into the skill's advertised setup path. Since this skill enables agent-mediated movement of real funds, any compromise in that dependency chain can have outsized consequences compared to ordinary developer tooling.
Using npx @getava-xyz/connect without a pinned version causes execution of whatever package version is current at install time, creating a supply-chain risk. Because this skill is specifically designed to configure financial MCP access and bearer-token connectivity, a compromised or malicious upstream package could alter MCP configuration, exfiltrate tokens, or redirect users to attacker-controlled infrastructure.
The trigger phrases are broad and include terms like 'trading', 'finance tools', and 'agentic finance', which can cause the skill to activate in loosely related contexts. Because this skill can lead to live financial actions, over-broad activation increases the risk of inappropriate invocation, user confusion, or an agent steering into money-moving workflows when the user did not clearly intend that.
This unpinned npx invocation repeats the same supply-chain exposure in the body of the skill, increasing the likelihood users will execute a mutable package. In the context of a DeFi automation skill, compromise of the bootstrap package could directly affect live-money workflows, session handling, and trust boundaries around remote MCP setup.
The script exposes swap/trade-style copilot and approval flows (turn, approve) even though the skill metadata emphasizes lending-focused behavior. This scope mismatch is dangerous because users, agents, or policy layers may trust the manifest and permit the skill under narrower assumptions, while the code enables materially different financial actions.
The generic call command allows arbitrary MCP tool invocation with attacker-supplied JSON, bypassing the CLI's safer, opinionated flows such as two-phase preview and explicit command-specific guardrails. In a financial skill handling live capital, this materially expands the reachable attack surface to any server-exposed tool, including future or undocumented capabilities not reflected in the manifest.
npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.
npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.