Back to skill

Security audit

OlaXBT Nexus Data

Security checks for vulnerabilities and agentic risk

Overview

This crypto data skill mostly behaves like an API client, but it needs Review because it includes under-disclosed private-key signing code and can send JWTs to configurable endpoints.

Install only if you trust the publisher and can keep configuration locked down. Do not provide a wallet private key to this package, avoid using NexusAuth, do not override NEXUS_AUTH_URL or NEXUS_DATA_URL except in a trusted test environment, and treat NEXUS_JWT as a bearer secret that can spend credits or access account-scoped API data.

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

Error
Location
src/olaxbt_nexus_data/__init__.py:82
Finding

JWT Disclosure Through Unrestricted API Base URL Overrides

Content
View full analysis
Dict[str, str]: return { "Authorization": f"Bearer {self._jwt}", "X-Request-ID": generate_request_id(), "X-Wallet-Address": self.wallet_address, } def get_credits_balance(self) -> Dict[str, Any]: endpoint = f"{self.auth_url}/credits/balance" try: headers = self.get_auth_headers() response = requests.get( endpoint, headers=headers, timeout=self.security_config.timeout, ) ``` ### Technical Analysis The client accepts `auth_url` and `data_url` from constructor arguments or environment variables without validating their schemes or hosts. The request layer then unconditionally attaches the wallet-linked JWT ...[truncated 2289 chars]
Remediation
View remediation
str: parsed = urlparse(url) if parsed.scheme != "https": raise ValueError("Authenticated API URLs must use HTTPS") if parsed.hostname not in allowed_hosts: raise ValueError("API host is not permitted") if parsed.username or parsed.password: raise ValueError("Credentials in API URLs are prohibited") return url.rstrip("/") ``` 2. Allowlist the documented service hosts: - `api.olaxbt.xyz` for authentication requests. - `api-data.olaxbt.xyz` for data requests. 3. If custom endpoints are required for testing, require an explicit development-only option such as `allow_unsafe_custom_origin=False`. Do not enable it through an implicitly trusted environment variable in production. 4. Bind credentials to their intended origin. Before adding `Authorization`, verify that the destination has the expected HTTPS scheme, hostname, and port. 5. Disable credential forwarding during redirects, or reject cross-origin redirects entirely. This protection should be tested explicitly because HTTP libraries may follow redirects. 6. Add automated tests confirming that: - HTTP URLs are rejected. - Unknown hosts are rejected. - Cross-origin redirects do not receive the JWT. - Official HTTPS endpoints continue to work. 7. Update the documentation so that any supported custom endpoint behavior and associated trust requirements are stated accurately. ]]>

T05 · Unauthorized Access and Privilege Escalation

Warning
Location
src/olaxbt_nexus_data/core/auth.py:58
Finding

Exported Legacy Authentication Class Retains and Uses Ethereum Private Keys

Content
View full analysis
str: """ Exchange signature for JWT token. Args: auth_message: Original auth message signature: Signed message Returns: JWT token Raises: AuthenticationError: If token exchange fails """ endpoint = f"{self.auth_url}/auth/wallet" try: # Extract nonce from message (simplified) import re nonce_mat ...[truncated 3808 chars]
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (70)

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

A skill described as not handling private keys but validating wallet credentials would mislead users about the sensitivity of inputs and the trust required. In a cryptocurrency context, any hidden or under-disclosed expectation to process private-key material is especially dangerous because compromise or misuse can directly lead to asset loss.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
93% confidence
Finding

A skill described as not handling private keys but validating wallet credentials would mislead users about the sensitivity of inputs and the trust required. In a cryptocurrency context, any hidden or under-disclosed expectation to process private-key material is especially dangerous because compromise or misuse can directly lead to asset loss.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding

