Back to skill

Security audit

Crypto Search Advisor

Security checks for vulnerabilities and agentic risk

Overview

The skill is not destructive, but it can present unverified or fabricated market and screenshot data as fresh analysis in a financial context.

Install only if you are comfortable treating its outputs as rough, unverified analysis. Do not rely on it for trading decisions, redact balances or account details from screenshots, and independently verify prices/news because the inspected code can label unverified caller-supplied or fixed data as fresh search-backed information.

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

Error
Location
scripts/crypto_advisor.py:301
Finding

Fabricated Market Data Presented as Live Search Results

Content
View full analysis
Dict[str, Any]: """ 修复:不再硬编码 $77,800-$78,200 如果 Agent 传入真实价格,使用真实价格;否则显示占位符 """ now = datetime.now().strftime('%Y-%m-%d %H:%M:%S') if real_min and real_max: price_range = f"${real_min:,.0f} - ${real_max:,.0f}" else: price_range = "等待搜索数据(Agent 未传入真实价格)" return { "source": "联网搜索聚合", "data": { "symbol": symbol, "symbol_cn": "比特币" if symbol == "BTC" else ("以太坊" if symbol == "ETH" else symbol), "category": classify_coin(symbol)['category'], "price_range": price_range, "change_24h": "+1.2%", "market_summary": f"{symbol} 近期行情(请确认 Agent 已回填真实数据)", "key_news": ["ETF净流入5亿美元", "美联储官员讲话偏鹰"], "search_time": now }, "freshness_check": { "is_fresh": True, "search_time": now, "note": "基于联网搜索,非交易所原生实时撮合数据" }, "search_availability": { "status": "search_ok", "detail": "搜索服务正常" }, "data_quality": { "source_tier": "tier2", "confidence": "medium", "cross_verified": False }, "server_time": now, "timezone": "北京时间 (UTC+8)", "delay_note": "搜索聚合行情,延迟约 1-5 分钟(非交易所原生毫秒级数据)", "boundary": "仅信息搜索与截图分析,不支持直接交易/下单/合约操作", "disclaimer": "仅信息整理与技术分析,不构成投资建议。用户需自行承担决策责任。", "screenshot_prompt": "如需精准技术分析,请发送交易所APP实时截图" } ``` ### Technical Analysis The function is advertised as a network-backed cryptocurrency search tool, but it performs no network request and does not consume search- ...[truncated 2170 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
scripts/crypto_advisor.py:348
Finding

Screenshot Analysis Trusts Caller-Supplied Prices Without Inspecting the Image

Content
View full analysis
Dict[str, Any]: """ 修复:不再硬编码 price=78146 必须由 Agent 从图像识别传入真实价格 """ now = datetime.now().strftime('%Y-%m-%d %H:%M:%S') if real_price: sc_data = { "price": real_price, "clarity": "clear", "confidence": "high", "time": now, "missing": [] } else: sc_data = { "price": None, "clarity": "unknown", "confidence": "low", "time": now, "missing": ["price"], "note": "价格未识别,Agent 未传入截图真实价格" } se_data = {"min": 0, "max": 0} return analyze(symbol, sc_data, se_data) ``` ### Technical Analysis The function accepts an `image_url` but never reads, downloads, decodes, validates, or analyzes the referenced image. Any truthy `real_price` supplied by the caller causes the input to be classified automatically as: - `clarity: "clear"` - `confidence: "high"` - No missing fields The caller-controlled price is therefore promoted to high-confidence screenshot-derived data without an image-content check. The function also assigns the current invocation time to the screenshot record instead of extracting or validating the screenshot's actual capture time. This breaks the trust boundary between unverified caller input and verified image-analysis output. It also conflicts with the declared tool capability that states the tool analyzes an uploaded exchange screenshot. ### Attack Path 1. An attacker, compromised Agent, or malformed integration supplies any value for `image_url`; the image can be unrelated, unreadable, or nonexistent. 2. The caller ...[truncated 1278 chars]
Remediation
View remediation

T08 · Insecure Dependencies

Note
Location
skill.yaml:8
Finding

Unbounded and Inconsistent Third-Party Dependency Declarations

