Back to skill

Security audit

equibles

Security checks for vulnerabilities and agentic risk

Overview

The main REST workflow is read-only market-data access, but the skill also points agents to write-capable account tools while later describing the skill as read-only.

Install only if you are comfortable giving agents access to your Equibles API key. Prefer the documented REST examples for read-only market data; if you enable the MCP server, treat portfolio, watchlist, and feedback tools as account-changing actions and require explicit confirmation before any write, not only deletions.

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

Intent-Code Divergence

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

The rules state that every request in the skill is a non-mutating HTTPS GET and that the skill writes nothing locally, but earlier text advertises an MCP server with write-capable tools. This contradiction can mislead reviewers or agents into treating the skill as read-only, lowering safeguards around actions that may modify user data.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 · SKILL.md (reported line 34)May include surrounding context.

md
- Create a free account and an API key at https://equibles.com/dashboard/apikeys (free plan: 100 requests a day, no card). Keys start with `eq_`.
- Store it as `EQUIBLES_API_KEY` (for OpenClaw, `skills.entries.equibles.apiKey`). Send it only as `Authorization: Bearer $EQUIBLES_API_KEY`; never put it in a URL or print it.
- Base URL: `https://api.equibles.com/v1`. OpenAPI spec: https://api.equibles.com/openapi/v1.json. Reference: https://equibles.com/docs/api.
- A 401 with `"code": "unauthorized"` means the key is missing or wrong, not that the data is missing. A 429 means the daily allowance is used up; it resets at 00:00 UTC.
- Paged endpoints return `data` plus `meta` (`limit`, `offset`, `count`, `hasMore`). Errors share one shape: `{"error": {"code", "message", "status"}}`.

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 · SKILL.md (reported line 44)May include surrounding context.

md
- Create a free account and an API key at https://equibles.com/dashboard/apikeys (free plan: 100 requests a day, no card). Keys start with `eq_`.
- Store it as `EQUIBLES_API_KEY` (for OpenClaw, `skills.entries.equibles.apiKey`). Send it only as `Authorization: Bearer $EQUIBLES_API_KEY`; never put it in a URL or print it.
- Base URL: `https://api.equibles.com/v1`. OpenAPI spec: https://api.equibles.com/openapi/v1.json. Reference: https://equibles.com/docs/api.
- A 401 with `"code": "unauthorized"` means the key is missing or wrong, not that the data is missing. A 429 means the daily allowance is used up; it resets at 00:00 UTC.
- Paged endpoints return `data` plus `meta` (`limit`, `offset`, `count`, `hasMore`). Errors share one shape: `{"error": {"code", "message", "status"}}`.

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 · SKILL.md (reported line 54)May include surrounding context.

md
- Create a free account and an API key at https://equibles.com/dashboard/apikeys (free plan: 100 requests a day, no card). Keys start with `eq_`.
- Store it as `EQUIBLES_API_KEY` (for OpenClaw, `skills.entries.equibles.apiKey`). Send it only as `Authorization: Bearer $EQUIBLES_API_KEY`; never put it in a URL or print it.
- Base URL: `https://api.equibles.com/v1`. OpenAPI spec: https://api.equibles.com/openapi/v1.json. Reference: https://equibles.com/docs/api.
- A 401 with `"code": "unauthorized"` means the key is missing or wrong, not that the data is missing. A 429 means the daily allowance is used up; it resets at 00:00 UTC.
- Paged endpoints return `data` plus `meta` (`limit`, `offset`, `count`, `hasMore`). Errors share one shape: `{"error": {"code", "message", "status"}}`.

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 · SKILL.md (reported line 64)May include surrounding context.

md
- Create a free account and an API key at https://equibles.com/dashboard/apikeys (free plan: 100 requests a day, no card). Keys start with `eq_`.
- Store it as `EQUIBLES_API_KEY` (for OpenClaw, `skills.entries.equibles.apiKey`). Send it only as `Authorization: Bearer $EQUIBLES_API_KEY`; never put it in a URL or print it.
- Base URL: `https://api.equibles.com/v1`. OpenAPI spec: https://api.equibles.com/openapi/v1.json. Reference: https://equibles.com/docs/api.
- A 401 with `"code": "unauthorized"` means the key is missing or wrong, not that the data is missing. A 429 means the daily allowance is used up; it resets at 00:00 UTC.
- Paged endpoints return `data` plus `meta` (`limit`, `offset`, `count`, `hasMore`). Errors share one shape: `{"error": {"code", "message", "status"}}`.

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 · SKILL.md (reported line 76)May include surrounding context.

md
- Create a free account and an API key at https://equibles.com/dashboard/apikeys (free plan: 100 requests a day, no card). Keys start with `eq_`.
- Store it as `EQUIBLES_API_KEY` (for OpenClaw, `skills.entries.equibles.apiKey`). Send it only as `Authorization: Bearer $EQUIBLES_API_KEY`; never put it in a URL or print it.
- Base URL: `https://api.equibles.com/v1`. OpenAPI spec: https://api.equibles.com/openapi/v1.json. Reference: https://equibles.com/docs/api.
- A 401 with `"code": "unauthorized"` means the key is missing or wrong, not that the data is missing. A 429 means the daily allowance is used up; it resets at 00:00 UTC.
- Paged endpoints return `data` plus `meta` (`limit`, `offset`, `count`, `hasMore`). Errors share one shape: `{"error": {"code", "message", "status"}}`.

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 · SKILL.md (reported line 86)May include surrounding context.

