Back to skill

Security audit

Market Tick

Security checks for vulnerabilities and agentic risk

Overview

This skill is a paid market-data connector, but it asks the agent to use a live EVM private key for automatic USDC payments without clear per-call consent or spending controls.

Review before installing. Use only a dedicated low-balance wallet, avoid exposing a primary wallet private key, and require an external spending policy or manual confirmation for each request so retries or repeated agent calls cannot silently spend funds.

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
SKILL.md:4
Finding

Unattended Cryptocurrency Payment Authorization Using a Reusable Wallet Private Key

Content
View full analysis

Vulnerability Details

File Location: SKILL.md, lines 4-9 and 27-35
Vulnerability Type: T09: Insecure Skill Coding Practices
Risk Level: Medium

Vulnerable Code

yaml
metadata:
  openclaw:
    requires:
      env:
        - EVM_PRIVATE_KEY
    primaryEnv: EVM_PRIVATE_KEY
python
# Example using the x402-python client
from x402.client import x402_get

response = x402_get(
    url="https://apexrunner.ai/signals/market-tick",
    private_key=os.environ["EVM_PRIVATE_KEY"]
)
print(response.json())

The accompanying instructions state:

The x402 client handles payment authorisation automatically.

Technical Analysis

The Skill requires the agent process to access a reusable EVM private key and passes that key directly to a third-party x402 client. Each request can automatically authorize a USDC payment to an external service.

No explicit user confirmation, per-request spending ceiling, cumulative budget, request-rate limit, recipient allowlist, or payment-challenge validation requirement is documented. Consequently, unintended repeated invocation, agent automation errors, or a compromised external payment endpoint could cause the wallet to authorize more payments than the user intended.

The code does not hardcode or deliberately transmit the private key to the signal endpoint, so direct theft by apexrunner.ai is not established. Nevertheless, exposing the key to the agent runtime and third-party client library increases the secret's attack surface. The immediate confirmed risk is unattended financial authorization; private-key compromise would additionally become possible if the imported client package or runtime were compromised.

Attack Path

  1. The operator configures EVM_PRIVATE_KEY in the agent environment and funds the associated wallet with USDC on Base.
  2. The agent loads this Skill and invokes x402_get against the external signal endpoint.
  3. Th ...[truncated 1067 chars]
Remediation
View remediation

Remediation Suggestions

  1. Use a dedicated, low-balance wallet exclusively for this Skill rather than a general-purpose wallet.
  2. Replace direct private-key access with a scoped signer or policy-controlled signing service that does not expose raw key material to the agent.
  3. Require explicit user confirmation before every paid request, displaying the recipient, network, token, and exact amount.
  4. Enforce a maximum amount per transaction, a cumulative daily budget, and request-rate limits outside the agent's control.
  5. Validate that every payment uses Base mainnet, USDC, the expected recipient, and the advertised maximum price before signing.
  6. Reject payment challenges whose amount or destination differs from a locally pinned policy.
  7. Pin the x402 client to a reviewed version, verify package integrity, and audit dependency updates before deployment.
  8. Prevent the private key from appearing in logs, exceptions, telemetry, prompts, or subprocess environments.
  9. Add loop prevention and idempotency controls so retries cannot silently create duplicate payments.
  10. Document revocation, wallet rotation, monitoring, and emergency fund-transfer procedures.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
Findings (1)

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill instructs the agent to make an x402-authenticated request using an EVM private key and states that payment authorization happens automatically, but it does not provide any explicit warning that invoking the skill can spend funds or that the private key is highly sensitive. In an agent setting, this can lead to unintended on-chain spending or unsafe credential handling because users may treat the call as a normal data fetch rather than a paid action tied to a live wallet.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.