Back to skill

Security audit

Neo Market

Security checks for vulnerabilities and agentic risk

Overview

The skill appears to be a real Neo Market blockchain CLI, but it asks users to expose wallet keys and sign USDC-related transactions without enough safeguards or reproducible installation controls.

Review this skill carefully before installing. Use only a dedicated low-balance wallet, do not pass private keys on the command line, avoid storing valuable wallet keys in plaintext .env files, pin and verify the npm package version, and confirm the RPC network and contract addresses before signing any transaction.

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 (3)

T09 · Insecure Skill Coding Practices

Warning
Location
cli.ts:27
Finding

Wallet Private Key Exposed Through Command-Line Arguments

Content
View full analysis
", "Override RPC URL", DEFAULT_RPC) .option("--key ", "Override Private Key"); function getProvider(options: any) { const rpc = options.rpc || process.env.BASE_RPC_URL || DEFAULT_RPC; return new ethers.JsonRpcProvider(rpc); } function getWallet(options: any, provider: ethers.JsonRpcProvider) { const key = options.key || process.env.PRIVATE_KEY; if (key) return new ethers.Wallet(key, provider); return null; } ``` ### Technical Analysis The CLI accepts a complete wallet private key through the `--key` command-line option. Command-line arguments are not a secure credential transport mechanism. Depending on the operating system and execution environment, arguments can be exposed through: - Shell history files. - Process inspection utilities and process metadata. - Terminal session recordings. - Audit, endpoint monitoring, or orchestration logs. - Agent execution traces and diagnostic output. - Wrapper scripts or automation configuration. The key is used to instantiate an `ethers.Wallet`, granting the process unrestricted signing authority for that wallet. Although the reviewed code does not transmit the raw private key to the RPC endpoint, disclosure through local process metadata is sufficient to compromise the wallet. This credential access is required for signing transactions, but accepting the credential as a normal command-line argument exceeds the minimum privilege and secrecy controls necessary for that functionality. ### Attack Path 1. A user or autonomous agent invokes the CLI with `neo-market --key 0x...`. 2. The complete private key is recorded in shell history, execution telemetry, process arguments, or an ...[truncated 891 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
cli.ts:19
Finding

Unvalidated RPC Endpoint Controls Wallet Network Operations

Content
View full analysis
", "Override RPC URL", DEFAULT_RPC) .option("--key ", "Override Private Key"); function getProvider(options: any) { const rpc = options.rpc || process.env.BASE_RPC_URL || DEFAULT_RPC; return new ethers.JsonRpcProvider(rpc); } function getWallet(options: any, provider: ethers.JsonRpcProvider) { const key = options.key || process.env.PRIVATE_KEY; if (key) return new ethers.Wallet(key, provider); return null; } ``` The delivery signature domain is independently hardcoded: ```ts const domain = { name: "AgentMarket", version: "1", chainId: CURRENT_CHAIN_ID, verifyingContract: ADDRS.TokenEscrow }; ``` ### Technical Analysis The `--rpc` option and `BASE_RPC_URL` environment variable can select an arbitrary JSON-RPC endpoint. The CLI then trusts that endpoint for network identification, account balances, contract reads, nonce and fee information, transaction submission, and transaction confirmation. Before signing operations, the CLI does not call `provider.getNetwork()` and compare the returned chain ID with the expected value in `deployed_addresses.json` or `CURRENT_CHAIN_ID`. Contract addresses are fixed to the Sepolia deployment, while the provider remains user-configurable. This creates an unsafe trust boundary and a risk of wrong-network operation. A hostile RPC does not directly receive the raw private key because `ethers.Wallet` signs locally. Nevertheless, it can observe wallet activity, falsify read responses, interfere with fee and nonce inf ...[truncated 2110 chars]
Remediation
View remediation

T08 · Insecure Dependencies

Note
Location
SKILL.md:21
Finding

Unpinned Global Package Installation Creates Supply-Chain Exposure

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (21)

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

The declared purpose describes a marketplace-integrated skill for discovering jobs, placing bids, and handling USDC payments on Neo Market. The actual code does not implement any Neo Market interaction, job discovery, bidding logic, or payment handling. Instead, it sets up Hardhat for smart contract development and deployment across Ethereum/Base-related networks, including use of RPC endpoints, account keys, and explorer verification APIs. That is a materially different primary purpose and involves undeclared blockchain deployment capabilities.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The README instructs users to place a blockchain PRIVATE_KEY in a plain .env file without any warning about its sensitivity, use of a low-value dedicated wallet, or operational safeguards. In a skill meant to interact with on-chain escrow and bidding, compromise of that key can directly lead to theft of funds, fraudulent bids, impersonation, and irreversible blockchain transactions.

Content

No source excerpt is available for this finding.

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.

Content

No source excerpt is available for this finding.

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.

Content

No source excerpt is available for this finding.

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.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
80% confidence
Finding

