Back to skill

Security audit

Stove Maker Api

Security checks for vulnerabilities and agentic risk

Overview

This skill is mostly aligned with a trading API helper, but it handles real financial actions and bearer tokens with several unsafe or under-scoped patterns that should be reviewed before installation.

Install only if you are comfortable giving this skill access to a real Stove Maker JWT and using it for production trading actions. Avoid custom base URLs unless you fully trust the endpoint, do not pass real JWTs in command lines or examples, require explicit confirmation before create/cancel/corporate-action operations, and do not follow the unlimited token-approval or localStorage JWT patterns without safer controls.

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

T09 · Insecure Skill Coding Practices

Error
Location
scripts/maker_api.py:20
Finding

JWT Disclosure Through Unrestricted Custom API Base URL

Content
View full analysis
EnvConfig: """Resolve final base URL from env / override.""" if not jwt_token: raise SystemExit("jwt_token is required for Maker API calls.") if base_url: return EnvConfig(base_url=base_url.rstrip("/"), jwt_token=jwt_token) if env == "test": return EnvConfig(base_url="https://api-qa.proto.stove.finance", jwt_token=jwt_token) # default: production return EnvConfig(base_url="https://proto.stove.finance", jwt_token=jwt_token) def _build_request(url: str, method: str, cfg: EnvConfig, body: Optional[Dict[str, Any]] = None) -> request.Request: if body is not None: data = json.dumps(body).encode("utf-8") else: data = None req = request.Request(url, method=method, data=data) req.add_header("Content-Type", "application/json") req.add_header("Authorization", f"Bearer {cfg.jwt_token}") return req def http_call(req: request.Request) -> Dict[str, Any]: """Perform HTTP request and return parsed JSON.""" try: with request.urlopen(req, timeout=20) as resp: ``` ### Technical Analysis The `--base-url` override is accepted without validating its scheme, hostname, port, or trust relationship. Every request constructed from this URL receives the user's complete bearer JWT in the `Authorization` header. Consequently, the token can be sent directly to an attacker-controlled domain or over plaintext HTTP. The default production and test destinations are legitimate HTTPS endpoints, and authenticated network traffic is required by the Skill's declared purpose. However, unrestricted credential forwarding to any caller-selected endpoint exceeds the minimum privileges necessary. ...[truncated 1367 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/maker_api.py:151
Finding

JWT Exposed Through Command-Line Arguments

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
references/API Authorization.md:192
Finding

Authorization Example Persists JWT in Browser localStorage

Content
View full analysis
Remediation
View remediation

T05 · Unauthorized Access and Privilege Escalation

Error
Location
references/EIP-712 Order Signature.md:493
Finding

Unlimited ERC-20 Allowance Exceeds Least-Privilege Requirements

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/maker_api.py:126
Finding

Cancellation Command Does Not Match the Bundled API Contract

Content
View full analysis
None: # 具体取消路径以官方文档为准,这里假设为 DELETE /api/v1/orders/{order_hash} path = f"/api/v1/orders/{args.order_hash}" url = f"{cfg.base_url}{path}" req = _build_request(url, "DELETE", cfg) data = http_call(req) json.dump(data, sys.stdout, ensure_ascii=False, indent=2) sys.stdout.write("\n") ``` The bundled cancellation specification instead states: ```text Endpoint: POST /api/v1/orders/{order_id}/cancel ``` Its example is: ```bash curl -X POST "/api/v1/orders/550e8400-e29b-41d4-a716-446655440000/cancel" \ -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." \ -H "Content-Type: application/json" ``` ### Technical Analysis The executable uses a different HTTP method, path, and identifier type than the included authoritative reference: - Script: `DELETE /api/v1/orders/{order_hash}` - Documentation: `POST /api/v1/orders/{order_id}/cancel` The source comment explicitly acknowledges that the endpoint was assumed. Cancellation is a financially sensitive operation, and an assumed endpoint is unsafe. The most likely result is a failed request, but behavior could vary if the server implements a different DELETE route. ### Attack Path 1. A user creates an order and later requests cancellation. 2. The Skill invokes `cancel-order` with an order hash. 3. The script sends a DELETE request to the undocumented endpoint. 4. The server rejects the request or does not cancel the intended order. 5. The user or Agent incorrectly assumes the operational cancellation workflow is valid unless the response is carefully interpreted. 6. The order remains active and may subsequently be ...[truncated 377 chars]
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (37)

Tp4

High
Category
MCP Tool Poisoning
Confidence
88% confidence
Finding

整体上,代码确实是在使用 JWT 调用 Stove Protocol Maker API,并管理订单与仓位,因此与声明的大方向基本一致。但声明特别提到“相关实时报价推送”,而实际代码仅实现同步 HTTP 请求的命令行工具,没有 WebSocket、SSE、轮询推送封装或任何实时推送机制,因此描述包含了代码未体现的重要能力,构成描述与行为不完全一致。另一方面,代码还实现了 nonce 查询和手续费估算,这些虽未在描述中点明,但属于订单管理的配套功能,不属于严重偏离。综合判断为存在轻度到中度不匹配。

Content

No source excerpt is available for this finding.

Missing User Warnings

High
Category
Not specified by scanner
Confidence
97% confidence
Finding

The example recommends approving ethers.MaxUint256 for the settlement contract, which grants effectively unlimited token spending. If the contract is compromised, upgraded maliciously, misconfigured, or the user approves the wrong address/network, all approved funds could be drained; in a trading/institutional context this materially increases risk.

Content

No source excerpt is available for this finding.

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
90% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

Scanner excerpt · scripts/maker_api.py (reported line 127)May include surrounding context.

python
def cmd_cancel_order(cfg: EnvConfig, args: argparse.Namespace) -> None:
    # 具体取消路径以官方文档为准,这里假设为 DELETE /api/v1/orders/{order_hash}
    path = f"/api/v1/orders/{args.order_hash}"
    url = f"{cfg.base_url}{path}"
    req = _build_request(url, "DELETE", cfg)

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
90% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

Scanner excerpt · scripts/maker_api.py (reported line 222)May include surrounding context.

