Back to skill

Security audit

AVE Cloud Skill

Security checks for vulnerabilities and agentic risk

Overview

The skill mostly does the advertised AVE Cloud crypto-data lookup work, but its pro-mode Docker server and credential handling are broader and less clearly bounded than users should accept without review.

Install only if you are comfortable giving this skill an AVE API key, outbound network access to AVE endpoints, and Docker control on the host. Avoid pro-mode server commands on shared machines, inspect for an existing ave-cloud-server container first, and prefer pinned dependencies/base images before production use.

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

T08 · Insecure Dependencies

Warning
Location
scripts/requirements.txt:1
Finding

Unpinned Python Dependencies Permit Unreviewed Supply-Chain Changes

Content
View full analysis
=2.28.0 requests-ratelimiter>=0.4.0 websocket-client>=1.6.0 ``` ### Technical Analysis All three dependencies use open-ended minimum-version constraints and lack package hashes. Each future installation may consequently resolve to a different dependency version than the one reviewed during this audit. If a dependency publisher account, package release, or transitive dependency is compromised, a malicious version satisfying these constraints could be installed automatically. The installed libraries execute in the same Python process as the Skill and therefore inherit its environment, filesystem access, and network access. In particular, this process can access `AVE_API_KEY`. This finding does not establish that any currently named package is malicious. The vulnerability is the absence of controls that guarantee reproducible, reviewed dependency resolution. ### Attack Path 1. An upstream package or one of its transitive dependencies publishes a compromised version that still satisfies the declared minimum constraint. 2. A user builds the Docker image or runs `pip install -r scripts/requirements.txt`. 3. `pip` resolves and installs the newer compromised package because no exact version or hash is enforced. 4. The malicious package executes when imported or used by the REST or WebSocket client. 5. It can read the Skill process's environment, including `AVE_API_KEY`, access files available to that process, and initiate network connections. ### Impact Assessment Successful exploitation grants code execution with the privileges of the user or container running the Skill. In a local installation, this can expose files and environment variables accessible to that user. In the provided container workflow, the immediate scope is generally limited to the container, but th ...[truncated 86 chars]
Remediation
View remediation
requests-ratelimiter== websocket-client== ``` 2. Generate a lock file containing all transitive dependencies. 3. Require package hashes during installation using a hash-locked requirements file and `pip install --require-hashes`. 4. Obtain packages only from a controlled package index or explicitly configured trusted index. 5. Use automated dependency scanning and update packages through reviewed pull requests. 6. Rebuild and test the Skill whenever a pinned dependency is updated. ]]>

T08 · Insecure Dependencies

Warning
Location
scripts/Dockerfile.txt:1
Finding

Mutable Docker Base Image Prevents Reproducible and Verifiable Builds

