Back to skill

Security audit

Erc8004 Reputation

Security checks for vulnerabilities and agentic risk

Overview

The skill is purpose-aligned, but it needs review because it can immediately sign and broadcast blockchain transactions using wallet secrets without an explicit confirmation step.

Review before installing. Use an isolated virtual environment, prefer pinned and hashed dependencies, and use a dedicated low-value wallet. Do not expose a primary mnemonic or private key to the runtime. Treat `give` and `revoke` as real blockchain transactions that spend gas and may be hard to undo, and treat leaderboard results as third-party Agentscan data.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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)

T08 · Insecure Dependencies

Warning
Location
README.md:16
Finding
Unpinned Third-Party Python Dependencies## Vulnerability Details **File Location**: `README.md:16` **Vulnerability Type**: Supply-chain exposure through unpinned dependencies **Risk Level**: Medium **Vulnerable code snippet**: ```bash # Install dependencies pip install web3 eth-account ``` The same unsafe installation command is also documented in `SKILL.md:180`: ```bash pip install web3 eth-account ``` ### Technical Analysis The installation instructions retrieve `web3`, `eth-account`, and their transitive dependencies without exact version constraints, package hashes, or a reviewed lockfile. Consequently, the installed code can change between installations even when the audited project itself remains unchanged. Python package installation may execute package build hooks, and installed dependencies execute in the same process as `scripts/reputation.py`. This is security-sensitive because the application imports these packages and later reads `ERC8004_MNEMONIC` or `ERC8004_PRIVATE_KEY` when signing write transactions. A compromised direct or transitive dependency could therefore run with the invoking user's privileges and access secrets available to the process. This finding does not establish that the currently published dependencies are malicious. It identifies the mutable and insufficiently verified dependency acquisition process as the vulnerability. ### Attack Path 1. An attacker compromises a direct dependency, one of its transitive dependencies, a future package release, or the package-index delivery path. 2. The attacker publishes malicious package code or installation hooks under a version satisfying the unconstrained installation command. 3. A user follows the documented `pip install web3 eth-account` instruction. 4. `pip` resolves and installs the attacker-controlled version without validating it against project-supplied hashes. 5. Malicious code executes during installation or when `scripts/reputation.py` imports the affected package. ...[truncated 984 chars]
Remediation
## Remediation Suggestions 1. Create a dependency lock or requirements file containing reviewed, exact versions for all direct and transitive dependencies. 2. Generate and record cryptographic hashes for every distribution, then install with hash enforcement: ```bash python -m pip install --require-hashes -r requirements.txt ``` 3. Replace the documentation command with installation from the reviewed requirements or lockfile rather than resolving package versions dynamically. 4. Use an isolated virtual environment and explicitly warn users not to install the dependencies with administrator privileges: ```bash python -m venv .venv . .venv/bin/activate python -m pip install --require-hashes -r requirements.txt ``` 5. Add automated dependency vulnerability and integrity scanning to CI, and review lockfile changes before merging updates. 6. Prefer trusted package-index configuration and prohibit unreviewed additional indexes to reduce dependency-confusion risk. 7. Update both `README.md:16` and `SKILL.md:180` so all documented installation paths use the same verified dependency set.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • 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)

Missing User Warnings

Medium
Confidence
94% confidence
Finding
The README includes commands for giving and revoking feedback on-chain, including use of a private key environment variable, but it does not clearly warn that these actions submit blockchain transactions that can incur gas costs and may be irreversible once confirmed. In a skill intended for agent use, this omission increases the chance of accidental fund expenditure or unintended state changes by users who may treat the commands like harmless read-only operations.

Lp3

Medium
Category
MCP Least Privilege
Confidence
88% confidence
Finding
The skill documents commands that use network access and environment-sourced secrets, but it does not declare any explicit tool scope or permissions boundary. In an agent ecosystem, this can cause the runtime or reviewer to underestimate the skill's capabilities, increasing the chance of unintended secret access or outbound interactions when the skill is invoked.

Missing User Warnings

Medium
Confidence
93% confidence
Finding
The skill describes write operations like giving and revoking feedback without clearly warning that they trigger blockchain transactions, consume gas, and may be difficult or impossible to undo fully. Users or autonomous agents could invoke these commands assuming they are ordinary reversible API actions, leading to unexpected cost, irreversible state changes, or accidental on-chain submissions.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The documentation instructs users to export a mnemonic or private key directly into environment variables without an explicit security warning or safer handling guidance. Because this skill performs blockchain write operations, compromise of those credentials could let an attacker spend funds, impersonate the operator on-chain, or permanently alter reputation records tied to that wallet.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The give-feedback flow signs and broadcasts a state-changing blockchain transaction immediately after showing gas information, without an explicit yes/no confirmation from the user. In an agent or scripted context, this increases the risk of accidental, socially engineered, or unintended on-chain actions using the configured wallet.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The revoke command likewise signs and submits a state-changing transaction without an explicit user confirmation step. Because revocation alters on-chain reputation records irreversibly from the user's perspective, a mistaken invocation or prompt-injection-driven call could cause unintended loss of reputation evidence or workflow disruption.

Description-Behavior Mismatch

Medium
Confidence
95% confidence
Finding
The leaderboard command claims to represent ERC-8004 reputation data, but it actually fetches and ranks agents from a third-party Agentscan API. This creates a trust-boundary mismatch: users may believe they are viewing authoritative on-chain registry results when the output can be incomplete, manipulated, stale, or filtered by the external service.

Context-Inappropriate Capability

Low
Confidence
82% confidence
Finding
Most commands interact directly with supported blockchains' RPC endpoints to read or write ERC-8004 reputation data. The leaderboard command instead reaches out to an unrelated external web API, expanding the skill's capabilities beyond straightforward registry interaction and introducing dependence on a separate service not mentioned in the manifest.

Static analysis

No suspicious patterns detected.