Back to skill

Security audit

Binance Crypto Market Rank

Security checks for vulnerabilities and agentic risk

Overview

This skill is a straightforward Binance Web3 market-ranking helper with disclosed external API lookups and no hidden persistence or credential access.

Install only if you are comfortable with the agent making live requests to Binance Web3 for crypto rankings and potentially showing public wallet leaderboard details such as addresses, labels, balances, and trading performance. Treat the data as informational rather than financial advice, and prefer explicit ranking requests to avoid unnecessary lookups.

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

Note
Location
scripts/rankings.sh:10
Finding

Unvalidated Arguments Permit Binance API Request Manipulation

Content
View full analysis
/dev/null || echo "Parse error" ;; smart-money) if [ -z "$CHAIN_ID" ]; then CHAIN_ID="56" fi curl -s -X POST \ 'https://web3.binance.com/bapi/defi/v1/public/wallet-direct/tracker/wallet/token/inflow/rank/query/ai' \ -H 'Content-Type: application/json' \ -H 'Accept-Encoding: identity' \ -H 'User-Agent: binance-web3/2.1 (Skill)' \ -d "{\"chainId\":\"${CHAIN_ID}\",\"period\":\"24h\",\"tagType\":2}" \ | python3 -m json.tool 2>/dev/null || echo "Parse error" ;; meme) if [ -z "$CHAIN_ID" ]; then CHAIN_ID="56" fi curl -s \ "https://web3.binance.com/bapi/defi/v1/public/wallet-direct/buw/wallet/market/token/pulse/exclusive/rank/list/a ...[truncated 3112 chars]
Remediation
View remediation
&2 exit 1 ;; esac ``` 2. Require `LIMIT` to be an integer within the documented range: ```bash if ! [[ "$LIMIT" =~ ^[0-9]+$ ]] || (( LIMIT < 1 || LIMIT > 200 )); then echo "Limit must be an integer between 1 and 200" >&2 exit 1 fi ``` 3. Construct POST bodies with a JSON serializer instead of string concatenation. For example: ```bash if [ -n "$CHAIN_ID" ]; then BODY="$(jq -n \ --argjson rankType "$RANK_TYPE" \ --argjson size "$LIMIT" \ --arg chainId "$CHAIN_ID" \ '{rankType:$rankType, period:50, sortBy:70, orderAsc:false, page:1, size:$size, chainId:$chainId}')" else BODY="$(jq -n \ --argjson rankType "$RANK_TYPE" \ --argjson size "$LIMIT" \ '{rankType:$rankType, period:50, sortBy:70, orderAsc:false, page:1, size:$size}')" fi ``` 4. For GET requests, use `curl --get` with `--data-urlencode` for every query parameter instead of manually concatenating query strings. 5. Add automated tests covering unsupported chains, quotation marks, ampersands, control characters, nonnumeric limits, negative limits, and values above 200. 6. Use `curl --fail-with-body --show-error` and check API success fields so malformed or rejected requests cannot be silently presented as valid ranking results. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (11)

External Script Fetching

High
Category
Supply Chain
Confidence
90% confidence
Finding

Remote code is downloaded and executed. This bypasses code review and could introduce malicious code.

Content

Scanner excerpt · scripts/rankings.sh (reported line 38)May include surrounding context.

sh
fi
    BODY="${BODY}}"

    curl -s -X POST \
      'https://web3.binance.com/bapi/defi/v1/public/wallet-direct/buw/wallet/market/token/pulse/unified/rank/list/ai' \
      -H 'Content-Type: application/json' \
      -H 'Accept-Encoding: identity' \

External Script Fetching

High
Category
Supply Chain
Confidence
90% confidence
Finding

Remote code is downloaded and executed. This bypasses code review and could introduce malicious code.

Content

Scanner excerpt · scripts/rankings.sh (reported line 50)May include surrounding context.

sh
if [ -z "$CHAIN_ID" ]; then
      CHAIN_ID="56"
    fi
    curl -s -X POST \
      'https://web3.binance.com/bapi/defi/v1/public/wallet-direct/tracker/wallet/token/inflow/rank/query/ai' \
      -H 'Content-Type: application/json' \
      -H 'Accept-Encoding: identity' \

External Script Fetching

High
Category
Supply Chain
Confidence
90% confidence
Finding

Remote code is downloaded and executed. This bypasses code review and could introduce malicious code.

Content

Scanner excerpt · scripts/rankings.sh (reported line 62)May include surrounding context.

sh
if [ -z "$CHAIN_ID" ]; then
      CHAIN_ID="56"
    fi
    curl -s \
      "https://web3.binance.com/bapi/defi/v1/public/wallet-direct/buw/wallet/market/token/pulse/exclusive/rank/list/ai?chainId=${CHAIN_ID}" \
      -H 'Accept-Encoding: identity' \
      -H 'User-Agent: binance-web3/2.1 (Skill)' \

External Script Fetching

High
Category
Supply Chain
Confidence
90% confidence
Finding

Remote code is downloaded and executed. This bypasses code review and could introduce malicious code.

Content

Scanner excerpt · scripts/rankings.sh (reported line 72)May include surrounding context.

sh
if [ -z "$CHAIN_ID" ]; then
      CHAIN_ID="CT_501"
    fi
    curl -s \
      "https://web3.binance.com/bapi/defi/v1/public/wallet-direct/market/leaderboard/query/ai?tag=ALL&pageNo=1&chainId=${CHAIN_ID}&pageSize=${LIMIT}&sortBy=0&orderBy=0&period=30d" \
      -H 'Accept-Encoding: identity' \
      -H 'User-Agent: binance-web3/2.1 (Skill)' \

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
94% confidence
Finding

The skill explicitly instructs the agent to execute shell scripts immediately, but it declares no tool scope or permission boundary. This creates an authorization gap where an orchestrator may expose shell execution without an explicit allowlist, increasing the chance of unintended command execution or policy bypass.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The description is broad enough to trigger on generic market, token, and trader questions, which can cause the skill to activate outside a narrowly intended context. Because the skill then pushes immediate script execution, over-broad routing raises the risk of unnecessary external calls and exposure of wallet-performance data when a safer or more limited response would suffice.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

The skill includes an address PnL leaderboard and trader performance data but provides no warning that it may surface wallet addresses, labels, and profit metrics. In a public crypto context this can still enable doxxing-like aggregation, unwanted profiling, or unsafe sharing of sensitive financial behavior without user awareness.

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 · SKILL.md (reported line 182)May include surrounding context.

Example Request

bash
curl -X POST 'https://web3.binance.com/bapi/defi/v1/public/wallet-direct/buw/wallet/market/token/pulse/unified/rank/list/ai' \
-H 'Content-Type: application/json' \
-H 'Accept-Encoding: identity' \
-H 'User-Agent: binance-web3/2.1 (Skill)' \

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 · SKILL.md (reported line 255)May include surrounding context.

Example Request

bash
curl -X POST 'https://web3.binance.com/bapi/defi/v1/public/wallet-direct/tracker/wallet/token/inflow/rank/query/ai' \
-H 'Content-Type: application/json' \
-H 'Accept-Encoding: identity' \
-H 'User-Agent: binance-web3/2.1 (Skill)' \

External Transmission

Medium
Category
Data Exfiltration
Confidence
70% 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 · scripts/rankings.sh (reported line 38)May include surrounding context.

sh
fi
    BODY="${BODY}}"

    curl -s -X POST \
      'https://web3.binance.com/bapi/defi/v1/public/wallet-direct/buw/wallet/market/token/pulse/unified/rank/list/ai' \
      -H 'Content-Type: application/json' \
      -H 'Accept-Encoding: identity' \

External Transmission

Medium
Category
Data Exfiltration
Confidence
70% 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 · scripts/rankings.sh (reported line 50)May include surrounding context.

sh
if [ -z "$CHAIN_ID" ]; then
      CHAIN_ID="56"
    fi
    curl -s -X POST \
      'https://web3.binance.com/bapi/defi/v1/public/wallet-direct/tracker/wallet/token/inflow/rank/query/ai' \
      -H 'Content-Type: application/json' \
      -H 'Accept-Encoding: identity' \

Static analysis

No suspicious patterns detected.