Back to skill

Security audit

zapper-api

Security checks for vulnerabilities and agentic risk

Overview

This skill is a disclosed Zapper API helper for wallet portfolio lookups, with privacy and API-key handling cautions but no hidden or destructive behavior found.

Before installing, prefer setting ZAPPER_API_KEY in your environment instead of storing the key in the config file. Only query wallet addresses you are comfortable sending to Zapper, since portfolio and transaction lookups reveal linkable financial metadata to that provider. If you use the config file, keep it private with restrictive filesystem permissions.

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

Warning
Location
scripts/zapper.py:15
Finding

Plaintext API Key Stored in a Predictable Configuration File

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • 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 (8)

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

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

Setup

  1. Get API key from Zapper Dashboard (free tier available)
  2. Configure in ~/.config/zapper/addresses.json:
    json
    {
    

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
88% confidence
Finding

The skill declares capabilities that use environment variables and make outbound network requests, but it does not specify any explicit tool scope or allowed-tools boundary. This weakens least-privilege controls and can let the runtime grant broader access than users expect, especially for a skill that sends wallet-related data to an external API.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill processes wallet addresses, portfolio balances, NFT holdings, and transaction history by querying Zapper, but the description does not clearly warn that this information is transmitted to a third-party service. Users may disclose sensitive financial metadata without informed consent, which is especially relevant in blockchain contexts where addresses can be linked to identity and assets.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The documentation directs users to send wallet addresses, portfolio holdings, NFT balances, and transaction history to a third-party API endpoint, but it does not warn that this data can be sensitive and linkable to a user. Even though blockchain data is public, aggregating and transmitting it to an external service can expose financial profiling, address clustering, and behavioral data without informed consent.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
84% confidence
Finding

The curl example shows direct external transmission of wallet data and an API key to a third-party endpoint. In this skill's context, external transmission is expected for functionality, but it still creates privacy and data-handling risk if used without disclosure, validation, or least-privilege controls.

Content

Scanner excerpt · references/API.md (reported line 183)May include surrounding context.

}

text

## curl Examples

### Portfolio
```bash

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill sends wallet addresses, and for transaction-history queries associated activity data, to Zapper’s external GraphQL API without any explicit disclosure or consent mechanism. Wallet addresses and transaction history are privacy-sensitive in the blockchain context because they enable portfolio profiling, behavioral analysis, and cross-service correlation of a user’s on-chain identity.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Low
Category
Not specified by scanner
Confidence
90% confidence
Finding

The manifest scope lists DeFi portfolios, token holdings, NFTs, transactions, and prices. The fetch_claimables path adds a separate rewards-discovery capability for unclaimed rewards, which is adjacent to DeFi analysis but not actually named in the stated skill description.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Low
Category
Not specified by scanner
Confidence
89% confidence
Finding

The config command exposes locally stored wallet labels and partially masked addresses, which goes beyond the skill’s declared portfolio-querying purpose and increases local data exposure. While it does not reveal the API key value, it still enumerates sensitive metadata about configured wallets that could be surfaced to an untrusted caller or higher-level agent without clear need.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.