Back to skill

Security audit

Axelrod

Security checks for vulnerabilities and agentic risk

Overview

This skill is a disclosed Base-chain trading integration, but it can move funds through a third-party API and has weak user-control and command-invocation boundaries.

Review before installing. Only use this with a dedicated low-balance trading account, expect prompts and account-related requests to be sent to AIxVC, require manual confirmation for every trade including small orders, and invoke the Python script with structured arguments rather than interpolating user text into a shell command.

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 (2)

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:239
Finding

Shell Command Injection Through User-Controlled Message Interpolation

Content
View full analysis
"`. ``` The same unsafe command-construction pattern also appears in the usage examples at `SKILL.md:51-60` and `SKILL.md:122-154`. ### Technical Analysis The Skill instructs the agent to insert a natural-language instruction into a quoted shell command. If the execution environment constructs this command through textual interpolation and invokes a shell, the user controls content within `""`. Double quotes are not a complete shell-escaping mechanism. A malicious instruction can contain command substitutions such as `$(command)` or backticks. It can also contain a quote that terminates the argument, followed by shell metacharacters and an additional command. The Python implementation uses `argparse` and does not itself invoke a shell. The vulnerability exists at the boundary described by `SKILL.md`: unsafe construction of the command before Python starts. Exploitation therefore requires the hosting agent or tool to execute the documented command through a shell rather than passing an argument array directly. ### Attack Path 1. An attacker submits a natural-language request containing shell syntax, such as a command substitution or a quote followed by a shell command. 2. The agent follows the mandatory Skill instruction and substitutes that request into: ```bash python skills/axelrod/scripts/axelrod_chat.py --message "" ``` 3. A shell parses the constructed string before launching Python. 4. The injected shell expression executes with the same operating-system privileges and environment as the agent. 5. The attacker may use those privileges to read accessible files, alter the ...[truncated 613 chars]
Remediation
View remediation

T08 · Insecure Dependencies

Note
Location
requirements.txt:1
Finding

Unpinned Third-Party Dependency Produces Non-Reproducible Installations

Content
View full analysis
=2.25.0 ``` The project directs users to install this mutable dependency set with: ```bash pip install -r skills/axelrod/requirements.txt ``` at `SKILL.md:32-35` and `README.md:31-34`. ### Technical Analysis The requirement specifies only a minimum version. Consequently, installations performed at different times may resolve to different future releases of `requests` and its transitive dependencies. No malicious package, typosquatted name, or currently vulnerable version was identified in the audited files. The risk is that installation is not reproducible and automatically trusts future compatible releases without review. A compromised, unexpectedly incompatible, or malicious future release selected by the package resolver would be imported by `scripts/axelrod_chat.py`. ### Attack Path 1. A user follows the documented installation command. 2. The package resolver selects the newest release satisfying `requests>=2.25.0`, together with mutable transitive dependency versions. 3. If a selected future release or transitive dependency is compromised, its code is installed into the Skill's Python environment. 4. The Skill imports `requests` when `scripts/axelrod_chat.py` starts. 5. Malicious package code could then execute with the same privileges and environment as the Skill process. This is a supply-chain exposure rather than evidence that the currently named `requests` package is malicious. ### Impact Assessment The maximum impact of a compromised dependency is code execution under the account running installation or the Skill. That code could access files, environment variables, AIxVC credentials, and network resources available to the process. The present likelihood is low because the audit found no unsafe package source, dependency-co ...[truncated 147 chars]
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
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
Findings (13)

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
90% confidence
Finding

The README documents that small orders may execute without an explicit user confirmation step, which weakens a key safeguard for a trading skill that can move funds on-chain. In this context, natural-language parsing mistakes, prompt injection through user messages, or agent misinterpretation could trigger unintended trades, so even a low-dollar auto-execution path is security-relevant.

Content

Scanner excerpt · README.md (reported line 120)May include surrounding context.

md
- **Execute**: `yes, please execute <confirmKey>`
- **Cancel**: `no, please cancel <confirmKey>`

`confirmKey` is valid for approximately **10 minutes**. Small orders (≈ ≤ $10) may skip confirmation.

## Current Limitations

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
94% confidence
Finding

The skill performs sensitive operations that rely on environment secrets and network access, yet it does not declare an explicit tool/permission scope. In a trading skill, this omission weakens least-privilege controls and can allow the agent to invoke networked execution paths or access credentials without clear policy boundaries.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The description is broadly phrased to activate on common requests like checking balances, prices, token analysis, or crypto questions, which can overlap with ordinary assistant conversations. In this skill, over-broad routing is dangerous because activation can lead to real-time external queries and potentially transaction-capable flows against a trading backend.

Content

No source excerpt is available for this finding.

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
93% confidence
Finding

The skill explicitly states that small orders may skip confirmation, meaning autonomous trade execution can occur without an explicit user approval step. In a financial trading context, even small unauthenticated or unintended trades are high risk because they can cause direct asset loss, be repeatedly abused, or be combined with misrouting/prompt-trigger issues to execute transactions the user did not clearly authorize.

Content

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

md
## Confirmation Flow

Orders usually require risk-control confirmation; small orders (approximately ≤ $10) may skip confirmation. `confirmKey` is valid for about **10 minutes**.

When the response includes `confirmKey`, ask the user to send one of:

External Transmission

Medium
Category
Data Exfiltration
Confidence
91% confidence
Finding

The skill transmits user requests and likely account-related trading context to an external endpoint, which is expected for functionality but still creates a real data-exfiltration and trust-boundary risk. Given the skill handles credentials, balances, orders, and trading instructions, sending this data off-platform can expose sensitive financial information or enable unwanted actions if the service is compromised or misused.

Content

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

md
## Implementation Notes

- The script uses AK/SK with SigV4-style signing to call the AIxVC.
- Current endpoint: `https://api.aixvc.io/gw/openapi/v2/public/twa/agent/chat` (`chain-id=base`).
- If documentation conflicts with code behavior, follow the script implementation.

