Back to skill

Security audit

ZeroDust Chain Exit

Security checks for vulnerabilities and agentic risk

Overview

This skill is built for moving all native crypto out of wallets, but it relies on a third-party service and asks users to sign powerful wallet authorizations without enough verification guidance.

Review this carefully before installing. Use it only if you trust ZeroDust and understand that it is intended to empty the source-chain native-token balance. Before signing, verify the source chain, destination address, destination chain, amount, fees, expiry, and delegated contract in your wallet or with independent tooling; do not approve blind signatures or broad delegations.

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

T09 · Insecure Skill Coding Practices

Error
Location
SKILL.md:118
Finding

Unverified Server-Provided EIP-7702 Delegation and Signing Data

Content
View full analysis

Vulnerability Details

File Location: SKILL.md, lines 118–133
Vulnerability Type: Unverified security-critical wallet authorization data
Risk Level: High

markdown
Response contains `typedData` (EIP-712 for sweep) and `eip7702` (delegation parameters).

## Step 4: User Signs Messages

The user must sign:
1. **EIP-7702 delegation authorization** - Delegates their EOA to ZeroDust contract
2. **EIP-7702 revoke authorization** - Pre-signed revocation (executed after sweep)
3. **EIP-712 sweep intent** - Authorizes the specific sweep parameters

## Step 5: Submit Sweep

```bash
curl -X POST https://zerodust-backend-production.up.railway.app/sweep \

Technical Analysis

The Skill instructs the Agent to obtain EIP-712 typed data and EIP-7702 delegation parameters from a remote service and ask the user to sign them. It does not require the Agent or wallet to independently verify the delegate contract address, chain ID, nonce, destination address, transferred amount, fee ceiling, expiration, or other authorization fields against the accepted quote.

An EIP-7702 authorization delegates executable behavior for an externally owned account. Consequently, the delegation target and associated signing data are security-critical. Reliance on opaque, dynamically supplied data creates a strong trust dependency on the availability, integrity, and correct operation of the remote backend.

The pre-signed revocation does not fully mitigate this exposure. Its successful execution is entrusted to the same service, and revocation after execution cannot reverse a transfer already authorized or completed.

Attack Path

  1. An attacker compromises the ZeroDust backend, its deployment account, DNS path, or another component capable of changing the authorization response.
  2. The attacker modifies the returned EIP-7702 delegate or EIP-712 fields, such as the destination, amount, chain, fee, expiry, or authorized contract.

...[truncated 1294 chars]

Remediation
View remediation

Remediation Suggestions

  1. Pin the audited delegation contract address separately for every supported chain and reject any server response containing a different address.
  2. Decode the complete EIP-7702 and EIP-712 payload locally before requesting a signature.
  3. Validate the chain ID, delegate, nonce, destination, source address, asset, exact maximum amount, maximum total fee, quote identifier, and expiration against values explicitly approved by the user.
  4. Present all decoded fields in human-readable form and require explicit confirmation immediately before signing.
  5. Bind the sweep intent cryptographically to the accepted quote and reject any authorization response that differs from it.
  6. Enforce short expirations, one-time nonces, replay protection, and strict domain separation.
  7. Document an independent, user-controlled revocation procedure that does not rely on the sweep backend.
  8. Publish verified contract source code, audit reports, deployment addresses, and upgrade-control information for every supported chain.
  9. Require wallets to show clear warnings and decoded authorization details rather than requesting blind signatures.
  10. Independently verify completion, destination receipt, and delegation revocation through trusted chain RPC providers.

T08 · Insecure Dependencies

Note
Location
README.md:28
Finding

Unpinned Global Installation of a Third-Party npm Package

Content
View full analysis

Vulnerability Details

File Location: README.md, lines 28–31
Vulnerability Type: Unpinned third-party build and publishing dependency
Risk Level: Low

markdown
1. Install the ClawHub CLI:
   ```bash
   npm install -g @openclaw/clawhub-cli
   ```

Technical Analysis

The publishing instructions install the latest available version of @openclaw/clawhub-cli globally without a pinned version, lockfile, or integrity constraint. The effective code executed by this command can therefore change after the Skill has been reviewed.

npm installation may execute package lifecycle scripts. A compromised maintainer account, malicious future release, or upstream package compromise could cause code to execute with the permissions of the developer running the installation command. Global installation also expands the persistence and impact of an unsafe package compared with a project-local, version-locked dependency.

No evidence in the audited files establishes that the named package is currently malicious. The issue is the unsafe and non-reproducible dependency installation practice.

Attack Path

  1. An attacker compromises the package publisher, npm account, release pipeline, or an upstream dependency used by the CLI.
  2. The attacker publishes a malicious release under the legitimate package name.
  3. A developer follows the README and runs the unversioned global installation command.
  4. npm retrieves the malicious current release and may execute its lifecycle scripts.
  5. The package executes with the developer account's permissions and remains globally available as a trusted-looking command.

Impact Assessment

A malicious package release could access files, environment variables, source repositories, publishing credentials, GitHub credentials available to the process, and other resources accessible to the developer account. It could also alter artifacts or publishing behavior.

The scope is limi ...[truncated 162 chars]

Remediation
View remediation

Remediation Suggestions

  1. Pin the CLI to a specifically reviewed version, for example @openclaw/clawhub-cli@X.Y.Z.
  2. Prefer a project-local development dependency recorded in a lockfile over a global installation.
  3. Use npm ci with a committed lockfile to make dependency resolution reproducible.
  4. Verify package provenance, signatures, and registry integrity metadata before installation.
  5. Review lifecycle scripts and install with --ignore-scripts if the CLI does not require them.
  6. Run publishing tools in an isolated environment with narrowly scoped, short-lived credentials.
  7. Use a trusted registry configuration and continuously monitor the pinned package and its transitive dependencies for compromise.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (4)

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The README promotes a fund-sweeping capability that leaves wallets at exactly zero balance, but it does not prominently warn that this is an irreversible asset movement operation that can strand users without gas or recovery options if used incorrectly. In an agent-skill context, concise prompt examples like 'exit Polygon completely' increase the chance of accidental or over-broad execution by users or downstream agents.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% 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 · README.md (reported line 89)May include surrounding context.

Getting an API Key

bash
curl -X POST https://zerodust-backend-production.up.railway.app/agent/register \
  -H "Content-Type: application/json" \
  -d '{"name": "My OpenClaw Agent", "agentId": "my-agent-001"}'

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The trigger phrases are broad enough to match common wallet-management requests such as 'move everything' or 'empty this wallet,' which can cause accidental invocation of a high-risk fund-transfer skill. In this context the skill is especially dangerous because its purpose is to sweep 100% of a user's native balance to zero across chains, so an unintended activation could lead directly to irreversible asset movement.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
83% confidence
Finding

The skill instructs the agent to send data to an external third-party service, including agent identity and later wallet addresses, quote details, and sweep authorization material. While external API use is expected for this functionality, it still creates a real security and privacy boundary: sensitive operational and wallet metadata leaves the trusted environment, and compromise or misuse of the service could facilitate harmful transactions.

Content

Scanner excerpt · SKILL.md (reported line 71)May include surrounding context.

Step 1: Register for API Key (One-Time)

bash
curl -X POST https://zerodust-backend-production.up.railway.app/agent/register \
  -H "Content-Type: application/json" \
  -d '{
    "name": "My OpenClaw Agent",

Static analysis

No suspicious patterns detected.