Back to skill

Security audit

zeko

Security checks for vulnerabilities and agentic risk

Overview

The skill is coherent for Zeko blockchain automation, but it asks agents to use wallet and GitHub credentials in fund-moving workflows with insufficient scoping and unpinned package execution.

Review this skill carefully before installing. Use only test or low-value keys, avoid exposing MINA_PRIVATE_KEY or GITHUB_TOKEN to read-only tasks, pin and verify npm package versions before running bridge or faucet commands, and require an explicit check of network, amount, recipient, and fee before any signing or submission.

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

T08 · Insecure Dependencies

Warning
Location
SKILL.md:15
Finding
Unpinned npm Packages Execute in Credential-Sensitive Workflows## Vulnerability Details **File Location**: `SKILL.md:15-26`; `references/30-bridge-and-faucet.md:36-41`; `references/30-bridge-and-faucet.md:53-55` **Vulnerability Type**: Unpinned third-party dependency execution **Risk Level**: Medium ### Vulnerable Code ```yaml install: - kind: node package: "@zeko-labs/bridge-cli" bins: - zeko-bridge - kind: node package: "@zeko-labs/faucet-cli" bins: - zeko-faucet - kind: node package: o1js ``` ```bash MINA_PRIVATE_KEY=... npx -y @zeko-labs/bridge-cli bridge \ --from mina:testnet \ --to zeko-m:testnet \ --amount 1 \ --json ``` ```bash MINA_PRIVATE_KEY=... npx -y @zeko-labs/bridge-cli doctor ``` ### Technical Analysis The Skill does not pin exact versions or integrity hashes for its npm dependencies. The documented `npx -y` commands automatically resolve, download, and execute a package without interactive confirmation. Consequently, the code executed can change after the Skill has been reviewed. The bridge package executes while `MINA_PRIVATE_KEY` is available in its process environment. npm packages and their transitive dependencies can execute package code and lifecycle scripts with the current user's permissions and environment access. A compromised future release, hijacked maintainer account, or malicious transitive dependency could read the wallet key, alter transaction parameters, or execute arbitrary local commands. This is particularly sensitive because bridge operations involve signing transactions and transferring assets. Although no currently embedded malicious package code was found in the audited files, the unpinned runtime resolution creates a supply-chain trust boundary that is not adequately constrained. ### Attack Path 1. An attacker compromises `@zeko-labs/bridge-cli`, one of its transitive dependencies, or the relevant package-publishing account. 2. The attacker publishes a maliciou ...[truncated 1048 chars]
Remediation
## Remediation Suggestions 1. Pin every npm dependency to an exact reviewed version rather than relying on an implicitly resolved latest version. 2. Use a committed lockfile and verify package integrity hashes during installation. 3. Replace runtime `npx -y` execution with a previously installed, reviewed, version-pinned binary. 4. Verify publisher identity, package provenance, signatures, and release integrity before updating. 5. Disable or carefully control npm lifecycle scripts where operationally possible. 6. Run each command in an isolated environment that exposes only the credential required for that specific operation. 7. Ensure the bridge tool cannot access unrelated credentials, project files, SSH keys, or cloud tokens. 8. Require explicit user confirmation of the source, destination, amount, fee, and network immediately before signing. 9. Document an approved package version and a controlled dependency-update review process.

T05 · Unauthorized Access and Privilege Escalation

Note
Location
SKILL.md:7
Finding
Global Credential Requirements Exceed Least-Privilege Needs## Vulnerability Details **File Location**: `SKILL.md:7-14` **Vulnerability Type**: Excessive credential exposure **Risk Level**: Low ### Vulnerable Code ```yaml metadata: openclaw: homepage: https://docs.zeko.io/developers/tools/agent-skills primaryEnv: MINA_PRIVATE_KEY requires: env: - MINA_PRIVATE_KEY - GITHUB_TOKEN - PUBLIC_KEY - ADDRESS ``` ### Technical Analysis The Skill declares both `MINA_PRIVATE_KEY` and `GITHUB_TOKEN` as global environment requirements. Many supported operations—including documentation lookup, endpoint discovery, public GraphQL queries, public-key parsing, amount conversion, and account inspection—do not require either secret. Declaring these credentials at Skill scope increases the likelihood that they will be simultaneously available to commands, dependencies, diagnostic tools, or subprocesses that do not legitimately need them. This violates the principle of least privilege and unnecessarily expands the consequences of a dependency compromise or unsafe command execution. The wallet private key is legitimately necessary for transaction signing, and the GitHub token is described as necessary for faucet authentication. The issue is not their use for those workflows, but their unconditional availability across unrelated and read-only workflows. ### Attack Path 1. A user enables the Skill for a read-only operation such as checking an account balance or querying network configuration. 2. The Skill environment includes `MINA_PRIVATE_KEY` and `GITHUB_TOKEN` even though the requested operation does not need them. 3. An invoked npm dependency, diagnostic command, or compromised subprocess enumerates the process environment. 4. The unnecessary credentials are collected and transmitted or otherwise misused. 5. The attacker uses the wallet key to sign transactions or uses the GitHub token within its granted repository and account perm ...[truncated 542 chars]
Remediation
## Remediation Suggestions 1. Remove `MINA_PRIVATE_KEY` and `GITHUB_TOKEN` from unconditional Skill-wide requirements. 2. Request `MINA_PRIVATE_KEY` only immediately before a user-approved signing operation. 3. Request `GITHUB_TOKEN` only when the user explicitly invokes faucet authentication or claiming. 4. Never expose both secrets to the same process unless a documented workflow strictly requires it. 5. Launch credential-sensitive commands with a minimal environment allowlist. 6. Use narrowly scoped and short-lived GitHub tokens where supported. 7. Prefer a wallet signer or secret-management interface that does not reveal raw private-key material to general subprocesses. 8. Keep public-key and address inputs separate from secret inputs and clearly document that they are non-secret. 9. Add explicit user confirmation before any workflow receives signing credentials.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • 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
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (11)

