Back to skill

Security audit

Etherlink Skill

Security checks for vulnerabilities and agentic risk

Overview

The skill is for legitimate Etherlink blockchain use, but its setup can run unpinned external MCP code with wallet private-key access and limited safety controls.

Review this carefully before installing. Use read-only mode unless you truly need transactions, do not put a primary wallet private key into the MCP config, prefer a dedicated low-balance test wallet, test on Shadownet first, and pin or verify the MCP server source/package before running it.

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

Error
Location
references/mcp-setup.md:11
Finding

Unpinned Third-Party MCP Server Executes with Wallet Private-Key Access

Content
View full analysis

Vulnerability Details

File Location: references/mcp-setup.md:11-40
Vulnerability Type: Supply-chain exposure through unpinned and unverifiable dependencies
Risk Level: High

Vulnerable Code

json
{
  "mcpServers": {
    "etherlink": {
      "command": "npx",
      "args": ["-y", "etherlink-mcp-server"],
      "env": {
        "NETWORK": "etherlink",
        "PRIVATE_KEY": "optional-for-write-operations"
      }
    }
  }
}
bash
# Clone the repo
git clone https://github.com/yourusername/etherlink-mcp-server.git
cd etherlink-mcp-server

# Install dependencies
bun install

# Build
bun run build

# Run
bun run start

Technical Analysis

The recommended configuration uses npx -y etherlink-mcp-server, which automatically downloads and executes a package without pinning an exact version or verifying its integrity. The executed package may receive the user's blockchain private key through the PRIVATE_KEY environment variable.

The alternative installation method is also not reproducible or verifiable. It references the placeholder repository github.com/yourusername/etherlink-mcp-server.git, does not pin an immutable commit or release, and installs dependencies using bun install without a demonstrated trusted lockfile. The MCP implementation and dependency manifests are not included in the audited project, so their behavior cannot be validated.

Because both installation methods execute remotely sourced code, future package releases, repository changes, dependency compromise, dependency confusion, or account takeover could change the effective code after this Skill has been reviewed.

Attack Path

  1. An attacker compromises, replaces, or publishes a malicious version of etherlink-mcp-server, its repository, or one of its transitive dependencies.
  2. A user follows the recommended setup and executes the package through npx -y, or clones the unpin ...[truncated 1266 chars]
Remediation
View remediation

Remediation Suggestions

  1. Replace the placeholder repository with a verified, organization-controlled official repository.
  2. Pin the npm package to an exact reviewed version rather than using an unconstrained package name.
  3. Pin source installations to a reviewed immutable commit hash or cryptographically signed release.
  4. Commit and enforce a dependency lockfile, and use frozen-lockfile installation modes in production.
  5. Verify package integrity, provenance, release signatures, and publisher identity before execution.
  6. Avoid npx -y; require explicit user approval and version selection before downloading executable code.
  7. Include the MCP server source and dependency metadata within the auditable release, or provide reproducible build instructions and verified artifacts.
  8. Omit PRIVATE_KEY entirely for read-only operations.
  9. For write operations, use a dedicated low-value wallet with narrowly limited permissions instead of a primary wallet.
  10. Prefer an external signer, hardware wallet, or transaction-approval mechanism so the MCP process never receives raw private-key material.
  11. Run the MCP server in a restricted container or sandbox with minimal filesystem, network, environment, and operating-system privileges.
  12. Require explicit confirmation of destination, network, amount, contract address, and calldata before signing state-changing transactions.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (7)

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
83% confidence
Finding

The skill instructs users to configure and run an MCP server via a shell command (bun run ...) but does not declare any explicit tool scope such as permissions or allowed-tools. That omission weakens transparency and policy enforcement around code-execution capabilities, making it easier for an agent or user to invoke shell-backed behavior without clear constraints.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The setup instructions tell users to place an EVM_PRIVATE_KEY in MCP server configuration but do not warn that this secret authorizes transactions and full control over associated funds. Exposing or mishandling this credential could enable theft, unauthorized transfers, or persistent compromise of blockchain assets.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill provides a direct example for sending XTZ on mainnet-capable infrastructure without warning that blockchain transactions are irreversible and may transfer real funds. In an agentic context, this increases the risk of users or automated workflows treating the action as routine, leading to unintended asset loss.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
70% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · scripts/test-connection.sh (reported line 9)May include surrounding context.

sh
# Test Mainnet
echo "=== Etherlink Mainnet (42793) ==="
MAINNET_RESULT=$(curl -s -X POST https://node.mainnet.etherlink.com \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":1}')
MAINNET_CHAIN=$(echo $MAINNET_RESULT | grep -o '"result":"[^"]*"' | cut -d'"' -f4)

External Transmission

Medium
Category
Data Exfiltration
Confidence
70% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · scripts/test-connection.sh (reported line 17)May include surrounding context.

sh
# Test Mainnet
echo "=== Etherlink Mainnet (42793) ==="
MAINNET_RESULT=$(curl -s -X POST https://node.mainnet.etherlink.com \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":1}')
MAINNET_CHAIN=$(echo $MAINNET_RESULT | grep -o '"result":"[^"]*"' | cut -d'"' -f4)

External Transmission

Medium
Category
Data Exfiltration
Confidence
70% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · scripts/test-connection.sh (reported line 31)May include surrounding context.

sh
# Test Shadownet
echo "=== Etherlink Shadownet (127823) ==="
SHADOWNET_RESULT=$(curl -s -X POST https://node.shadownet.etherlink.com \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":1}')
SHADOWNET_CHAIN=$(echo $SHADOWNET_RESULT | grep -o '"result":"[^"]*"' | cut -d'"' -f4)

External Transmission

Medium
Category
Data Exfiltration
Confidence
70% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · scripts/test-connection.sh (reported line 39)May include surrounding context.

sh
# Test Shadownet
echo "=== Etherlink Shadownet (127823) ==="
SHADOWNET_RESULT=$(curl -s -X POST https://node.shadownet.etherlink.com \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":1}')
SHADOWNET_CHAIN=$(echo $SHADOWNET_RESULT | grep -o '"result":"[^"]*"' | cut -d'"' -f4)

Static analysis

No suspicious patterns detected.