The skill references environment-based secrets handling via PRIVATE_KEY and RPC configuration, but it does not declare any explicit tool scope or permissions boundary. In an agent setting, undeclared access to environment data increases the chance that a runtime can expose or misuse sensitive wallet credentials without clear user consent or sandboxing expectations.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The setup instructs users to provide a raw PRIVATE_KEY but does not prominently warn that this is a highly sensitive credential that can irreversibly transfer funds from the associated wallet. In agent environments, encouraging direct secret injection into env vars or interactive prompts materially raises the risk of theft, accidental logging, or misuse by other tools and subprocesses.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The manifest description frames the skill around supplier-side activity: finding work, bidding on jobs, and receiving payment. This file additionally implements requester-side marketplace administration via publish and select-bid, which expands the behavior beyond the stated scope.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 · hardhat.config.ts (reported line 52)May include surrounding context.

ts
network: "base",
        chainId: 8453,
        urls: {
          apiURL: "https://api.basescan.org/api",
          browserURL: "https://basescan.org"
        }
      }

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
93% confidence
Finding

该文件全文以中文编写,且未说明这是面向特定中文用户群、区域合规场景,或提供其他语言/本地化选项。按规则,若技能内容强制特定语言而无用户选择或明确正当说明,可构成自然语言层面的语言/地区策略问题。

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Low
Category
Not specified by scanner
Confidence
85% confidence
Finding

The closest payment-related behavior here is deliver, which signs and submits a delivery receipt to escrow. That may be part of a payout workflow, but the code shown does not actually provide a command to collect or verify receipt of USDC, so the implemented behavior falls short of the manifest's payment claim.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
96% confidence
Finding

The entire document is written in Chinese, and there is no indication that users may choose another language or that the skill is intentionally limited to a Chinese-speaking or region-specific context. Under the stated policy, imposing a specific language without opt-in is a natural-language policy violation.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
40% confidence
Finding

Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.

Content

Scanner excerpt · package.json (reported line 27)May include surrounding context.

json
"test": "hardhat test"
  },
  "devDependencies": {
    "@nomicfoundation/hardhat-toolbox": "^5.0.0",
    "@types/node": "^20.12.7",
    "hardhat": "^2.22.3",
    "ts-node": "^10.9.2",

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
40% confidence
Finding

Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.

Content

Scanner excerpt · package.json (reported line 28)May include surrounding context.

json
},
  "devDependencies": {
    "@nomicfoundation/hardhat-toolbox": "^5.0.0",
    "@types/node": "^20.12.7",
    "hardhat": "^2.22.3",
    "ts-node": "^10.9.2",
    "typescript": "^5.4.5"

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
40% confidence
Finding

Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.

Content

Scanner excerpt · package.json (reported line 29)May include surrounding context.

json
"devDependencies": {
    "@nomicfoundation/hardhat-toolbox": "^5.0.0",
    "@types/node": "^20.12.7",
    "hardhat": "^2.22.3",
    "ts-node": "^10.9.2",
    "typescript": "^5.4.5"
  },

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
40% confidence
Finding

Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.

Content

Scanner excerpt · package.json (reported line 30)May include surrounding context.

json
"@nomicfoundation/hardhat-toolbox": "^5.0.0",
    "@types/node": "^20.12.7",
    "hardhat": "^2.22.3",
    "ts-node": "^10.9.2",
    "typescript": "^5.4.5"
  },
  "dependencies": {

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
40% confidence
Finding

Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.

Content

Scanner excerpt · package.json (reported line 31)May include surrounding context.

json
"@types/node": "^20.12.7",
    "hardhat": "^2.22.3",
    "ts-node": "^10.9.2",
    "typescript": "^5.4.5"
  },
  "dependencies": {
    "commander": "^14.0.3",

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
40% confidence
Finding

Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.

Content

Scanner excerpt · package.json (reported line 34)May include surrounding context.

json
"typescript": "^5.4.5"
  },
  "dependencies": {
    "commander": "^14.0.3",
    "dotenv": "^17.2.4",
    "eth-crypto": "^3.1.0",
    "ethers": "^6.13.5"

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
40% confidence
Finding

Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.

Content

Scanner excerpt · package.json (reported line 35)May include surrounding context.

json
},
  "dependencies": {
    "commander": "^14.0.3",
    "dotenv": "^17.2.4",
    "eth-crypto": "^3.1.0",
    "ethers": "^6.13.5"
  }

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
40% confidence
Finding

Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.

Content

Scanner excerpt · package.json (reported line 36)May include surrounding context.

json
"dependencies": {
    "commander": "^14.0.3",
    "dotenv": "^17.2.4",
    "eth-crypto": "^3.1.0",
    "ethers": "^6.13.5"
  }
}

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
40% confidence
Finding

Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.

Content

Scanner excerpt · package.json (reported line 37)May include surrounding context.

json
"commander": "^14.0.3",
    "dotenv": "^17.2.4",
    "eth-crypto": "^3.1.0",
    "ethers": "^6.13.5"
  }
}

Static analysis

No suspicious patterns detected.