Content
View full analysis
Remediation
View remediation
``` 2. Record the expected image provenance and verify signatures or attestations in CI. 3. Update the digest only through a reviewed dependency-update process. 4. Pin Python dependencies and enforce hashes during the image build. 5. Generate an SBOM for each image and scan both the operating-system packages and Python dependencies. 6. Consider running the resulting container as a dedicated non-root user to reduce the impact of a compromised component. ]]>

T05 · Unauthorized Access and Privilege Escalation

Warning
Location
scripts/ave_data_wss.py:308
Finding

Fixed Container Name Allows Operations Against an Unrelated Container

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
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Behavioral ASTexec() Call, eval() Call, Dynamic Import
Findings (21)

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
91% confidence
Finding

The skill invokes Python, reads environment variables, performs network access, and supports shell/Docker execution, but it does not declare an explicit tool scope such as permissions or allowed-tools. That increases the chance an agent runtime grants broader capabilities than intended, making accidental or unsafe invocation easier and reducing policy enforcement around sensitive actions like shell execution and outbound requests.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The trigger text is broad enough to match many generic queries involving on-chain token data or DEX analytics, which can cause unintended auto-invocation of a skill that has network, shell, and environment access. In an agent ecosystem, overbroad routing expands the skill's opportunity to act on prompts it should not handle, increasing exposure to prompt-injection chains, unnecessary secret use, or execution of external calls without clear user intent.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
75% confidence
Finding

Docker image references without a specific tag (:latest is implicit) or digest (@sha256:...) can be silently replaced by a malicious image.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
75% confidence
Finding

Docker image references without a specific tag (:latest is implicit) or digest (@sha256:...) can be silently replaced by a malicious image.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

This code file performs multiple outbound HTTP requests to a remote API and sends the user's API key in headers, but the only top-level description is a brief usage docstring that does not warn that inputs and authentication data will be transmitted to an external service. Under the code-file criteria, network calls that transmit user or system data should have some visible disclosure through comments, docstrings, or user-facing output.

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 · references/api-endpoints.md (reported line 25)May include surrounding context.

md
import urllib.parse
import urllib.request

V2_BASE = "https://data.ave-api.xyz/v2"
WSS_BASE = "wss://wss.ave-api.xyz"
VALID_WSS_INTERVALS = ("s1", "k1", "k5", "k15", "k30", "k60", "k120", "k240", "k1440", "k10080")

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/ave_data_rest.py (reported line 19)May include surrounding context.

python
import urllib.parse
import urllib.request

V2_BASE = "https://data.ave-api.xyz/v2"
WSS_BASE = "wss://wss.ave-api.xyz"
VALID_WSS_INTERVALS = ("s1", "k1", "k5", "k15", "k30", "k60", "k120", "k240", "k1440", "k10080")

subprocess module call

Medium
Category
Dangerous Code Execution
Confidence
70% confidence
Finding

subprocess module calls execute external commands. Without careful input validation, this enables command injection.

Content

Scanner excerpt · scripts/ave_data_rest.py (reported line 187)May include surrounding context.

python
def _server_is_running():
    r = subprocess.run(
        ["docker", "inspect", "--format={{.State.Running}}", SERVER_CONTAINER],
        capture_output=True, text=True,
    )

subprocess module call

Medium
Category
Dangerous Code Execution
Confidence
70% confidence
Finding

subprocess module calls execute external commands. Without careful input validation, this enables command injection.

Content

Scanner excerpt · scripts/ave_data_rest.py (reported line 195)May include surrounding context.

python
def _exec_in_server(argv):
    result = subprocess.run(
        ["docker", "exec", SERVER_CONTAINER, "python", "scripts/ave_data_rest.py"] + list(argv),
    )
    sys.exit(result.returncode)

subprocess module call

Medium
Category
Dangerous Code Execution
Confidence
70% confidence
Finding

subprocess module calls execute external commands. Without careful input validation, this enables command injection.

Content

Scanner excerpt · scripts/ave_data_wss.py (reported line 39)May include surrounding context.

python
def _send_to_server(line):
    result = subprocess.run(
        ["docker", "exec", SERVER_CONTAINER, "sh", "-c",
         f"echo {shlex.quote(line)} > {SERVER_FIFO}"],
        capture_output=True, text=True,

subprocess module call

Medium
Category
Dangerous Code Execution
Confidence
70% confidence
Finding

subprocess module calls execute external commands. Without careful input validation, this enables command injection.

Content

Scanner excerpt · scripts/ave_data_wss.py (reported line 338)May include surrounding context.

python
if _server_is_running():
        print(f"Server already running: {SERVER_CONTAINER}", file=sys.stderr)
        return
    subprocess.run(["docker", "rm", "-f", SERVER_CONTAINER], capture_output=True)
    key = get_api_key()
    result = subprocess.run([
        "docker", "run", "-d", "--name", SERVER_CONTAINER,

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

For a skill whose stated purpose is querying on-chain data, spawning and controlling Docker containers grants broader host orchestration capability than functionally necessary. In environments where the skill can be triggered indirectly, this increases the blast radius from simple data access to local container lifecycle management and secret propagation.

Content

No source excerpt is available for this finding.

subprocess module call

Medium
Category
Dangerous Code Execution
Confidence
86% confidence
Finding

The code starts a Docker container and injects the AVE API key into its environment, extending secret exposure from the current process to another runtime boundary. Any process or user with access to Docker inspect/logs or the container environment may be able to recover the key, so compromise of the local Docker environment can leak credentials.

Content

Scanner excerpt · scripts/ave_data_wss.py (reported line 340)May include surrounding context.

python
return
    subprocess.run(["docker", "rm", "-f", SERVER_CONTAINER], capture_output=True)
    key = get_api_key()
    result = subprocess.run([
        "docker", "run", "-d", "--name", SERVER_CONTAINER,
        "-e", f"AVE_API_KEY={key}",
        "-e", "API_PLAN=pro",

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The Docker run command explicitly forwards the AVE API key into the container environment without a strong warning or stronger secret-handling mechanism. This increases the chance of credential disclosure through container inspection, debugging tools, or accidental environment exposure, especially on shared developer machines.

Content

No source excerpt is available for this finding.

subprocess module call

Medium
Category
Dangerous Code Execution
Confidence
70% confidence
Finding

subprocess module calls execute external commands. Without careful input validation, this enables command injection.

Content

Scanner excerpt · scripts/ave_data_wss.py (reported line 356)May include surrounding context.

python
def cmd_stop_server(args):
    result = subprocess.run(
        ["docker", "rm", "-f", SERVER_CONTAINER], capture_output=True, text=True,
    )
    if result.returncode == 0:

subprocess module call

Medium
Category
Dangerous Code Execution
Confidence
70% confidence
Finding

subprocess module calls execute external commands. Without careful input validation, this enables command injection.

Content

Scanner excerpt · scripts/ave_data_wss.py (reported line 413)May include surrounding context.

python
_send_to_server("subscribe price " + " ".join(args.tokens))
                return
            if args.command == "wss-repl":
                r = subprocess.run(
                    ["docker", "exec", "-it", SERVER_CONTAINER,
                     "python", "scripts/ave_data_wss.py", "wss-repl"],
                )

Context-Inappropriate Capability

Low
Category
Not specified by scanner
Confidence
80% confidence
Finding

The manifest describes AVE Cloud data access and real-time subscriptions, but serve establishes a local named pipe and daemon loop to receive commands, effectively implementing a local control server. This is not directly surfaced in the skill description and represents extra operational capability beyond straightforward API querying/subscription.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
95% confidence
Finding

The dependency specification uses a lower-bound-only version constraint (requests>=2.28.0), which allows installation of any newer release without review and makes builds non-reproducible. This increases supply-chain risk and complicates determining whether a deployed environment includes a vulnerable or incompatible version of requests.

Content

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

text
requests>=2.28.0
requests-ratelimiter>=0.4.0
websocket-client>=1.6.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
92% confidence
Finding

The manifest includes requests without an exact version pin, and the package has multiple known advisories across historical releases. Because the installed version cannot be verified from this file, there is a real risk that an affected release could be pulled into an environment, especially in automated or fresh installations.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
94% confidence
Finding

requests-ratelimiter>=0.4.0 is unpinned, so future installs may resolve to different versions over time. That weakens reproducibility and exposes the skill to unexpected supply-chain changes or newly introduced vulnerabilities in transitive dependencies.

Content

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

text
requests>=2.28.0
requests-ratelimiter>=0.4.0
websocket-client>=1.6.0

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
94% confidence
Finding

websocket-client>=1.6.0 permits any later version, making dependency resolution variable across environments. For a skill that may support real-time WebSocket features, unreviewed upgrades can introduce security regressions or breaking behavior in network-facing code.

Content

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

text
requests>=2.28.0
requests-ratelimiter>=0.4.0
websocket-client>=1.6.0

Static analysis

No suspicious patterns detected.