Back to skill

Security audit

Defi Analyst

Security checks for vulnerabilities and agentic risk

Overview

The skill is mostly a coherent DeFi research helper, but its README exposes and encourages use of a real-looking Tavily API credential.

Review before installing. Do not use the Tavily key shown in README.md; assume it is compromised, create your own key, and avoid placing secrets in shell history or shared configs. Expect the skill to send research queries and token/protocol identifiers to Tavily, DeFiLlama, GeckoTerminal, and potentially Moltbook if you use the sentiment workflow.

Vulnerability Patterns
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (1)

T09 · Insecure Skill Coding Practices

Error
Location
README.md:18
Finding
Hard-Coded Tavily API Credential in Documentation## Vulnerability Details **File Location**: `README.md`, lines 18–19 **Vulnerability Type**: Hard-coded secret and plaintext credential exposure **Risk Level**: High ### Vulnerable Code ```bash export TAVILY_API_KEY="tvlY-dev-4WhK0Z-GBC7w91QlmfFozImB6ZG7hU6gCaUai2fQStmwlL5rk" mcporter config add tavily "https://mcp.tavily.com/mcp/?tavilyApiKey=$TAVILY_API_KEY" ``` ### Technical Analysis The README contains a Tavily API credential in plaintext and instructs users to configure the MCP endpoint with it. Anyone who can access the repository can recover and reuse the credential without authorization. The configuration command also inserts the credential into a URL. If executed as documented, the secret may be copied into shell history, process arguments, command logs, MCP configuration, diagnostic output, or other records that capture URLs. This increases the exposure beyond the repository itself. Because the credential has already been included in project content, merely deleting it from the current file is insufficient. It must be treated as compromised and rotated. If the repository has version history or external mirrors, the old value may remain recoverable. ### Attack Path 1. An attacker accesses `README.md` in the repository or a published package. 2. The attacker extracts the plaintext Tavily API key from line 18. 3. The attacker submits requests to Tavily using the exposed credential. 4. Those requests consume the credential owner's quota and are attributed to the associated account. 5. If users execute the documented command, additional copies of the credential may be recovered from local shell history, configuration, logs, or process-monitoring data. ### Impact Assessment Exploitation does not grant local host privileges or direct access to wallets and private keys based on the reviewed evidence. It can, however, provide unauthorized use of the Tavily account associated with the credential. Potential effects include: - Unauthorized API request ...[truncated 287 chars]
Remediation
## Remediation Suggestions 1. Revoke the exposed Tavily API credential immediately and issue a replacement. 2. Replace the literal credential in `README.md` with a non-secret placeholder: ```bash export TAVILY_API_KEY="<YOUR_TAVILY_API_KEY>" mcporter config add tavily "https://mcp.tavily.com/mcp/?tavilyApiKey=$TAVILY_API_KEY" ``` 3. Require each user to generate and configure an individual API key rather than distributing a shared credential. 4. Prefer a credential mechanism that does not place secrets in URLs or command-line arguments. Use a supported secret store, protected environment configuration, or authenticated header mechanism where available. 5. Review repository history, releases, package archives, mirrors, CI logs, and documentation caches for copies of the exposed key. History rewriting may reduce accidental discovery but does not replace revocation. 6. Add automated secret scanning to pre-commit hooks and CI, using a tool such as Gitleaks, TruffleHog, or an equivalent platform feature. 7. Ensure local configuration files containing replacement credentials are excluded from version control and have restrictive filesystem permissions.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (16)

Context-Inappropriate Capability

High
Confidence
99% confidence
Finding
The README contains a concrete Tavily API key and instructs users to configure it for live use. Exposing reusable credentials in public documentation can lead to unauthorized API consumption, billing abuse, service suspension, and compromise of any data accessible through that key. In this skill context, the issue is more dangerous because the skill explicitly centers on external research integrations, making the leaked credential immediately actionable.

Missing User Warnings

High
Confidence
99% confidence
Finding
The documentation not only exposes a real-looking API key but also tells users to deploy it directly without any warning about credential hygiene. This normalizes insecure secret handling, increases the chance the credential will be reused broadly, and may cause downstream users to embed secrets in shell history, configs, or repositories. Because this is an install/configuration path, the insecure practice is likely to be copied verbatim by users.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding
There is a clear mismatch between the declared purpose and the actual code. The description claims a DeFi research and analytics capability involving external data sources and market/protocol analysis. However, the supplied code only performs local sanity checks on a markdown file. Its primary purpose is repository/document validation, not DeFi research. No evidence in this chunk shows use of the declared services or any analysis functionality.

Sudo/Root Execution

Medium
Category
Privilege Escalation
Content
### Optional: jq for JSON parsing

```bash
sudo apt install jq  # Debian/Ubuntu
brew install jq     # macOS
```
Confidence
70% confidence
Finding
Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.

External Transmission

Medium
Category
Data Exfiltration
Content
mcporter call tavily.tavily_search query="Aave V3 audit exploit update 2026" max_results=5

# Get trending pools
curl -s "https://api.geckoterminal.com/api/v2/networks/eth/pools" | jq '.[0:5]'
```

## Skills
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
mcporter call tavily.tavily_search query="Aave V3 audit exploit update 2026" max_results=5

# Get trending pools
curl -s "https://api.geckoterminal.com/api/v2/networks/eth/pools" | jq '.[0:5]'
```

## Skills
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
mcporter call tavily.tavily_search query="Aave V3 audit exploit update 2026" max_results=5

# Get trending pools
curl -s "https://api.geckoterminal.com/api/v2/networks/eth/pools" | jq '.[0:5]'
```

## Skills
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
mcporter call tavily.tavily_search query="Aave V3 audit exploit update 2026" max_results=5

# Get trending pools
curl -s "https://api.geckoterminal.com/api/v2/networks/eth/pools" | jq '.[0:5]'
```

## Skills
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
```bash
# Get protocol TVL
curl -s "https://api.llama.fi/protocol/aave" | jq '{name: .name, tvl: .tvl, change_1d: .change_1d, change_7d: .change_7d}'

# Top DeFi protocols by TVL
curl -s "https://api.llama.fi/tvl" | jq '.[0:10]'
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
```bash
# Get protocol TVL
curl -s "https://api.llama.fi/protocol/aave" | jq '{name: .name, tvl: .tvl, change_1d: .change_1d, change_7d: .change_7d}'

# Top DeFi protocols by TVL
curl -s "https://api.llama.fi/tvl" | jq '.[0:10]'
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
```bash
# Get protocol TVL
curl -s "https://api.llama.fi/protocol/aave" | jq '{name: .name, tvl: .tvl, change_1d: .change_1d, change_7d: .change_7d}'

# Top DeFi protocols by TVL
curl -s "https://api.llama.fi/tvl" | jq '.[0:10]'
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
```bash
# Get protocol TVL
curl -s "https://api.llama.fi/protocol/aave" | jq '{name: .name, tvl: .tvl, change_1d: .change_1d, change_7d: .change_7d}'

# Top DeFi protocols by TVL
curl -s "https://api.llama.fi/tvl" | jq '.[0:10]'
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
```bash
# Get protocol TVL
curl -s "https://api.llama.fi/protocol/aave" | jq '{name: .name, tvl: .tvl, change_1d: .change_1d, change_7d: .change_7d}'

# Top DeFi protocols by TVL
curl -s "https://api.llama.fi/tvl" | jq '.[0:10]'
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
```bash
# Get protocol TVL
curl -s "https://api.llama.fi/protocol/aave" | jq '{name: .name, tvl: .tvl, change_1d: .change_1d, change_7d: .change_7d}'

# Top DeFi protocols by TVL
curl -s "https://api.llama.fi/tvl" | jq '.[0:10]'
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
```bash
# Get protocol TVL
curl -s "https://api.llama.fi/protocol/aave" | jq '{name: .name, tvl: .tvl, change_1d: .change_1d, change_7d: .change_7d}'

# Top DeFi protocols by TVL
curl -s "https://api.llama.fi/tvl" | jq '.[0:10]'
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Description-Behavior Mismatch

Medium
Confidence
95% confidence
Finding
The skill documents a sentiment-analysis workflow that depends on 'Moltbook agent network pulse', but that dependency is not declared in the manifest or prerequisites. Undeclared external dependencies reduce transparency, can cause users to unknowingly send data to third parties, and make security review of data flows and trust boundaries incomplete.

Static analysis

No suspicious patterns detected.