md
- Create a free account and an API key at https://equibles.com/dashboard/apikeys (free plan: 100 requests a day, no card). Keys start with `eq_`.
- Store it as `EQUIBLES_API_KEY` (for OpenClaw, `skills.entries.equibles.apiKey`). Send it only as `Authorization: Bearer $EQUIBLES_API_KEY`; never put it in a URL or print it.
- Base URL: `https://api.equibles.com/v1`. OpenAPI spec: https://api.equibles.com/openapi/v1.json. Reference: https://equibles.com/docs/api.
- A 401 with `"code": "unauthorized"` means the key is missing or wrong, not that the data is missing. A 429 means the daily allowance is used up; it resets at 00:00 UTC.
- Paged endpoints return `data` plus `meta` (`limit`, `offset`, `count`, `hasMore`). Errors share one shape: `{"error": {"code", "message", "status"}}`.

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 · SKILL.md (reported line 96)May include surrounding context.

md
- Create a free account and an API key at https://equibles.com/dashboard/apikeys (free plan: 100 requests a day, no card). Keys start with `eq_`.
- Store it as `EQUIBLES_API_KEY` (for OpenClaw, `skills.entries.equibles.apiKey`). Send it only as `Authorization: Bearer $EQUIBLES_API_KEY`; never put it in a URL or print it.
- Base URL: `https://api.equibles.com/v1`. OpenAPI spec: https://api.equibles.com/openapi/v1.json. Reference: https://equibles.com/docs/api.
- A 401 with `"code": "unauthorized"` means the key is missing or wrong, not that the data is missing. A 429 means the daily allowance is used up; it resets at 00:00 UTC.
- Paged endpoints return `data` plus `meta` (`limit`, `offset`, `count`, `hasMore`). Errors share one shape: `{"error": {"code", "message", "status"}}`.

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 · SKILL.md (reported line 106)May include surrounding context.

md
- Create a free account and an API key at https://equibles.com/dashboard/apikeys (free plan: 100 requests a day, no card). Keys start with `eq_`.
- Store it as `EQUIBLES_API_KEY` (for OpenClaw, `skills.entries.equibles.apiKey`). Send it only as `Authorization: Bearer $EQUIBLES_API_KEY`; never put it in a URL or print it.
- Base URL: `https://api.equibles.com/v1`. OpenAPI spec: https://api.equibles.com/openapi/v1.json. Reference: https://equibles.com/docs/api.
- A 401 with `"code": "unauthorized"` means the key is missing or wrong, not that the data is missing. A 429 means the daily allowance is used up; it resets at 00:00 UTC.
- Paged endpoints return `data` plus `meta` (`limit`, `offset`, `count`, `hasMore`). Errors share one shape: `{"error": {"code", "message", "status"}}`.

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 · SKILL.md (reported line 110)May include surrounding context.

md
- Create a free account and an API key at https://equibles.com/dashboard/apikeys (free plan: 100 requests a day, no card). Keys start with `eq_`.
- Store it as `EQUIBLES_API_KEY` (for OpenClaw, `skills.entries.equibles.apiKey`). Send it only as `Authorization: Bearer $EQUIBLES_API_KEY`; never put it in a URL or print it.
- Base URL: `https://api.equibles.com/v1`. OpenAPI spec: https://api.equibles.com/openapi/v1.json. Reference: https://equibles.com/docs/api.
- A 401 with `"code": "unauthorized"` means the key is missing or wrong, not that the data is missing. A 429 means the daily allowance is used up; it resets at 00:00 UTC.
- Paged endpoints return `data` plus `meta` (`limit`, `offset`, `count`, `hasMore`). Errors share one shape: `{"error": {"code", "message", "status"}}`.

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 · SKILL.md (reported line 120)May include surrounding context.

md
- Create a free account and an API key at https://equibles.com/dashboard/apikeys (free plan: 100 requests a day, no card). Keys start with `eq_`.
- Store it as `EQUIBLES_API_KEY` (for OpenClaw, `skills.entries.equibles.apiKey`). Send it only as `Authorization: Bearer $EQUIBLES_API_KEY`; never put it in a URL or print it.
- Base URL: `https://api.equibles.com/v1`. OpenAPI spec: https://api.equibles.com/openapi/v1.json. Reference: https://equibles.com/docs/api.
- A 401 with `"code": "unauthorized"` means the key is missing or wrong, not that the data is missing. A 429 means the daily allowance is used up; it resets at 00:00 UTC.
- Paged endpoints return `data` plus `meta` (`limit`, `offset`, `count`, `hasMore`). Errors share one shape: `{"error": {"code", "message", "status"}}`.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The skill documentation introduces an MCP alternative with 10 write-capable tools for portfolios, watchlists, or feedback, even though the skill is otherwise framed as a read-only market-data integration. This expands the effective capability surface beyond the manifest's apparent purpose and could enable unintended state-changing actions if an agent/runtime follows the MCP path without strict user-consent gating.

Content

No source excerpt is available for this finding.