A skill described as not handling private keys but validating wallet credentials would mislead users about the sensitivity of inputs and the trust required. In a cryptocurrency context, any hidden or under-disclosed expectation to process private-key material is especially dangerous because compromise or misuse can directly lead to asset loss.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The module includes a full wallet/private-key authentication path despite the skill being described as JWT-only with no private key handling. In an agent-skill context, introducing unnecessary key-handling and signing capability expands the trust boundary and creates a route for sensitive credential exposure or misuse if the class is wired up, imported elsewhere, or later enabled by configuration.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The code performs local Ethereum message signing with a supplied private key, which is inconsistent with the stated JWT-only purpose and gives the skill cryptographic authority it should not need. In practice, any bug, malicious prompt path, or future feature reuse around this code could turn the skill into a signer for attacker-chosen messages or lead to theft/exposure of wallet credentials.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The changelog materially contradicts the skill metadata: it says the skill uses a wallet-linked JWT with no private key in scope, yet the release notes claim 'private key encryption and secure storage.' That inconsistency is dangerous because it can conceal a broader secret-handling trust boundary than advertised, causing deployers to grant the skill access to signing material or misjudge the consequences of compromise.

Content

No source excerpt is available for this finding.

Skill Enumeration

Medium
Category
Agent Snooping
Confidence
80% confidence
Finding

Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.

Content

Scanner excerpt · PUBLISHING.md (reported line 59)May include surrounding context.

