Back to skill

Security audit

LLM Gateway — Multi-Model AI Completions

Security checks for vulnerabilities and agentic risk

Overview

This is a simple LLM gateway skill, but it sends prompts in URL paths and can trigger automatic USDC payments without documented limits.

Review this skill before installing. Use it only with non-sensitive prompts unless you have separate privacy assurances from the provider, and configure wallet controls such as low balances, per-transaction approval, exact price and recipient checks, and task-level spending limits.

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

Warning
Location
SKILL.md:18
Finding
Sensitive Prompt Disclosure Through URL Paths<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md`, lines 18–28 **Vulnerability Type**: Sensitive information exposure through URL-based request design **Risk Level**: Medium ### Vulnerable Code Snippet ```markdown ## How it's paid (x402 — no key, no signup) HTTPS GET with the prompt URL-encoded in the path. First call returns **HTTP 402**; your OpenClaw wallet auto-pays the USDC fee (Base) and retries, returning the completion. ## Tiers (live endpoints) | Call | Model tier | Price | |---|---|---| | `GET https://api.gocreativeai.com/v1/ai/ask/{prompt}` | Fast & cheap (DeepSeek-tier) | ~$0.02 | | `GET https://api.gocreativeai.com/v1/ai/pro/{prompt}` | Frontier — Claude 4.5 Sonnet (`?model=` to override) | ~$0.08 | | `GET https://api.gocreativeai.com/v1/ai/ultra/{prompt}` | Ultra — Claude Opus 4.6, top-end reasoning | ~$0.25 | URL-encode the prompt. Example: `/v1/ai/ask/Summarize%20this%20contract%20in%203%20bullets`. ``` ### Technical Analysis The skill instructs agents to place the complete prompt in an HTTPS URL path. URL encoding only converts characters into a transport-safe representation; it does not encrypt, redact, or otherwise protect the prompt. Although HTTPS protects the request in transit, URL paths are commonly retained by reverse proxies, API gateways, content delivery networks, web-server access logs, observability platforms, error reports, and client-side request histories. Consequently, prompts containing credentials, proprietary source code, contracts, personal information, or other confidential material may be disclosed to the external provider and to parties with access to intermediary logs. The skill does not warn users against submitting sensitive data, request informed consent for third-party disclosure, or describe retention and deletion controls. ### Attack Path 1. An agent receives a task containing confidential or attacker-selected sensitive information. 2. Following the skill instructions, the agent incorpora ...[truncated 873 chars]
Remediation
<![CDATA[ ## Remediation Suggestions - Replace prompt-bearing GET requests with HTTPS POST requests and place prompts in the request body. - Explicitly prohibit transmitting credentials, private keys, authentication tokens, regulated records, and other sensitive information unless the user has provided informed consent. - Add a mandatory redaction stage that detects and removes secrets and personal information before transmission. - Clearly disclose that prompts are sent to an external provider and document applicable storage, retention, training, and deletion policies. - Configure gateways, proxies, and application servers not to log request bodies or sensitive query and path data. - Provide an allowlist of approved data categories and require confirmation before transmitting content outside the local environment. - Use data minimization so that only information strictly necessary for the requested completion is sent. ]]>

T05 · Unauthorized Access and Privilege Escalation

Warning
Location
SKILL.md:18
Finding
Unbounded Automatic USDC Payment Workflow<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md`, lines 18–26 **Vulnerability Type**: Automatic financial authorization without explicit spending controls **Risk Level**: Medium ### Vulnerable Code Snippet ```markdown ## How it's paid (x402 — no key, no signup) HTTPS GET with the prompt URL-encoded in the path. First call returns **HTTP 402**; your OpenClaw wallet auto-pays the USDC fee (Base) and retries, returning the completion. ## Tiers (live endpoints) | Call | Model tier | Price | |---|---|---| | `GET https://api.gocreativeai.com/v1/ai/ask/{prompt}` | Fast & cheap (DeepSeek-tier) | ~$0.02 | | `GET https://api.gocreativeai.com/v1/ai/pro/{prompt}` | Frontier — Claude 4.5 Sonnet (`?model=` to override) | ~$0.08 | | `GET https://api.gocreativeai.com/v1/ai/ultra/{prompt}` | Ultra — Claude Opus 4.6, top-end reasoning | ~$0.25 | ``` ### Technical Analysis The documented workflow states that the OpenClaw wallet automatically pays an HTTP 402 payment request and retries the operation. No explicit per-transaction approval, exact-price verification, recipient validation, retry limit, cumulative budget, or rate limit is specified. The listed prices are approximate rather than enforceable maximums. If an agent can be induced to make repeated calls—for example, through untrusted task content, indirect prompt injection, an automation loop, or retry behavior—each request may initiate another wallet payment. A compromised or misconfigured endpoint could also return a payment request whose amount or recipient differs from the user's expectations unless those fields are independently validated. This finding concerns the authority to spend assets available through the configured payment workflow. The file does not demonstrate compromise of the host or acquisition of broader operating-system permissions. ### Attack Path 1. A user enables the skill in an agent that has access to an x402-compatible wallet. 2. Untrusted content or an automation error ca ...[truncated 1134 chars]
Remediation
<![CDATA[ ## Remediation Suggestions - Require explicit user confirmation before each payment, displaying the exact amount, asset, network, recipient, endpoint, and requested model. - Enforce hard per-call, per-task, hourly, and daily spending limits at the wallet layer. - Treat documented prices as maximum permitted amounts and reject payment requests exceeding those limits. - Validate the destination domain, payment recipient, Base network identifier, USDC contract address, and service identity before signing. - Limit automatic retries and ensure a retry cannot generate a second payment for the same logical request. - Add idempotency identifiers and verify payment receipts to prevent duplicate charging. - Apply call-count and rate limits to workflows that can invoke paid endpoints. - Maintain transaction audit logs and notify users when cumulative spending crosses configurable thresholds. - Use a dedicated wallet with a minimal balance or narrowly scoped allowance rather than a general-purpose wallet. - Require additional confirmation when prompts originate from untrusted external content or when repeated calls are requested. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
Findings (4)

Missing User Warnings

Medium
Confidence
98% confidence
Finding
The skill instructs agents to place the full prompt directly in the URL path and send it to a third-party service, but it does not warn that prompts may contain sensitive user or system data. Putting prompts in the URL is especially risky because URLs are commonly logged by clients, proxies, gateways, browser/history layers, and server infrastructure, increasing exposure beyond normal request-body transmission.

External Transmission

Medium
Category
Data Exfiltration
Content
## Tiers (live endpoints)
| Call | Model tier | Price |
|---|---|---|
| `GET https://api.gocreativeai.com/v1/ai/ask/{prompt}` | Fast & cheap (DeepSeek-tier) | ~$0.02 |
| `GET https://api.gocreativeai.com/v1/ai/pro/{prompt}` | Frontier — Claude 4.5 Sonnet (`?model=` to override) | ~$0.08 |
| `GET https://api.gocreativeai.com/v1/ai/ultra/{prompt}` | Ultra — Claude Opus 4.6, top-end reasoning | ~$0.25 |
Confidence
94% confidence
Finding
This line documents sending user prompts to an external endpoint, which is a genuine data exfiltration boundary for any agent using the skill. Because the prompt is embedded in the URL path, the exposure surface is broader than a typical API call and may leak task contents into network and application logs.

External Transmission

Medium
Category
Data Exfiltration
Content
| Call | Model tier | Price |
|---|---|---|
| `GET https://api.gocreativeai.com/v1/ai/ask/{prompt}` | Fast & cheap (DeepSeek-tier) | ~$0.02 |
| `GET https://api.gocreativeai.com/v1/ai/pro/{prompt}` | Frontier — Claude 4.5 Sonnet (`?model=` to override) | ~$0.08 |
| `GET https://api.gocreativeai.com/v1/ai/ultra/{prompt}` | Ultra — Claude Opus 4.6, top-end reasoning | ~$0.25 |

URL-encode the prompt. Example: `/v1/ai/ask/Summarize%20this%20contract%20in%203%20bullets`.
Confidence
94% confidence
Finding
This endpoint similarly transmits prompt content to a third-party LLM gateway and therefore creates an external data-sharing risk. The skill context makes this more dangerous because agents may forward arbitrary user inputs, internal instructions, or confidential workspace data to the provider without a strong warning or consent flow.

External Transmission

Medium
Category
Data Exfiltration
Content
|---|---|---|
| `GET https://api.gocreativeai.com/v1/ai/ask/{prompt}` | Fast & cheap (DeepSeek-tier) | ~$0.02 |
| `GET https://api.gocreativeai.com/v1/ai/pro/{prompt}` | Frontier — Claude 4.5 Sonnet (`?model=` to override) | ~$0.08 |
| `GET https://api.gocreativeai.com/v1/ai/ultra/{prompt}` | Ultra — Claude Opus 4.6, top-end reasoning | ~$0.25 |

URL-encode the prompt. Example: `/v1/ai/ask/Summarize%20this%20contract%20in%203%20bullets`.
Confidence
94% confidence
Finding
The ultra-tier endpoint is another explicit external transmission path for prompt contents to a remote service. The higher-cost reasoning use case may encourage users to send larger, more sensitive problem statements, increasing the chance that confidential information is disclosed through both provider access and URL logging.

Static analysis

No suspicious patterns detected.