Missing User Warnings

Medium
Confidence
92% confidence
Finding
The skill is explicitly designed to operate with sensitive material like MINA_PRIVATE_KEY and to perform fund-moving or account-affecting actions such as bridge and faucet workflows, but the description and defaults do not require explicit confirmation, warn about irreversible transactions, or constrain when secrets may be used. In an agent setting, this increases the chance of unintended signing, misuse of privileged credentials, or acting on ambiguous user requests.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding
npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Vague Triggers

Medium
Confidence
89% confidence
Finding
The phrase "Use this skill when the user wants to use Zeko, inspect the network, bridge assets, get faucet funds, or build on Zeko" is a wide, catch-all trigger description without clear boundaries or exclusion conditions. It lacks negative examples or tighter scope constraints, which increases the chance the skill could be selected for loosely related requests about Mina, blockchain tooling, or general network inspection.

Missing User Warnings

Medium
Confidence
91% confidence
Finding
This file explicitly targets unattended bridge execution and faucet funding, and it instructs use of sensitive credentials such as `MINA_PRIVATE_KEY` and `GITHUB_TOKEN` without prominent warnings about irreversible side effects, secret handling, transaction signing, or environment leakage. In an agent skill, that omission increases the chance an automated system will perform real-value actions or expose credentials without adequate user confirmation or sandboxing.

Rp1

Medium
Category
MCP Rug Pull
Confidence
94% confidence
Finding
The document instructs agents to execute `npx -y @zeko-labs/bridge-cli` without pinning an exact package version, which causes code to be fetched and run from the registry at execution time. In an unattended automation context that also uses `MINA_PRIVATE_KEY`, a compromised package release, dependency, or account could lead to arbitrary code execution and theft of signing credentials or unauthorized bridge transactions.

Rp1

Medium
Category
MCP Rug Pull
Confidence
94% confidence
Finding
The `doctor` example also uses `npx -y @zeko-labs/bridge-cli` without version pinning, so agents may download and execute whatever version is current at runtime. Even though `doctor` sounds diagnostic, it still executes third-party code in an environment that may contain bridge credentials and operational state, making supply-chain compromise materially risky.

External Transmission

Medium
Category
Data Exfiltration
Content
# Endpoints And Curl

Use this file when you need exact public endpoints, Bridge SDK config values, or directly runnable queries.
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
- Mina archive gateway (devnet): `https://gateway.mina.archive.devnet.zeko.io`
- Mina archive gateway (mainnet): `https://gateway.mina.archive.mainnet.zeko.io`
- Actions API: `https://testnet.api.actions.zeko.io/graphql`
- Faucet claim API: `https://api.faucet.zeko.io/claim`
- Bridge UI: `https://testnet.bridge.zeko.io` (`https://alpha.bridge.zeko.io` is an alias)
- Faucet UI: `https://faucet.zeko.io`
- Explorer: `https://zekoscan.io/testnet`
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
- Zeko archive: `https://archive.mainnet.zeko.io/graphql`
- Mina GraphQL: `https://gateway.mina.mainnet.zeko.io`
- Mina archive: `https://gateway.mina.archive.mainnet.zeko.io`
- Actions API: `https://api.actions.zeko.io/graphql`
- Bridge UI: `https://bridge.zeko.io`

## Non-testnet note
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Missing User Warnings

Medium
Confidence
90% confidence
Finding
The file includes a directly runnable `curl` example that broadcasts a signed payment but does not explicitly warn that using mainnet endpoints or real keys can move real funds. In a builder-facing skill that encourages terminal use, omission of a clear safety warning increases the risk of accidental value transfer, especially if users adapt the example from testnet to mainnet.

Missing User Warnings

Medium
Confidence
90% confidence
Finding
The file demonstrates reading a private key directly from an environment variable and using it in inline shell-executed Node code, but it provides no warning about secret handling, shell history, logging, process exposure, or safer alternatives. In a terminal-driven agent workflow, users may copy this pattern into less controlled environments, increasing the chance of credential leakage or accidental key misuse.

Static analysis

No suspicious patterns detected.