Content
View full analysis
=2.28.0 - lxml>=4.9.0 ``` `requirements.txt`: ```text requests>=2.28.0 ``` ### Technical Analysis The dependency specifications use open-ended minimum versions, allowing installation of any future release satisfying the version constraint. This prevents reproducible dependency resolution and increases exposure to a future compromised or incompatible package release. The manifests are also inconsistent: - `skill.yaml` declares both `requests` and `lxml`. - `requirements.txt` declares only `requests`. - The reviewed runtime Python files do not import either package. No evidence was found that either dependency is currently malicious, typosquatted, or loaded from an unsafe package index. The finding concerns avoidable supply-chain exposure and configuration inconsistency rather than a confirmed malicious package. ### Attack Path 1. A user or deployment environment installs the Skill's dependencies. 2. The package resolver selects any available release satisfying the unbounded `>=` constraint. 3. A future compromised release, dependency-chain compromise, or incompatible update may be installed automatically. 4. Installed package code can execute during installation or when imported by another component in the environment. Successful exploitation depends on an upstream package or distribution-channel compromise; the project does not itself provide a direct exploitation primitive. ### Impact Assessment Python packages installed into the Skill environment generally run with the same privileges as the installing process or Skill runtime. If an upstream package were compromised, possible effects could include access to files, environment variables, network permissions, and runt ...[truncated 286 chars]
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (43)

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

The declared description promises a full cryptocurrency screenshot analysis capability: recognizing coin types and producing risk alerts and deep market analysis. The supplied code chunk does not implement those behaviors. Instead, it only accepts parameters like clarity, confidence, and missing fields, invokes assess_screenshot_quality, and outputs the result as JSON. That is a materially different and much narrower purpose—screen quality assessment rather than crypto行情 analysis. No undeclared sensitive resource access is evident, but the primary function does not match the description.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
92% confidence
Finding

The description emphasizes screenshot-driven crypto analysis with automatic coin-type recognition and risk/deep-analysis outputs. The actual code only parses --symbol and optional --price arguments, then forwards them to classify_coin. Based on this chunk alone, the implemented behavior is a command-line coin classification entry point, not screenshot ingestion or full market-analysis workflow. Some classification-related functionality may exist indirectly in classify_coin, but the major advertised capability—analyzing screenshots—is not represented here, so this is a material description/behavior mismatch.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding

The declared description promises a full cryptocurrency screenshot analysis capability with asset classification and rich risk-analysis output. In contrast, the supplied code only parses three float arguments and invokes a detect_conflict helper, suggesting a narrow validation or consistency-check function. There is no visible screenshot processing, OCR, market analysis pipeline, coin categorization, or staged warning/deep-analysis behavior in this chunk. This is a material mismatch in primary purpose and capabilities.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
92% confidence
Finding

The declared description emphasizes image/screenshot-driven crypto analysis with automatic identification and a two-stage risk/deep-analysis experience. The supplied code instead parses command-line parameters, manually assembles analysis inputs, invokes an existing analyze function, and prints JSON. While it is related to crypto analysis, the primary behavior visible here is only a thin wrapper around another module, not the advertised screenshot recognition workflow. Therefore the description materially overstates and misrepresents what this code chunk itself does.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
94% confidence
Finding

整体上,这段代码确实围绕行情分析、币种分类、快速预警和深度分析展开,与声明的大方向相符;两段式输出也真实存在(quick scan + deep analysis)。但描述有几处重要夸大/偏差。第一,代码不是真正“截图即可分析”:analyze_screenshot() 注释和逻辑都表明必须由外部 Agent 传入 real_price,代码自身没有任何图像解析或OCR实现。第二,描述强调“加密货币行情”,而 classify_coin()/analyze() 明确纳入 commodity 和 equity 两类非加密资产,并为其生成分析输出。第三,“无需API”与实现方式不完全一致:虽然文件内未直接调用外部API,但 search_crypto_info()、get_fear_greed_index()、SignalReconciliation 等设计都依赖外部搜索聚合文本、价格区间或识别结果输入,说明该技能本身不是完全自足的‘无API/无外部依赖截图分析器’。因此应判定为描述与实际行为存在实质性不匹配。

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

声明描述的是一个可直接对截图做完整加密货币行情分析的能力,包括自动识别币种类型、秒级风险预警以及后续深度分析两段式输出。实际代码却是一个“Quick Scan v3 风险警报器”,其核心原则明确限定为:只报结构风险,不给方向预测,不做完整分析。它根据外部提供的 indicators 调用 compute_indicator_signals,再结合预设触发器计算风险等级与置信度,输出的是技术结构摘要、风险等级和冷启动占位文案。代码中没有看到任何截图内容识别、OCR、图像处理、币种类别自动判定逻辑;相反,category/asset_type 是调用方传入的。所谓“深度分析”也未真正生成,只是输出“详细分析生成中...”和一些模板提示。因此,代码的实际主用途与描述存在实质差异,属于明显不匹配。

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

声明描述的是一个可直接使用的截图式加密货币行情分析技能,但提供的代码块只是测试脚本,不是技能主实现。测试确实表明底层模块可能支持币种分类、风险分析、截图质量评估、时效性与Tokenomics等分析能力,因此与“加密货币分析”大方向相关;但关键宣称能力——截图即可分析(尤其OCR/截图解析本身)、无需API/注册/翻墙、秒级预警、两段式输出——都没有在该代码块中得到实现性体现。更重要的是,这段代码的主目的实际上是验证模块行为,而不是执行用户声明中的技能功能。因此描述与所给代码块的实际行为存在实质性不匹配。

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
Not specified by scanner
Confidence
97% confidence
Finding

These examples contain concrete action directives such as reducing exposure or switching assets, which are operational trading recommendations rather than neutral analysis. Even with disclaimers, structured recommendations in a skill can be adopted by an agent as endorsed next-step guidance, increasing the risk of unsafe financial decision support and user harm.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The mainstream-coin template encodes a full trade setup via bias, focus zone, risk level below, upside targets, risk-reward estimate, and position advice. In practice, these fields function as actionable trade planning parameters, making the skill more than an analysis formatter and increasing the chance an agent will provide quasi-advisory financial instructions.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
Not specified by scanner
Confidence
97% confidence
Finding

The meme-coin section includes explicit adverse-action and exit recommendations like leaving positions or avoiding participation, which are direct behavioral instructions in a highly volatile asset class. Because meme coins are especially manipulation-prone and time-sensitive, decision-oriented outputs here are more dangerous than generic analysis and can amplify financial harm.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

This markdown file presents all user-facing documentation and CLI descriptions in Chinese only. Under the policy, forcing a specific language without user opt-in is a natural-language policy violation unless the locale constraint is clearly documented and justified, which is not present here.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The examples provide concrete trading-oriented outputs such as long bias, upside targets, position advice, and risk thresholds, which can reasonably be interpreted as actionable financial guidance. Because the file does not include a clear warning that outputs are informational only and not financial advice, users may over-trust the tool and make risky investment decisions based on incomplete or unverifiable analysis.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The heading '输出格式规范' and the rest of the document prescribe output structure entirely in Chinese, which indicates a fixed language requirement. The file does not mention user opt-in, multilingual support, or a region-specific justification, so this is a natural-language locale policy concern.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

This markdown file presents the skill instructions and usage wholly in Chinese, including headings, architecture notes, and command descriptions. Under the stated policy, forcing a specific language without user opt-in is a natural-language policy violation unless the locale restriction is documented and justified.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The README states that the agent will automatically analyze screenshots and perform online search/cross-verification, but it does not clearly warn users that screenshot contents and derived queries may be transmitted to external services. In a crypto context, screenshots can expose balances, wallet identifiers, exchange positions, or other sensitive trading data, so missing disclosure creates a meaningful privacy and operational-security risk.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

This markdown file contains all operational rules and required outputs exclusively in Chinese, including mandatory instructions and safety constraints. Under the stated policy, forcing a specific language without user opt-in or documented justification is a natural-language policy violation.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The file consistently forces a single language/locale for all user-facing description and operating instructions. Under the policy, a language constraint should either be optional for the user or explicitly justified as region-specific; neither is provided here.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The title and throughout the file define a fixed Chinese-language output specification, and the timezone examples are also fixed to Beijing time. Because the policy requires flagging language or locale constraints that are forced without user opt-in, this is a natural-language policy violation.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The document explicitly reframes the capability from market analysis into a 'trading decision system', which materially expands the skill's operational scope toward actionable financial guidance. In a crypto context, this is dangerous because downstream agents may treat the format as permission to generate decision-ready trade outputs despite the manifest and safety boundary claiming analysis-only behavior.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The document claims outputs are 'for reference only' and 'not for trading decisions' while simultaneously defining fields that encode trading decisions. This contradiction is dangerous because policy ambiguity weakens safeguards: agents or maintainers may rely on the permissive structure rather than the disclaimer, resulting in unsafe financial guidance slipping through under a veneer of compliance.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

This codebase presents the skill as Chinese-only from the top-level description, and later hard-codes user-facing timezone/locale strings such as '北京时间 (UTC+8)'. Under the policy, forcing a specific language or locale without user opt-in is a natural-language policy violation unless the regional constraint is justified and documented.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The manifest describes a cryptocurrency market advisor that identifies crypto coin types such as stablecoins, mainstream coins, Meme coins, and altcoins. However, the classifier and downstream analysis intentionally support gold/silver/oil perpetuals and stock-token/RWA symbols like TSLA and AAPL, with dedicated analysis branches and output text acknowledging these are non-crypto assets.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The returned metadata labels all times as '北京时间 (UTC+8)', and the same locale is repeated in later output formatters. This imposes a specific locale on all users without offering an alternative or explaining a region-specific requirement.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The comment and docstring state '只报结构,不给方向' and '不做方向预测'. But the implementation derives a risk direction via _derive_risk_direction and surfaces it to users as '结构倾向' with values like bearish, bullish_exhaustion, cautious, and volatile, which is active directional guidance.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The manifest emphasizes 'take a screenshot and instantly analyze crypto行情' without API, registration, or circumvention. The code goes further by incorporating ETF flows, exchange netflows, fear-greed sentiment, tokenomics, unlock schedules, and reconciliation between technical and macro/context layers, which is materially broader than simple screenshot-driven analysis.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.