Back to skill

Security audit

Morpho Earn - earn safe yield on your USDC on Base

Security checks for vulnerabilities and agentic risk

Overview

This skill is for DeFi yield automation, but it can create recurring real-money wallet transactions with weak safeguards.

Install only with a dedicated low-balance hot wallet. Do not enable auto-compound or HEARTBEAT.md automation until there are explicit transaction caps, confirmation prompts, and stricter Odos transaction validation. Review the configured wallet address before every write operation, avoid broad allowances, and prefer pinned dependencies and safer secret handling.

Vulnerability Patterns
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
Findings (6)

T09 · Insecure Skill Coding Practices

Error
Location
scripts/compound.ts:198
Finding

Untrusted Odos API Transactions Are Signed Without Sufficient Validation

Content
View full analysis
{ const response = await rateLimitedFetch('https://api.odos.xyz/sor/assemble', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ userAddr: userAddress, pathId, simulate: false, }), }); if (!response.ok) { console.log(` ⚠️ Odos assemble failed: ${response.status}`); return null; } const data = await response.json() as OdosAssembleResponse; if (!data.transaction?.to || !data.transaction?.data) { console.log(` ⚠️ Invalid Odos assemble response`); return null; } return data; } ``` ```ts const assembled = await assembleOdosTransaction(quote.pathId, account.address); if (!assembled) { console.log(` ⚠️ Could not assemble transaction, skipping ${token.symbol}\n`); continue; } const gasEstimate = BigInt(assembled.transaction.gas); const gasWithBuffer = gasEstimate + (gasEstimate * 50n / 100n); const nonce = await getFreshNonce(publicClient, account.address); const swapHash = await walletClient.sendTransaction({ to: assembled.transaction.to as Address, data: assembled.transaction.data as Hex, value: BigInt(assembled.transaction.value), gas: gasWithBuffer, nonce, }); ``` ### Technical Analysis The Odos assembly API controls the transaction destination, calldata, native token value, and gas estimate. Validation only verifies that the `to` and `data` properties exist. The implementation does not: - Require `transaction.to` to equal the known `ODOS_ROUTER`. - Decode and validate the returned calldata. - Verify the input token, input amount, output token, recip ...[truncated 1499 chars]
Remediation
View remediation

T05 · Unauthorized Access and Privilege Escalation

Error
Location
scripts/compound.ts:436
Finding

Auto-Compound Deposits the Wallet's Entire USDC Balance

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
scripts/setup.ts:207
Finding

Setup Defaults to Persistent Unattended Real-Fund Execution

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/config.ts:299
Finding

1Password Configuration Can Inject Shell Commands

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/setup.ts:163
Finding

Environment Wallet Configuration Uses Inconsistent Property Names

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/deposit.ts:96
Finding

Transaction Previews Do Not Require User Confirmation

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (126)

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding

Token swaps via Odos and corresponding ERC-20 approvals introduce materially different risk than simple vault deposits because they depend on third-party routing logic, external quote/assembly APIs, and broader token permissions. In a wallet-managing skill, undeclared swap behavior can lead to unintended approvals or asset movement if users assume the skill only touches USDC and the vault.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

Token swaps via Odos and corresponding ERC-20 approvals introduce materially different risk than simple vault deposits because they depend on third-party routing logic, external quote/assembly APIs, and broader token permissions. In a wallet-managing skill, undeclared swap behavior can lead to unintended approvals or asset movement if users assume the skill only touches USDC and the vault.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

Token swaps via Odos and corresponding ERC-20 approvals introduce materially different risk than simple vault deposits because they depend on third-party routing logic, external quote/assembly APIs, and broader token permissions. In a wallet-managing skill, undeclared swap behavior can lead to unintended approvals or asset movement if users assume the skill only touches USDC and the vault.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

Token swaps via Odos and corresponding ERC-20 approvals introduce materially different risk than simple vault deposits because they depend on third-party routing logic, external quote/assembly APIs, and broader token permissions. In a wallet-managing skill, undeclared swap behavior can lead to unintended approvals or asset movement if users assume the skill only touches USDC and the vault.

Content

No source excerpt is available for this finding.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 197)May include surrounding context.

md
Rewards update approximately every 8 hours. The `compound.ts` script handles:

Known Vulnerable Dependency: ws==8.18.3 — 2 advisory(ies): CVE-2026-45736 (ws: Uninitialized memory disclosure); CVE-2026-48779 (ws: Memory exhaustion DoS from tiny fragments and data chunks)

High
Category
Supply Chain
Confidence
98% confidence
Finding

The lockfile pins transitive dependency ws to version 8.18.3, and the provided advisories indicate this version is affected by memory disclosure and memory-exhaustion denial-of-service issues. Because this skill uses viem, which depends on ws for websocket connectivity, a vulnerable websocket client/server library in a DeFi automation context can expose sensitive runtime data or allow service disruption when interacting with untrusted or compromised websocket endpoints.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The documentation describes capabilities beyond the stated skill scope, including reward claiming, token swapping, and auto-compounding. In a real-funds DeFi context, this scope drift is dangerous because users or orchestrating agents may invoke higher-risk operations than expected, increasing the chance of unauthorized asset movement, unintended swaps, or policy bypass.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
95% confidence
Finding

The skill declares capabilities that can access environment data, execute shell commands, and reach the network, yet it provides no explicit permission or allowed-tools boundary. In a skill that handles wallet configuration, private keys, and live DeFi transactions, missing scope declarations materially increases the chance of over-privileged execution and unintended fund-moving behavior.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The manifest description omits reward-claiming and token-swapping even though the documentation presents them as core supported commands. This under-describes what the skill can do with user assets and reduces the ability of reviewers or automated policy systems to make informed trust decisions.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
84% confidence
Finding

Using npx tsx without pinning a version allows dependency resolution to drift over time or pull an unexpected package version at execution time. In a financial skill that can configure wallets and send blockchain transactions, that creates a supply-chain risk where compromised or changed tooling could affect secret handling or transaction construction.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
84% confidence
Finding

Using npx tsx without pinning a version allows dependency resolution to drift over time or pull an unexpected package version at execution time. In a financial skill that can configure wallets and send blockchain transactions, that creates a supply-chain risk where compromised or changed tooling could affect secret handling or transaction construction.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
84% confidence
Finding

Using npx tsx without pinning a version allows dependency resolution to drift over time or pull an unexpected package version at execution time. In a financial skill that can configure wallets and send blockchain transactions, that creates a supply-chain risk where compromised or changed tooling could affect secret handling or transaction construction.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
84% confidence
Finding

Using npx tsx without pinning a version allows dependency resolution to drift over time or pull an unexpected package version at execution time. In a financial skill that can configure wallets and send blockchain transactions, that creates a supply-chain risk where compromised or changed tooling could affect secret handling or transaction construction.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
84% confidence
Finding

Using npx tsx without pinning a version allows dependency resolution to drift over time or pull an unexpected package version at execution time. In a financial skill that can configure wallets and send blockchain transactions, that creates a supply-chain risk where compromised or changed tooling could affect secret handling or transaction construction.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
84% confidence
Finding

Using npx tsx without pinning a version allows dependency resolution to drift over time or pull an unexpected package version at execution time. In a financial skill that can configure wallets and send blockchain transactions, that creates a supply-chain risk where compromised or changed tooling could affect secret handling or transaction construction.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
84% confidence
Finding

Using npx tsx without pinning a version allows dependency resolution to drift over time or pull an unexpected package version at execution time. In a financial skill that can configure wallets and send blockchain transactions, that creates a supply-chain risk where compromised or changed tooling could affect secret handling or transaction construction.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
84% confidence
Finding

Using npx tsx without pinning a version allows dependency resolution to drift over time or pull an unexpected package version at execution time. In a financial skill that can configure wallets and send blockchain transactions, that creates a supply-chain risk where compromised or changed tooling could affect secret handling or transaction construction.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
84% confidence
Finding

Using npx tsx without pinning a version allows dependency resolution to drift over time or pull an unexpected package version at execution time. In a financial skill that can configure wallets and send blockchain transactions, that creates a supply-chain risk where compromised or changed tooling could affect secret handling or transaction construction.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
84% confidence
Finding

Using npx tsx without pinning a version allows dependency resolution to drift over time or pull an unexpected package version at execution time. In a financial skill that can configure wallets and send blockchain transactions, that creates a supply-chain risk where compromised or changed tooling could affect secret handling or transaction construction.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
84% confidence
Finding

Using npx tsx without pinning a version allows dependency resolution to drift over time or pull an unexpected package version at execution time. In a financial skill that can configure wallets and send blockchain transactions, that creates a supply-chain risk where compromised or changed tooling could affect secret handling or transaction construction.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
84% confidence
Finding

Using npx tsx without pinning a version allows dependency resolution to drift over time or pull an unexpected package version at execution time. In a financial skill that can configure wallets and send blockchain transactions, that creates a supply-chain risk where compromised or changed tooling could affect secret handling or transaction construction.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
84% confidence
Finding

Using npx tsx without pinning a version allows dependency resolution to drift over time or pull an unexpected package version at execution time. In a financial skill that can configure wallets and send blockchain transactions, that creates a supply-chain risk where compromised or changed tooling could affect secret handling or transaction construction.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
84% confidence
Finding

Using npx tsx without pinning a version allows dependency resolution to drift over time or pull an unexpected package version at execution time. In a financial skill that can configure wallets and send blockchain transactions, that creates a supply-chain risk where compromised or changed tooling could affect secret handling or transaction construction.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
84% confidence
Finding

Using npx tsx without pinning a version allows dependency resolution to drift over time or pull an unexpected package version at execution time. In a financial skill that can configure wallets and send blockchain transactions, that creates a supply-chain risk where compromised or changed tooling could affect secret handling or transaction construction.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

The security section states keys are never written to disk, yet the setup flow says users can configure a private key file. Contradictory security claims create unsafe operator assumptions about how secrets are stored and handled, which is especially dangerous in a skill that manages real funds.

Content

No source excerpt is available for this finding.

Static analysis

Detected: suspicious.dangerous_exec, suspicious.env_credential_access

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
scripts/config.ts:305

Environment variable access combined with network send.

Critical
Code
suspicious.env_credential_access
Location
scripts/config.ts:197