Back to skill

Security audit

OpenClaw agent hosting: spawn a swarm on confidential VPS

Security checks for vulnerabilities and agentic risk

Overview

The skill is marked suspicious because scanners found environment and network capabilities not covered by declared permissions, and the scan was incomplete.

Consider the flagged permission gap and verify that you trust the external service and understand what data or credentials it receives. The scan covered 66.7% of components and was partial, including opaque script content, so the evidence is incomplete.

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 Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (14)

Code capability 'env' detected in scripts/openclaw-machine.mjs but not covered by declared permissions.

High
Category
MCP Least Privilege
Confidence
75% confidence
Finding

The skill uses 'env' capability that is not covered by the declared 'allowed-tools' preapproval. Review the host runtime's actual enforcement policy; runtime permissions are unknown unless separately verified, and this declaration alone does not establish a permission ceiling.

Content

No source excerpt is available for this finding.

Code capability 'network' detected in scripts/openclaw-machine.mjs but not covered by declared permissions.

High
Category
MCP Least Privilege
Confidence
75% confidence
Finding

The skill uses 'network' capability that is not covered by the declared 'allowed-tools' preapproval. Review the host runtime's actual enforcement policy; runtime permissions are unknown unless separately verified, and this declaration alone does not establish a permission ceiling.

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 42)May include surrounding context.

md
## What your owner sets up once

1. A prepaid compute balance and a compute key on it:
   `POST https://api.agentgates.ai/api/compute/credits` with `{"amountUsd": 5}`
   (1, 5, 25 or 100), paid over x402 by their wallet, then
   `POST https://api.agentgates.ai/api/compute/keys` with `{"name": "my-agent"}`,
   signed by that wallet. Contract: `GET https://api.agentgates.ai/api/compute/docs`.

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
1. A prepaid compute balance and a compute key on it:
   `POST https://api.agentgates.ai/api/compute/credits` with `{"amountUsd": 5}`
   (1, 5, 25 or 100), paid over x402 by their wallet, then
   `POST https://api.agentgates.ai/api/compute/keys` with `{"name": "my-agent"}`,
   signed by that wallet. Contract: `GET https://api.agentgates.ai/api/compute/docs`.
2. A prepaid inference balance and a key on it: the same two calls under
   `/api/inference/credits` and `/api/inference/keys`. Contract:

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 45)May include surrounding context.

md
`POST https://api.agentgates.ai/api/compute/credits` with `{"amountUsd": 5}`
   (1, 5, 25 or 100), paid over x402 by their wallet, then
   `POST https://api.agentgates.ai/api/compute/keys` with `{"name": "my-agent"}`,
   signed by that wallet. Contract: `GET https://api.agentgates.ai/api/compute/docs`.
2. A prepaid inference balance and a key on it: the same two calls under
   `/api/inference/credits` and `/api/inference/keys`. Contract:
   `GET https://api.agentgates.ai/api/inference/docs`.

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 48)May include surrounding context.

md
signed by that wallet. Contract: `GET https://api.agentgates.ai/api/compute/docs`.
2. A prepaid inference balance and a key on it: the same two calls under
   `/api/inference/credits` and `/api/inference/keys`. Contract:
   `GET https://api.agentgates.ai/api/inference/docs`.
3. The two secrets in your environment: `AGENTGATES_COMPUTE_KEY` (agc_...) and
   `AGENTGATES_INFERENCE_KEY` (ag_...).

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
refuses when `--max-usd` is missing, the price is over it, or the balance is
short or cannot be read. Only then does it buy the machine (default
`compute.standard`, 1 hour; `--hours N` or `--minutes 15|30|45`, `--model <id>`
from `GET https://api.agentgates.ai/api/inference/catalog`), and it checks the
charge against `--max-usd` after, exiting with code 2 if the price moved past
it. It makes a fresh gateway token, seals it into the machine with the
inference key, keeps it in `~/.agentgates/openclaw-machines.json` (readable by

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 99)May include surrounding context.

md
included. So keep wallet keys, exchange keys and private data on confidential
machines, give plain workers public work only, and have them send their results
back to you. The catalog marks a plain plan with `"proof": "none"`
(`GET https://api.agentgates.ai/api/compute/catalog`). A plain plan sells while
its host has room: when it has none, `price` and `start` say so and nothing is
bought.

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 137)May include surrounding context.

md
carries on where it was.

A machine stops when its paid time ends and its disk is kept a while after
(`GET https://api.agentgates.ai/api/compute/docs`, "Lifecycle"). Renew before
`expiresAt` to keep it. Your compute key cannot destroy a machine; your owner's
wallet can.

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 · compose.yml (reported line 4)May include surrounding context.

yaml
# OpenClaw on an Agentgates computer: a confidential VM, or a plain VM for a
# worker with nothing secret on it.
#
# Send this file as the "compose" of POST https://api.agentgates.ai/api/compute/deployments.
# The gateway answers at the machine's endpoint (host port 8080).
#
# Sealed env (the create call's "env"; never write them into this file):

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 · compose.yml (reported line 10)May include surrounding context.

yaml
# Sealed env (the create call's "env"; never write them into this file):
#   OPENCLAW_GATEWAY_TOKEN  required: the gateway's bearer, 64 random hex characters
#   AGENTGATES_API_KEY      required: an Agentgates inference key (ag_...) on a prepaid balance
#   AGENTGATES_MODEL        optional: a model id from GET https://api.agentgates.ai/api/inference/catalog
#   OPENCLAW_TRUSTED_PROXIES  plain VM only: the private range its https name's proxy reaches
#                           the gateway from, 172.16.0.0/12 (the skill's script sends it)
#

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 127)May include surrounding context.

md
token into the machine with `POST /api/compute/deployments/{id}/update`. Runs
side by side are safe: each change to the file takes a lock. Before you send a
confidential machine secrets, check its proof page,
`https://api.agentgates.ai/compute/verify/<deploymentId>`: its compose hash, OS
image hash and Intel TDX quote. A plain VM has no proof page: send it no
secrets.

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 147)May include surrounding context.

md
`node {baseDir}/scripts/openclaw-machine.mjs body --name worker-2 --minutes 15`
prints the create body (this compose, a fresh token, the inference key) and
saves the token. The body holds both secrets: keep it out of logs and send it
only to `https://api.agentgates.ai/api/compute/deployments`, with your x402
client. The `402` names the exact price on each network, asking it is free, and
your client signs that exact amount, so keep its per-payment cap at your
owner's budget. Then run `attach worker-2 <deploymentId>` and `list` until it

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 · compose.yml (reported line 33)May include surrounding context.

yaml
OPENCLAW_GATEWAY_TOKEN: ${OPENCLAW_GATEWAY_TOKEN:-}
      AGENTGATES_API_KEY: ${AGENTGATES_API_KEY:-}
      AGENTGATES_MODEL: ${AGENTGATES_MODEL:-glm-5-3-flash}
      AGENTGATES_BASE_URL: ${AGENTGATES_BASE_URL:-https://api.agentgates.ai/api/inference/v1}
      OPENCLAW_TRUSTED_PROXIES: ${OPENCLAW_TRUSTED_PROXIES:-}
      TZ: UTC
    volumes: