Back to skill

Security audit

Oi Divergence

Security checks for vulnerabilities and agentic risk

Overview

This skill is a paid crypto-signal integration that discloses its endpoint and price, but it asks agents to use a reusable wallet private key for automatic payments without clear spending controls.

Review before installing. Use only a dedicated low-balance payment wallet, not a primary wallet, and be aware that agent invocations may spend funds automatically. Look for explicit confirmation, rate limits, payment caps, and scoped credentials before trusting this in unattended workflows.

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:6
Finding

Unrestricted Private-Key-Based Automatic Payment Authorization

Content
View full analysis

Vulnerability Details

File Location: SKILL.md, lines 6–9, 25–39, and 54–60
Vulnerability Type: Automatic financial authorization using a reusable wallet private key without documented spending controls
Risk Level: Medium

Vulnerable Code

yaml
metadata:
  openclaw:
    requires:
      env:
        - EVM_PRIVATE_KEY
    primaryEnv: EVM_PRIVATE_KEY
markdown
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/oi-divergence",
    private_key=os.environ["EVM_PRIVATE_KEY"]
)
print(response.json())
text

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

Early adopters automatically receive 30% off ($0.70/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 access to a reusable EVM private key and passes that key directly to the x402_get client. The documentation explicitly states that payment authorization is automatic and that each invocation incurs a charge. It does not specify transaction-level user confirmation, an expected maximum charge, cumulative spending limits, invocation rate limits, recipient verification, or the use of a restricted payment credential.

A wallet private key provides signing authority rather than narrowly scoped permission to retrieve one signal. Passing it to third-party client code increases the amount of code that handles the secret and makes the consequences of dependency compromise or unsafe runtime behavior more severe. The available project contains no lo ...[truncated 1987 chars]

Remediation
View remediation

Remediation Suggestions

  1. Replace the general-purpose wallet key with a dedicated payment wallet holding only the minimum funds required for expected usage.
  2. Prefer scoped session keys, delegated payment credentials, smart-account policies, or another mechanism that restricts the recipient, network, token, per-transaction amount, expiration time, and cumulative allowance.
  3. Require explicit user confirmation before each payment. Display the destination, network, token, exact amount, and resulting cumulative spend before authorization.
  4. Enforce a hard maximum charge per request and a configurable daily or session budget. Reject responses requesting payment above the documented price.
  5. Add invocation rate limiting, duplicate-request protection, and controls preventing automatic retries from producing additional charges.
  6. Validate the HTTPS destination against an exact allowlist and reject redirects to unapproved origins before any payment is authorized.
  7. Pin the x402 client to an audited version, verify package integrity, and use a dependency lockfile. Review the dependency's key-handling and payment-validation behavior.
  8. Keep the private key out of logs, exception messages, telemetry, and response objects. Isolate the signer from the network-facing client where possible so the raw key is not exposed to general dependency code.
  9. Document key rotation and incident-response procedures, including immediate fund transfer and credential revocation if the signing environment is suspected of compromise.
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
94% confidence
Finding

The skill instructs the agent to make a paid network request using an EVM private key from the environment, but it does not clearly warn the user that invoking the skill can spend wallet funds or transmit wallet-derived authorization material to a third-party service. In an agent setting, this creates a real risk of unintended charges and sensitive key misuse, especially because the payment flow is presented as automatic and frictionless.

Content

No source excerpt is available for this finding.