md
![License](https://img.shields.io/badge/license-MIT-yellow)
![OpenClaw](https://img.shields.io/badge/OpenClaw-2026.3.0%2B-orange)

Official OlaXBT Nexus Data API integration for OpenClaw agents. This skill uses a **JWT only** (no private key in the skill). Obtain the JWT via the [Nexus auth flow](https://github.com/olaxbt/olaxbt-skills-hub/blob/main/skills/nexus/SKILL.md); then set `NEXUS_JWT` and use the client.

## Features

Skill Enumeration

Medium
Category
Agent Snooping
Confidence
80% confidence
Finding

Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.

Content

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

md
![License](https://img.shields.io/badge/license-MIT-yellow)
![OpenClaw](https://img.shields.io/badge/OpenClaw-2026.3.0%2B-orange)

Official OlaXBT Nexus Data API integration for OpenClaw agents. This skill uses a **JWT only** (no private key in the skill). Obtain the JWT via the [Nexus auth flow](https://github.com/olaxbt/olaxbt-skills-hub/blob/main/skills/nexus/SKILL.md); then set `NEXUS_JWT` and use the client.

## Features

Skill Enumeration

Medium
Category
Agent Snooping
Confidence
80% confidence
Finding

Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.

Content

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

md
![License](https://img.shields.io/badge/license-MIT-yellow)
![OpenClaw](https://img.shields.io/badge/OpenClaw-2026.3.0%2B-orange)

Official OlaXBT Nexus Data API integration for OpenClaw agents. This skill uses a **JWT only** (no private key in the skill). Obtain the JWT via the [Nexus auth flow](https://github.com/olaxbt/olaxbt-skills-hub/blob/main/skills/nexus/SKILL.md); then set `NEXUS_JWT` and use the client.

## Features

Skill Enumeration

Medium
Category
Agent Snooping
Confidence
80% confidence
Finding

Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.

Content

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

md
![License](https://img.shields.io/badge/license-MIT-yellow)
![OpenClaw](https://img.shields.io/badge/OpenClaw-2026.3.0%2B-orange)

Official OlaXBT Nexus Data API integration for OpenClaw agents. This skill uses a **JWT only** (no private key in the skill). Obtain the JWT via the [Nexus auth flow](https://github.com/olaxbt/olaxbt-skills-hub/blob/main/skills/nexus/SKILL.md); then set `NEXUS_JWT` and use the client.

## Features

Skill Enumeration

Medium
Category
Agent Snooping
Confidence
80% confidence
Finding

Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.

Content

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

md
![License](https://img.shields.io/badge/license-MIT-yellow)
![OpenClaw](https://img.shields.io/badge/OpenClaw-2026.3.0%2B-orange)

Official OlaXBT Nexus Data API integration for OpenClaw agents. This skill uses a **JWT only** (no private key in the skill). Obtain the JWT via the [Nexus auth flow](https://github.com/olaxbt/olaxbt-skills-hub/blob/main/skills/nexus/SKILL.md); then set `NEXUS_JWT` and use the client.

## Features

Skill Enumeration

Medium
Category
Agent Snooping
Confidence
80% confidence
Finding

Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.

Content

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

md
![License](https://img.shields.io/badge/license-MIT-yellow)
![OpenClaw](https://img.shields.io/badge/OpenClaw-2026.3.0%2B-orange)

Official OlaXBT Nexus Data API integration for OpenClaw agents. This skill uses a **JWT only** (no private key in the skill). Obtain the JWT via the [Nexus auth flow](https://github.com/olaxbt/olaxbt-skills-hub/blob/main/skills/nexus/SKILL.md); then set `NEXUS_JWT` and use the client.

## Features

Skill Enumeration

Medium
Category
Agent Snooping
Confidence
80% confidence
Finding

Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.

Content

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

md
![License](https://img.shields.io/badge/license-MIT-yellow)
![OpenClaw](https://img.shields.io/badge/OpenClaw-2026.3.0%2B-orange)

Official OlaXBT Nexus Data API integration for OpenClaw agents. This skill uses a **JWT only** (no private key in the skill). Obtain the JWT via the [Nexus auth flow](https://github.com/olaxbt/olaxbt-skills-hub/blob/main/skills/nexus/SKILL.md); then set `NEXUS_JWT` and use the client.

## Features

Skill Enumeration

Medium
Category
Agent Snooping
Confidence
80% confidence
Finding

Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.

Content

Scanner excerpt · examples/basic_usage.py (reported line 20)May include surrounding context.

python
![License](https://img.shields.io/badge/license-MIT-yellow)
![OpenClaw](https://img.shields.io/badge/OpenClaw-2026.3.0%2B-orange)

Official OlaXBT Nexus Data API integration for OpenClaw agents. This skill uses a **JWT only** (no private key in the skill). Obtain the JWT via the [Nexus auth flow](https://github.com/olaxbt/olaxbt-skills-hub/blob/main/skills/nexus/SKILL.md); then set `NEXUS_JWT` and use the client.

## Features

Skill Enumeration

Medium
Category
Agent Snooping
Confidence
80% confidence
Finding

Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.

Content

Scanner excerpt · examples/basic_usage.py (reported line 24)May include surrounding context.

python
![License](https://img.shields.io/badge/license-MIT-yellow)
![OpenClaw](https://img.shields.io/badge/OpenClaw-2026.3.0%2B-orange)

Official OlaXBT Nexus Data API integration for OpenClaw agents. This skill uses a **JWT only** (no private key in the skill). Obtain the JWT via the [Nexus auth flow](https://github.com/olaxbt/olaxbt-skills-hub/blob/main/skills/nexus/SKILL.md); then set `NEXUS_JWT` and use the client.

## Features

Skill Enumeration

Medium
Category
Agent Snooping
Confidence
80% confidence
Finding

Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.

Content

Scanner excerpt · examples/news_monitor.py (reported line 167)May include surrounding context.

python
![License](https://img.shields.io/badge/license-MIT-yellow)
![OpenClaw](https://img.shields.io/badge/OpenClaw-2026.3.0%2B-orange)

Official OlaXBT Nexus Data API integration for OpenClaw agents. This skill uses a **JWT only** (no private key in the skill). Obtain the JWT via the [Nexus auth flow](https://github.com/olaxbt/olaxbt-skills-hub/blob/main/skills/nexus/SKILL.md); then set `NEXUS_JWT` and use the client.

## Features

Skill Enumeration

Medium
Category
Agent Snooping
Confidence
80% confidence
Finding

Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.

Content

Scanner excerpt · src/olaxbt_nexus_data/__init__.py (reported line 59)May include surrounding context.

python
![License](https://img.shields.io/badge/license-MIT-yellow)
![OpenClaw](https://img.shields.io/badge/OpenClaw-2026.3.0%2B-orange)

Official OlaXBT Nexus Data API integration for OpenClaw agents. This skill uses a **JWT only** (no private key in the skill). Obtain the JWT via the [Nexus auth flow](https://github.com/olaxbt/olaxbt-skills-hub/blob/main/skills/nexus/SKILL.md); then set `NEXUS_JWT` and use the client.

## Features

Skill Enumeration

Medium
Category
Agent Snooping
Confidence
80% confidence
Finding

Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.

Content

Scanner excerpt · src/olaxbt_nexus_data/__init__.py (reported line 78)May include surrounding context.

python
![License](https://img.shields.io/badge/license-MIT-yellow)
![OpenClaw](https://img.shields.io/badge/OpenClaw-2026.3.0%2B-orange)

Official OlaXBT Nexus Data API integration for OpenClaw agents. This skill uses a **JWT only** (no private key in the skill). Obtain the JWT via the [Nexus auth flow](https://github.com/olaxbt/olaxbt-skills-hub/blob/main/skills/nexus/SKILL.md); then set `NEXUS_JWT` and use the client.

## Features

External Transmission

Medium
Category
Data Exfiltration
Confidence
71% confidence
Finding

This step instructs users to send address, signature, message, and nonce to an external service to obtain a JWT. Even though this is a legitimate auth flow, signed wallet authentication artifacts are sensitive and, if mishandled, logged, or sent to an untrusted or overrideable endpoint, could enable account/session takeover or replay within the service's acceptance rules. The skill context makes this less suspicious than generic exfiltration because wallet login is expected, but it still carries real credential-handling risk.

Content

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

The skill does not handle private keys. Get a JWT using the Nexus Skills API auth flow:

  1. POST https://api.olaxbt.xyz/api/auth/message with {"address": "0x..."}
  2. Sign the returned message with your wallet (e.g. OpenClaw or one-time sign-in)
  3. POST https://api.olaxbt.xyz/api/auth/wallet with address, signature, message, nonce → receive token (JWT)
  4. Set export NEXUS_JWT="<token>" and use the client
python

External Transmission

Medium
Category
Data Exfiltration
Confidence
84% confidence
Finding

The README explicitly allows overriding NEXUS_AUTH_URL and NEXUS_DATA_URL via environment variables. If an attacker can influence the runtime environment, they can redirect the client to attacker-controlled endpoints and capture the JWT or all subsequent authenticated traffic, turning a normal external API integration into credential exfiltration. In an agent-skill context, environment-variable driven endpoint control is more dangerous because users often install and run skills without closely auditing all env sources.

Content

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

NEXUS_JWT=""

Optional

NEXUS_AUTH_URL="https://api.olaxbt.xyz/api" NEXUS_DATA_URL="https://api-data.olaxbt.xyz/api/v1"

text

External Transmission

Medium
Category
Data Exfiltration
Confidence
86% confidence
Finding

The client configuration example shows caller-supplied auth_url and data_url parameters, which can permit runtime redirection of authenticated requests to arbitrary servers. Combined with a JWT-bearing client, this creates a straightforward path for token exfiltration or man-in-the-middle style abuse if untrusted code or config can set these values. Because the skill's only credential is the JWT, endpoint redirection materially weakens the trust boundary.

Content

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

md
client = NexusClient(
    jwt_token="...",  # optional, else uses NEXUS_JWT
    auth_url="https://api.olaxbt.xyz/api",
    data_url="https://api-data.olaxbt.xyz/api/v1",
    timeout=30,
    max_retries=3,

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
88% confidence
Finding

The skill declares no explicit tool scope even though it requires environment access and makes networked API calls. In an agent environment, missing permission boundaries can let the skill operate with broader capabilities than users expect, increasing the chance of unintended data exposure or misuse of credentials like NEXUS_JWT.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The example prints the JWT token to stdout, even if truncated, which exposes sensitive credential material in terminals, shell history captures, CI logs, notebooks, screen recordings, or centralized log collection systems. Because this is a wallet-linked bearer token for API access, any leaked portion or future modification to print the full token creates unnecessary credential exposure risk in a sample users may copy into production workflows.

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 · README.md (reported line 88)May include surrounding context.

md
"POST /auth/message, sign the message with your wallet, POST /auth/wallet, then set NEXUS_JWT."
            )

        self.auth_url = auth_url or os.getenv("NEXUS_AUTH_URL", "https://api.olaxbt.xyz/api")
        self.data_url = data_url or os.getenv("NEXUS_DATA_URL", "https://api-data.olaxbt.xyz/api/v1")

        self.security_config = SecurityConfig(

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 · README.md (reported line 93)May include surrounding context.

md
"POST /auth/message, sign the message with your wallet, POST /auth/wallet, then set NEXUS_JWT."
            )

        self.auth_url = auth_url or os.getenv("NEXUS_AUTH_URL", "https://api.olaxbt.xyz/api")
        self.data_url = data_url or os.getenv("NEXUS_DATA_URL", "https://api-data.olaxbt.xyz/api/v1")

        self.security_config = SecurityConfig(

Static analysis

No suspicious patterns detected.