python
# cancel order
    p_cancel = subparsers.add_parser(
        "cancel-order",
        help="取消订单(DELETE /api/v1/orders/{order_hash},具体以文档为准)。",
    )
    p_cancel.add_argument(
        "--order-hash",

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
90% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

Scanner excerpt · scripts/maker_api.py (reported line 222)May include surrounding context.

python
# cancel order
    p_cancel = subparsers.add_parser(
        "cancel-order",
        help="取消订单(DELETE /api/v1/orders/{order_hash},具体以文档为准)。",
    )
    p_cancel.add_argument(
        "--order-hash",

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The manifest description is written in Chinese and the operational instructions throughout the file address the agent in Chinese without any opt-in or alternative language guidance. Under the policy, forcing a specific language or locale without user choice is a natural-language policy violation unless it is explicitly justified as region-specific, which is not stated here.

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 Authorization.md (reported line 176)May include surrounding context.

Request Example ​

cURL ​

bash
curl -X POST "{API_BASE_URL}/api/v1/makers/connect" \

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The example shows persisting the JWT in localStorage without an adjacent warning, despite nearby guidance acknowledging that this is unsafe for sensitive applications. This normalizes an insecure implementation pattern and increases the chance integrators will expose bearer tokens to theft through XSS or other client-side script execution.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The document’s own best-practices section warns against storing JWTs in localStorage, yet the example code does exactly that. Tokens in localStorage are accessible to any JavaScript running in the page, so an XSS bug, compromised dependency, or malicious browser context could steal the JWT and let an attacker impersonate the user until expiry.

Content

No source excerpt is available for this finding.

Ae4

Medium
Category
analysis-evasion
Confidence
80% confidence
Finding

Suspicious Unicode normalization or mixed-script content

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/Create Order.md (reported line 57)May include surrounding context.

Request Example ​

bash
curl -X POST "/api/v1/orders" \
     -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." \
     -H "Content-Type: application/json" \
     -d '{

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The documentation includes an Authorization header containing a JWT-shaped bearer token in a curl example without any warning that credentials must be placeholders only. Even if truncated, publishing realistic auth material in docs normalizes copying secrets into shared contexts and can lead users to expose live tokens in repos, tickets, or chat.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

This markdown file includes code examples that send a JWT bearer token and later an order plus cryptographic signature to backend endpoints. While the file explains how to perform the calls, it does not warn users that authenticated credentials and signed trading instructions are transmitted over the network, which is a relevant disclosure for a markdown skill description under the missing-warnings rule.

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/Estimate Order Fee.md (reported line 38)May include surrounding context.

Request Example ​

bash
curl -X POST "/api/v1/orders/estimate_charge" \
     -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." \
     -H "Content-Type: application/json" \
     -d '{

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

This markdown file documents an authenticated API call and shows an Authorization header containing a JWT-like bearer token string. The description does not warn users not to paste real tokens into shared shells, logs, or documentation, which is a privacy and credential-handling concern for markdown under the missing user warnings category.

Content

No source excerpt is available for this finding.

Ae4

Medium
Category
analysis-evasion
Confidence
80% confidence
Finding

Suspicious Unicode normalization or mixed-script content

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

This markdown file documents an endpoint that returns personally identifiable information, including email and wallet address, but provides no user warning or privacy disclosure about handling sensitive account data. Under the markdown-file criteria, descriptions should warn when behavior could affect user data or privacy.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The documentation describes authenticated order creation, position management, and trading actions for institutional accounts without any explicit warning that these operations can place real orders, modify positions, or cause financial loss if invoked unintentionally. In an agent skill context with network permission, this increases the chance that an LLM-driven agent could treat these endpoints as routine data APIs and perform account-impacting actions without adequate user confirmation or safety gating.

Content

No source excerpt is available for this finding.

Ae4

Medium
Category
analysis-evasion
Confidence
80% confidence
Finding

Suspicious Unicode normalization or mixed-script content

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The documentation instructs clients to place the JWT in the WebSocket subprotocol list, which can expose credentials to browser tooling, intermediary logs, reverse proxies, server access logs, or application diagnostics that record negotiated subprotocol values. Because this skill manages institutional trading orders and positions, compromise of a bearer token could allow unauthorized access to sensitive market actions and real-time account data.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The file documents an "Orderbook Data Push" WebSocket feed and all earlier sections describe only orderbook_update and heartbeat messages. However, the enum table states order_status_change as a WebSocket message type, which contradicts the documented behavior of this endpoint and indicates copied or misleading inline documentation.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The documented endpoint authorizes processing of a corporate action, which is outside the skill's declared scope of only managing orders, positions, and quote streaming. This scope expansion increases the chance that an agent or user grants network-capable access to higher-impact asset operations they did not expect, enabling unintended or unauthorized financial actions.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The documentation presents a state-changing authorization endpoint for processing a corporate action without clearly warning that the action may be irreversible or financially significant. In an agent setting, this omission can cause unsafe automation or operator misunderstanding, leading to accidental execution of sensitive transactions.

Content

No source excerpt is available for this finding.

Ae4

Medium
Category
analysis-evasion
Confidence
80% confidence
Finding

Suspicious Unicode normalization or mixed-script content

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

This markdown file documents authenticated API use and includes example requests with a Bearer JWT token header. The description does not warn users not to paste real production tokens into shared terminals, logs, or documentation, which is a privacy and credential-handling concern covered by missing user warnings for markdown files.

Content

No source excerpt is available for this finding.