## File Structure

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The documentation instructs users to send natural-language trading commands and signed requests to a live remote API that can trigger on-chain actions, but it does not prominently warn that prompts are transmitted off-system and may result in real financial transactions. In the context of a crypto trading skill, this omission is dangerous because users may expose sensitive trading intent or accidentally authorize impactful operations without clear informed consent.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
86% confidence
Finding

This documentation explicitly shows transmission of user-supplied natural-language instructions and signed authentication material to an external endpoint. External transmission is expected for the feature, but in a trading skill it still represents a real security/privacy risk because sensitive account context, trading intent, and authenticated requests leave the local environment and reach a third-party service.

Content

Scanner excerpt · references/api.md (reported line 26)May include surrounding context.

Request:

bash
curl -X POST "https://api.aixvc.io/gw/openapi/v2/public/twa/agent/chat" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "chain-id: base" \

External Transmission

Medium
Category
Data Exfiltration
Confidence
86% confidence
Finding

This documentation explicitly shows transmission of user-supplied natural-language instructions and signed authentication material to an external endpoint. External transmission is expected for the feature, but in a trading skill it still represents a real security/privacy risk because sensitive account context, trading intent, and authenticated requests leave the local environment and reach a third-party service.

Content

Scanner excerpt · references/api.md (reported line 26)May include surrounding context.

Request:

bash
curl -X POST "https://api.aixvc.io/gw/openapi/v2/public/twa/agent/chat" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "chain-id: base" \

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

python
requests = None


OPENAPI_ENDPOINT = "https://api.aixvc.io/gw"
CHAT_PATH = "/openapi/v2/public/twa/agent/chat"
HOST = "api.aixvc.io"
CHAIN_ID = "base"

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The script sends arbitrary user-provided messages to a third-party remote API and authenticates the request with environment-sourced credentials, but it provides no user-facing disclosure, consent gate, or warning that prompts may leave the local environment. In a trading skill, users may include wallet details, balances, strategy instructions, or other sensitive financial information, so silent transmission to an external service creates a meaningful privacy and trust risk even if HTTPS is used.

Content

No source excerpt is available for this finding.

Vague Triggers

Low
Category
Not specified by scanner
Confidence
89% confidence
Finding

Example trigger phrases like "check my balance" are generic and likely to collide with unrelated assistant requests. Because this skill is tied to wallet data and trading operations, a generic trigger increases the chance of unintentionally invoking an external account-querying workflow.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
95% confidence
Finding

The dependency is specified as requests>=2.25.0, which permits installation of many different future and past versions instead of a known-good release. In a security-sensitive crypto trading skill that performs network calls, this weakens reproducibility and can allow deployment with a vulnerable or behavior-changing version of requests, increasing supply-chain and patch-management risk.

Content

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

text
# Axelrod dependencies
requests>=2.25.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
91% confidence
Finding

Because the manifest does not pin requests, it is impossible to verify whether the installed version includes fixes for known advisories affecting the library. In the context of an on-chain trading/query agent that likely handles remote URLs, API credentials, and financial actions, ambiguity around a dependency with multiple historical CVEs is more dangerous than in a low-risk utility.

Content

No source excerpt is available for this finding.

Static analysis

Detected: suspicious.exposed_secret_literal

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
references/api.md:32