Back to skill

Security audit

crypto-watch-skill

Security checks for vulnerabilities and agentic risk

Overview

This is a coherent crypto market-data and technical-analysis skill, but users should treat its leveraged trading outputs as informational rather than personal financial advice.

Install and run this only in a normal virtual environment with reviewed dependency versions if possible. Expect it to contact OKX and alternative.me for public market data. Do not provide exchange API keys or let an agent trade for you based on this skill; treat leverage, entry, stop-loss, and position-size outputs as educational analysis that requires your own judgment.

Vulnerability Patterns
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (1)

T08 · Insecure Dependencies

Warning
Location
requirements.txt:1
Finding

Unbounded and Unverified Third-Party Dependencies

Content
View full analysis
=2.0.0 numpy>=1.24.0 requests>=2.31.0 urllib3>=2.0.0 ``` ### Technical Analysis All dependencies use lower-bound-only version constraints. Consequently, a future installation may retrieve any newer release accepted by the Python package resolver. The file also provides no cryptographic hashes to verify downloaded distributions. This makes installations non-reproducible and exposes the project to upstream package compromise, malicious future releases, dependency-resolution changes, and newly introduced vulnerabilities. The packages currently named are legitimate mainstream packages, and the audit found no evidence that the project intentionally references a malicious or typosquatted dependency. The risk arises from the dependency policy rather than a known malicious package in the reviewed snapshot. The documented installation command, `pip install -r requirements.txt`, executes package build and installation logic. If the resolver selects a compromised package release or transitive dependency, attacker-controlled installation or runtime code can execute with the privileges of the user running `pip`. ### Attack Path 1. An attacker compromises an allowed upstream package release, its publishing account, distribution infrastructure, or an unconstrained transitive dependency. 2. The attacker publishes a version newer than the minimum specified in `requirements.txt`. 3. A user or automated deployment follows the documented setup procedure and runs: ```bash pip install -r requirements.txt ``` 4. Pip resolves the compromised release because no upper bound, exact version, lock file, or hash prevents its selection. 5. Malicious package installation hooks, build-system logic, or imported runtime code executes in the installation e ...[truncated 1063 chars]
Remediation
View remediation
numpy== requests== urllib3== ``` 2. Generate a deterministic lock file that includes all transitive dependencies. Tools such as `pip-tools`, Poetry, or uv can be used to resolve and maintain the complete dependency graph. 3. Require cryptographic hashes during installation: ```bash pip install --require-hashes -r requirements.txt ``` Generate the corresponding hash-pinned requirements file from trusted artifacts. 4. Configure pip to use an explicitly trusted package index and disallow unexpected supplemental indexes where dependency confusion could occur. 5. Install dependencies in an isolated, non-privileged virtual environment or container. Do not run dependency installation as root. 6. Add automated dependency auditing with tools such as `pip-audit` and dependency update review through a controlled pull-request process. 7. Rebuild and test the lock file periodically so security updates are adopted intentionally rather than automatically accepting every future release. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • 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
Findings (27)

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · .gitignore (reported line 24)May include surrounding context.

text
*.egg

# Virtual environments
.env
.venv
env/
venv/

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding

This second mismatch finding indicates the skill description promises extensive market-data and analysis behavior, while the analyzed implementation reportedly lacks those capabilities and may perform undeclared local output instead. Such undocumented behavior undermines trust boundaries and can conceal side effects that an agent or user did not consent to.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

This second mismatch finding indicates the skill description promises extensive market-data and analysis behavior, while the analyzed implementation reportedly lacks those capabilities and may perform undeclared local output instead. Such undocumented behavior undermines trust boundaries and can conceal side effects that an agent or user did not consent to.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
82% confidence
Finding

The skill advertises executable workflows that read local reference files and invoke Python scripts making external network requests, but it declares no explicit tool scope or permission boundaries. In an agent environment, that can cause over-broad access assumptions and make it easier for the skill to be executed with more capabilities than intended.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The trigger conditions are broad enough to capture generic market or sentiment questions, which can force this skill to activate outside its narrow intended scope. Over-broad activation is risky in agent systems because it can route unrelated user requests to code paths with network and file capabilities unnecessarily.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
86% confidence
Finding

The skill includes trading-oriented interpretations and decision flow that can be read as actionable financial guidance without a clear, prominent informational-only disclaimer. In this context, that raises misuse and compliance risk, especially because the skill is framed as mandatory for crypto queries and includes signal interpretations like buying or selling opportunities.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

One-word parameter extraction triggers like asset names are too ambiguous for reliable routing and can accidentally activate the skill on unrelated mentions. While not a direct code-execution flaw, this increases the chance of unintended tool use and misleading outputs.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

This reference document gives prescriptive trading actions such as 'strong short signal' and leverage-positioning guidance without any balancing risk disclosure, uncertainty language, or suitability constraints. In a skill explicitly intended for crypto market analysis, that can cause the agent to present speculative financial content as actionable advice, increasing the chance of harmful trading decisions and losses.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The skill explicitly instructs the agent to generate leveraged trading plans, including recommended leverage, entry, stop loss, take profit, and position sizing, but provides no user-facing warning that this is risky financial content and not personalized financial advice. In a crypto-trading context, this omission is especially dangerous because users may rely on the output as actionable investment guidance and incur significant losses, particularly when leverage is encouraged.

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 · scripts/crypto_data.py (reported line 89)May include surrounding context.

python
def get_fear_greed_index(days: int = 7) -> Optional[pd.DataFrame]:
    """Get Fear & Greed Index historical data (alternative.me)."""
    url = "https://api.alternative.me/fng/"
    params = {"limit": days}
    try:
        logger.info("Fetching Fear & Greed index: days=%d", days)

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The top-level docstring explicitly says 'pure computation' and emphasizes only the absence of network access. In practice, the code later creates a result directory and writes analysis output to disk, so the documentation actively understates the module's side effects in a way that contradicts the implementation.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The module docstring at L003-L006 frames this file as a pure computation component that only operates on externally provided data. However, analyze_all_assets creates a local directory and writes a timestamped JSON output file, which is a side effect beyond pure computation. While local file I/O may be useful, it is not reflected in the module-level description.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
82% confidence
Finding

This markdown file describes real-time data retrieval from OKX and later references the Fear and Greed Index from alternative.me, which implies outbound network requests to third-party services. While installation notes mention network access as a prerequisite, the README does not clearly warn users that using the skill sends requests to external services and may expose metadata such as IP address or query parameters.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
76% confidence
Finding

该文件主体内容以中文呈现,属于自然语言层面的语言/区域设置约束。虽然 L003 提供了英文 README 链接,但本文件本身未说明技能会根据用户偏好选择语言,存在默认强制特定语言的倾向。

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Low
Category
Not specified by scanner
Confidence
93% confidence
Finding

The metadata lists "multilingual_support" in test coverage, yet every test case shown is tagged "english" and all prompts are written in English. This creates a mismatch between what the evaluation file claims to cover and what it actually defines.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
81% confidence
Finding

This manifest-like JSON file states test coverage includes "multilingual_support", yet every listed prompt and language tag in the test cases is English-only. That creates a natural-language policy concern because the file implicitly represents broader language support without offering user language choice or demonstrating opt-in for other locales.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
97% confidence
Finding

The dependency is specified with a lower-bound version only, which allows future unreviewed releases to be installed. This weakens build reproducibility and can inadvertently introduce vulnerable or breaking versions through normal dependency resolution.

Content

Scanner excerpt · requirements.txt (reported line 1)May include surrounding context.

text
pandas>=2.0.0
numpy>=1.24.0
requests>=2.31.0
urllib3>=2.0.0

Unverifiable Dependency: pandas has 1 known advisory(ies) (CVE-2020-13091 (** DISPUTED ** pandas through 1.0.3 can unserialize and execute commands from an)), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
81% confidence
Finding

Because pandas is not pinned, it is impossible to verify from this manifest whether the deployed version includes or avoids known advisories. The cited risk is limited here because the advisory is disputed and the file alone does not prove a vulnerable version is installed, but the lack of pinning still prevents dependable security assessment.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
97% confidence
Finding

The numpy requirement is unpinned and permits any version at or above the minimum, including future releases not yet assessed by the maintainer. This creates supply-chain and reproducibility risk because installations may differ over time and pull in insecure versions.

Content

Scanner excerpt · requirements.txt (reported line 2)May include surrounding context.

text
pandas>=2.0.0
numpy>=1.24.0
requests>=2.31.0
urllib3>=2.0.0

Unverifiable Dependency: numpy has 16 known advisory(ies) (CVE-2014-1859 (Numpy arbitrary file write via symlink attack); CVE-2021-41495 (NumPy NULL Pointer Dereference); CVE-2021-33430 (NumPy Buffer Overflow (Disputed)) +13 more), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
90% confidence
Finding

The manifest does not identify the exact numpy version, so known vulnerabilities cannot be ruled out for actual deployments. This is dangerous because security posture becomes unverifiable, even if the minimum version itself is not obviously affected.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
98% confidence
Finding

The requests package is unpinned, so deployments may automatically consume newly published versions or resolver-selected transitive combinations without review. Because requests is network-facing and commonly handles authentication, an insecure selected version could expose outbound request handling to known flaws.

Content

Scanner excerpt · requirements.txt (reported line 3)May include surrounding context.

text
pandas>=2.0.0
numpy>=1.24.0
requests>=2.31.0
urllib3>=2.0.0

Unverifiable Dependency: requests has 16 known advisory(ies) (CVE-2014-1830 (Exposure of Sensitive Information to an Unauthorized Actor in Requests); CVE-2024-47081 (Requests vulnerable to .netrc credentials leak via malicious URLs); CVE-2024-35195 (Requests `Session` object does not verify requests after making first request wi) +13 more), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
94% confidence
Finding

Requests has multiple published advisories and the unpinned manifest makes it unknown whether runtime environments will install an affected version. In a crypto and market-data skill that likely performs external HTTP requests, uncertainty around requests versions is more concerning because network parsing and credential handling are directly relevant.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
98% confidence
Finding

The urllib3 dependency is not pinned and may resolve to different versions across environments, including releases with network security defects. Since urllib3 underpins HTTP transport behavior, vulnerable versions can materially affect TLS, redirect, proxy, or decompression handling.

Content

Scanner excerpt · requirements.txt (reported line 4)May include surrounding context.

text
pandas>=2.0.0
numpy>=1.24.0
requests>=2.31.0
urllib3>=2.0.0

Unverifiable Dependency: urllib3 has 16 known advisory(ies) (CVE-2025-66471 (urllib3 streaming API improperly handles highly compressed data); CVE-2024-37891 (urllib3's Proxy-Authorization request header isn't stripped during cross-origin ); CVE-2026-21441 (Decompression-bomb safeguards bypassed when following HTTP redirects (streaming ) +13 more), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
95% confidence
Finding

The exact urllib3 version cannot be verified from this requirement, so known network-stack advisories may still apply in some installations. This matters more in this skill context because crypto market tooling is expected to retrieve remote data frequently, making HTTP client robustness and safe redirect/decompression behavior operationally important.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Low
Category
Not specified by scanner
Confidence
94% confidence
Finding

The manifest and module docstring describe a skill for fetching and analyzing cryptocurrency and precious-metals market data, which implies read-oriented data retrieval and transformation. However, save_to_csv adds a persistent local write side effect by exporting arbitrary DataFrames to a caller-supplied filename, which is not mentioned in the stated skill behavior.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.