Back to skill

Security audit

Grid Health Score

Security checks for vulnerabilities and agentic risk

Overview

This skill is a paid data-fetch skill that clearly discloses pricing, but it requires a raw wallet private key and automatic USDC payment authority for each request.

Install only if you are comfortable funding paid x402 calls from the configured wallet. Use a dedicated low-balance wallet, avoid primary wallets, check the $3.00/call pricing and discount terms, and require your agent workflow to ask before each invocation.

Vulnerability Patterns
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • 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)

T05 · Unauthorized Access and Privilege Escalation

Error
Location
SKILL.md:6
Finding

Raw EVM Private Key Used for Automatic Paid Requests

Content
View full analysis

Vulnerability Details

File Location: SKILL.md, lines 6–9, 24–40, and 52–59
Vulnerability Type: Excessive wallet authority and automatic financial authorization
Risk Level: High

Vulnerable Code

yaml
requires:
  env:
    - EVM_PRIVATE_KEY
primaryEnv: EVM_PRIVATE_KEY
markdown
The agent makes an x402-authenticated GET request to:

https://apexrunner.ai/signals/grid-health-score

text

The x402 client handles payment authorisation automatically. No API key, no account, no subscription required — just an EVM wallet with USDC on Base mainnet.

```python
# Example using the x402-python client
from x402.client import x402_get

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

```markdown
## Pricing
**$3.00/call** — standard price

Early adopters automatically receive 30% off ($2.10/call) until 2026-09-21. Discount tiers apply automatically based on wallet call history:
- Early Adopter (0–9 calls): 30% off
- Engaged (10–49 calls): 15% off
- Loyal (50–199 calls): 15% permanent
- VIP (200+ calls): 20% permanent

Technical Analysis

The skill requires an unrestricted raw EVM private key for a read-only grid-health query and passes that key directly to the external x402 client. The documented client automatically authorizes a USDC payment for every request.

A raw private key grants signing authority over the corresponding wallet rather than narrowly scoped permission to purchase one signal. The documented workflow does not require transaction-level user confirmation, impose a maximum payment amount, enforce a cumulative spending limit, prevent duplicate charges, or require a dedicated low-balance wallet. It also does not pin or otherwise constrain the referenced client dependency.

The available evidence does not establish that the private key i ...[truncated 1588 chars]

Remediation
View remediation

Remediation Suggestions

  1. Require explicit confirmation before each paid request. Display the recipient, chain, token, exact amount, maximum amount, and endpoint before requesting a signature.
  2. Replace the unrestricted primary wallet key with a dedicated low-balance payment wallet containing only the funds needed for approved calls.
  3. Prefer a scoped session signer, smart-account policy, allowance-limited authorization, or another payment mechanism that cannot transfer unrelated wallet assets.
  4. Enforce per-call, daily, and cumulative spending limits locally, independent of values supplied by the remote server.
  5. Disable automatic payment retries or use idempotency controls so network failures cannot create duplicate charges.
  6. Validate the payment request before signing, including the Base mainnet chain ID, USDC contract address, recipient, amount, and request origin.
  7. Pin the x402 client to a reviewed version with integrity verification and document its private-key handling behavior.
  8. Keep the private key in an isolated secret manager or hardware-backed signer, never log it, and avoid exposing it directly to general-purpose agent processes.
  9. Provide a non-paying preview mode so users can inspect the requested operation before granting wallet authority.
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • 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
96% confidence
Finding

The skill explicitly states that the x402 client 'handles payment authorisation automatically' and requires an EVM private key, but it does not present a prominent user-facing warning that invoking the skill can spend wallet funds on each request. In an agent setting, this creates a real risk of unintentional paid transactions because a user may interpret the skill as a normal data fetch rather than a wallet-authorized purchase.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.