Back to skill

Security audit

CryptoRank

Security checks for vulnerabilities and agentic risk

Overview

The skill mostly fetches CryptoRank data as advertised, but it automatically adds third-party Telegram and YouTube links to normal results, so users should review it before installing.

Review before installing if outputs may be reused in reports, posts, automations, or customer-facing summaries, because the skill injects publisher-controlled Telegram and YouTube links into routine results. The CryptoRank data access itself appears purpose-aligned and I found no evidence of credential theft, persistence, destructive actions, or remote code execution.

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

T01 · Skill Instruction Hijacking

Warning
Location
scripts/run_skill.py:17
Finding

Mandatory Promotional Links Injected into Skill Results

Content
View full analysis
str: if mode == "raw" or output == "json": return text footer_builder = getattr(module, "support_footer", None) if callable(footer_builder): return f"{text}\n{footer_builder(lang)}" lines = [ "", "如果你在安装、调用或使用中遇到问题,可继续:" if lang == "zh" else "If you run into setup, call, or usage issues, continue here:", f"- {'社区排障' if lang == 'zh' else 'Community'}: {SUPPORT_LINKS['community']}", f"- {'机器人版本' if lang == 'zh' else 'Bot'}: {SUPPORT_LINKS['bot']}", f"- {'视频教程' if lang == 'zh' else 'Tutorial'}: {SUPPORT_LINKS['tutorial']}", ] return f"{text}\n" + "\n".join(lines) ``` `scripts/run_skill.py:55-76` ```python def normalize_output(module, text: str, output: str, mode: str, limit: int, lang: str, raw_mode: str | None) -> str: text = with_support_footer(module, text, output, mode, lang) if output == "text": return text if output == "markdown": title = f"# CryptoRank {mode} output" if lang == "zh": title = f"# CryptoRank {mode} 输出" return f"{title}\n\n```text\n{text}\n```" payload: dict[str, Any] = { "skill": "cryptorank-radar", "mode": mode, "limit": limit, "lang": lang, "output": output, "source": "free-layer", "support_links": SUPPORT_LINKS, } ``` `scripts/run_ski ...[truncated 3211 chars]
Remediation
View remediation
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • 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
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
Findings (17)

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The declared purpose describes a CryptoRank market-intelligence skill, but the referenced code inventory includes packaging/build automation, filesystem traversal, and zip creation that are not disclosed in the user-facing purpose. This mismatch is dangerous because deceptive or incomplete capability descriptions can hide sensitive local file access or artifact creation behind an innocuous business label, undermining trust and review controls.

Content

No source excerpt is available for this finding.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
- `assets/cryptorank_demo.py` - 自包含的 CryptoRank Python CLI 副本

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
85% confidence
Finding

The skill metadata indicates executable behavior with environment-variable access and likely network use, but it does not declare any explicit tool scope such as permissions or allowed-tools. This creates an authorization transparency gap: a reviewer or runtime may not understand the skill's effective capabilities, increasing the risk of over-privileged execution or unexpected external access.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The manifest description explicitly brands this as a Chinese skill and frames invocation around producing Chinese Web3 summaries. Because the policy applies to natural-language locale constraints, forcing or strongly defaulting a specific language without user choice is a potential locale-policy violation unless clearly opt-in or justified.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The line '默认优先使用中文输出' directs the skill to prioritize Chinese output regardless of whether the user requested that language. The policy allows locale choice when offered explicitly, but this instruction imposes a default language preference in natural-language guidance.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The file sets OUTPUT_LANG = "zh" as the default output language, which imposes a specific locale unless the user explicitly overrides it. Under the policy, forcing a language without prior opt-in is a natural-language policy violation even though an English option exists later.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The skill hardcodes unrelated third-party Telegram and YouTube links and later injects them into user-visible output and error messages. This creates an unnecessary outbound trust channel that can steer users away from the requested CryptoRank workflow to external destinations, enabling phishing, promotion, or social-engineering risk even though it is not direct code execution.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The support footer function appends external links unrelated to the requested data summary, causing normal operation and failure paths to include unsolicited off-platform destinations. In an agent skill context this is more dangerous because users may interpret appended links as trusted, system-endorsed next steps rather than optional third-party resources.

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 · assets/cryptorank_demo.py (reported line 519)May include surrounding context.

python
}
        )
        return fetch_json(
            f"https://api.cryptorank.io/v0/drop-hunting/activities/table/public?{params}",
            headers=AIRDROP_HEADERS,
        )

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The argument parser description and help strings are written in Chinese, which creates a language-specific interface before the user can opt into a preferred locale. Because this is a general CLI rather than a clearly region-scoped tool, the file's natural-language interface violates the locale-choice policy.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The CLI unconditionally appends the support footer to every non-raw response, guaranteeing unsolicited external links in routine outputs. This systematic injection expands exposure to social-engineering and promotional abuse because every successful invocation becomes a vehicle for third-party link distribution.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The trigger phrase “看今天有什么机会” is broad and non-specific, so an agent may invoke this skill when a user is asking for general market commentary rather than explicitly requesting CryptoRank-based output. That can cause unintended tool activation, steer responses toward a specific data source or workflow, and reduce user control over when externalized summaries are used.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

Line L34 says the skill '默认使用中文输出' (defaults to Chinese output). This imposes a specific language/locale behavior in natural language without any indication that users can choose another language, which matches the policy-violation criterion for forced language without opt-in.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The code sets the default language to "zh" in both the execute() function and CLI argument parsing, which imposes a specific locale unless the user explicitly overrides it. This is a natural-language policy concern because the skill forces a language preference by default rather than offering a neutral default or requiring opt-in.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
94% confidence
Finding

The manifest description and tags explicitly label the skill as "Chinese," which indicates a language/locale constraint. There is no accompanying note that the user can choose another language or that the restriction is justified by a region-specific purpose, so this appears to violate the language/locale policy.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
86% confidence
Finding

Defaulting lang=zh based solely on the user being a Chinese user infers output preferences from user type rather than an explicit request. This can lead to mismatched language selection, reduce user autonomy, and encode unnecessary assumptions about user attributes into routing behavior.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
82% confidence
Finding

This code creates the dist directory and writes a zip archive to the filesystem, which is a file-writing operation covered by the warning requirement for code files. Although the module docstring states the script packages the skill directory, the script itself provides no explicit user-facing notice before performing the write beyond printing the resulting path afterward.

Content

No source excerpt is available for this finding.

Static analysis

Detected: suspicious.dynamic_code_execution

Dynamic code execution detected.

Critical
Code
suspicious.dynamic_code_execution
Location
scripts/run_skill.py:30