Back to skill

Security audit

Corall

Security checks for vulnerabilities and agentic risk

Overview

The skill is mostly coherent for Corall marketplace work, but its setup guides include unsafe credential and webhook-token handling that users should review before installing.

Review this skill before installing. It is not clearly malicious, but do not let an agent print ~/.corall credential JSON files, prefer file-existence checks instead, require HTTPS for public webhooks, avoid passing webhook secrets in command history where possible, and understand that OpenClaw setup changes hook and LAN gateway settings.

Vulnerability Patterns
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (2)

T09 · Insecure Skill Coding Practices

Error
Location
references/setup-employer.md:22
Finding

Credential Files Containing Private Keys and Tokens Are Printed to Terminal Output

Content
View full analysis

Vulnerability Details

File Location: references/setup-employer.md:22-25
Vulnerability Type: Sensitive credential disclosure
Risk Level: High

Vulnerable Code

bash
## 2. Register

Check for existing credentials:

```bash
cat ~/.corall/credentials/employer.json 2>/dev/null || echo "No credentials found"
text

The same vulnerable pattern also appears at `references/setup-provider-openclaw.md:63-66`:

```bash
Check for existing credentials:

```bash
cat ~/.corall/credentials/provider.json 2>/dev/null || echo "No credentials found"
text

### Technical Analysis

The setup guides instruct the agent to print complete credential files merely to determine whether credentials exist. According to `references/cli-reference.md:13`, these files contain the public key, Ed25519 private key, user ID, and cached authentication token.

Consequently, executing either command places account secrets in terminal output and potentially in agent tool logs, conversation transcripts, CI logs, shell session recordings, or monitoring systems. This exceeds the minimum privilege required for an existence check and contradicts the instructions at `references/setup-employer.md:45` and `references/setup-provider-openclaw.md:86` not to display or log credential values.

### Attack Path

1. A user or automated workflow requests employer or provider setup.
2. The agent follows the guide and executes the documented `cat` command.
3. The complete credential JSON, including the private key and cached token, is returned through tool output.
4. The output is retained in a transcript, log, or other observable channel.
5. An attacker with access to that channel extracts the token or private key.
6. The attacker uses the credentials to authenticate as the affected Corall profile.

### Impact Assessment

Disclosure can permit impersonation of the affected employer or provider account. Depending on the compromised profi
...[truncated 388 chars]
Remediation
View remediation

Remediation Suggestions

Replace content reads with metadata-only existence checks:

bash
if test -f ~/.corall/credentials/employer.json; then
  echo "Credentials found"
else
  echo "No credentials found"
fi

Apply the equivalent change to ~/.corall/credentials/provider.json.

Additionally:

  • Never print or parse private-key and token fields during setup.
  • Ensure credential files are created with owner-only permissions, such as mode 0600.
  • Redact credentials from CLI errors, debug logs, and agent tool output.
  • Revoke and re-register credentials if they have already appeared in retained output.
  • Add an automated test that fails if setup documentation reads complete credential files.

T09 · Insecure Skill Coding Practices

Error
Location
references/setup-provider-openclaw.md:117
Finding

Public Webhook Examples Permit Authentication Tokens to Be Sent over Plain HTTP

Content
View full analysis

Vulnerability Details

File Location: references/setup-provider-openclaw.md:117-141
Vulnerability Type: Plaintext transmission and unsafe handling of a webhook secret
Risk Level: High

Vulnerable Code

bash
**If an agent exists**, update its webhook config:

```bash
corall agents update <agent_id> \
  --webhook-url "http://<your-ip>:18789/hooks/agent" \
  --webhook-token "<webhookToken from Step 2>" \
  --profile provider

If no agent exists, create one:

bash
corall agents create \
  --name "My OpenClaw Agent" \
  --description "An autonomous AI agent powered by OpenClaw" \
  --tags "openclaw,automation" \
  --price 100 \   # price in cents (100 = $1.00), minimum is 50 ($0.50)
  --delivery-time 1 \
  --webhook-url "http://<your-ip>:18789/hooks/agent" \
  --webhook-token "<webhookToken from Step 2>" \
  --profile provider
  • --webhook-url: Your OpenClaw endpoint. Use HTTPS if you have a reverse proxy — plain HTTP sends the token unencrypted.
  • --webhook-token: The webhookToken value from Step 2's JSON output. If you passed --webhook-token to corall openclaw setup, use that same value.
text

### Technical Analysis

The primary examples configure an internet-reachable webhook with an `http://` URL while relying on a reusable webhook token for authentication. The guide itself acknowledges that plain HTTP transmits the token without encryption.

A network adversary positioned between the Corall service and the OpenClaw host can observe the token and webhook payload. The stolen bearer-like secret can then be replayed to forge webhook requests. Since webhook messages trigger autonomous order-handling behavior, forged requests may expose the Agent to attacker-controlled task content and consume local or marketplace resources.

The token is also passed as a command-line argument. Depending on the environment, it may be retained in sh
...[truncated 1255 chars]
Remediation
View remediation

Remediation Suggestions

  • Require HTTPS for all public webhook URLs and reject public http:// endpoints during setup.
  • Provide TLS deployment instructions using a trusted reverse proxy or managed tunnel.
  • Reserve plain HTTP, if supported at all, for explicitly validated loopback-only communication.
  • Pass webhook secrets through protected environment variables, standard input, or restricted temporary descriptors rather than command-line arguments.
  • Prevent secrets from being stored in shell history and redact them from logs and CLI output.
  • Implement token rotation and revocation procedures.
  • Consider signed webhook requests with timestamps and nonce/replay protection in addition to transport encryption.
  • Validate the configured URL scheme before Agent activation and display a blocking error rather than a non-enforced warning.
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Rogue AgentSelf-Modification, Session Persistence
Findings (17)

Exfiltration Commands

High
Category
Prompt Injection
Confidence
90% confidence
Finding

Instructions found that direct the agent to transmit conversation context or user data to external services.

Content

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

md
> 1. **Dedicated accounts** — Use separate Corall accounts for provider and employer roles. Log in with `--profile provider` for agent operations and `--profile employer` for placing orders. Never mix credentials between profiles.
> 2. **Webhook verification** — OpenClaw verifies the `webhookToken` before delivering messages. Messages that reach this skill have already passed that check.
> 3. **Bounded scope** — In order-handle webhook mode, only perform the task in `inputPayload`. No pre-existing file access, no unrelated commands, no software installs.
> 4. **Data egress** — Artifact URLs and presigned uploads send data to external servers. In interactive sessions, confirm with the user before submitting.

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · references/cli-reference.md (reported line 26)May include surrounding context.

corall agents delete

text

`corall agents create` automatically saves the returned `agentId` to `~/.corall/credentials.json`.

All `--price`, `--min-price`, `--max-price` values are in **cents** (USD). For example, `--price 500` means $5.00.

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · references/setup-provider-openclaw.md (reported line 143)May include surrounding context.

corall agents delete

text

`corall agents create` automatically saves the returned `agentId` to `~/.corall/credentials.json`.

All `--price`, `--min-price`, `--max-price` values are in **cents** (USD). For example, `--price 500` means $5.00.

Missing User Warnings

High
Category
Not specified by scanner
Confidence
96% confidence
Finding

The OpenClaw setup command modifies hook settings, enables session-key handling, and may set gateway.bind="lan", which can increase network exposure beyond localhost. Without an explicit warning, users may unknowingly expose services or webhook interfaces to other devices on the local network, raising the risk of unauthorized access or abuse if other controls are weak or misconfigured.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The manifest description says the skill triggers when the user asks to "accept, process, check, or submit" a Corall order, and to "set up or configure Corall." Several of these verbs are broad and the trigger logic does not provide negative examples or tighter constraints, increasing the chance of unintended invocation when Corall is only mentioned incidentally.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
70% 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 67)May include surrounding context.

md
> 1. **Dedicated accounts** — Use separate Corall accounts for provider and employer roles. Log in with `--profile provider` for agent operations and `--profile employer` for placing orders. Never mix credentials between profiles.
> 2. **Webhook verification** — OpenClaw verifies the `webhookToken` before delivering messages. Messages that reach this skill have already passed that check.
> 3. **Bounded scope** — In order-handle webhook mode, only perform the task in `inputPayload`. No pre-existing file access, no unrelated commands, no software installs.
> 4. **Data egress** — Artifact URLs and presigned uploads send data to external servers. In interactive sessions, confirm with the user before submitting.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The documentation states that the private key and cached token are stored in a local credentials file, but it provides no warning about the sensitivity of these secrets or the need to protect file permissions and backups. Because re-authentication occurs automatically using the stored private key, compromise of this file could enable account impersonation and unauthorized marketplace actions.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The reference lists corall agents delete <id> but provides no nearby warning that the action is destructive or whether it can be undone. For markdown documentation, destructive operations that may affect user data or system state should be accompanied by a clear warning.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The manifest describes a skill for handling the Corall marketplace: setup, order handling, and order creation. The documented corall upgrade command fetches releases from GitHub and replaces the running binary in-place, which is a software update capability rather than a marketplace operation and is not justified by the stated skill purpose.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
84% confidence
Finding

The upgrade section states that the command replaces the running binary in-place, but it does not warn users that this changes the installed executable and may affect currently deployed environments. Because the operation modifies installed software, the documentation should clearly disclose that impact.

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/file-upload.md (reported line 14)May include surrounding context.

md
PUBLIC_URL=$(echo "$PRESIGN" | jq -r '.publicUrl')

# Step 2: Upload
curl -fsSL -X PUT "$UPLOAD_URL" \
  -H "Content-Type: <mime>" \
  --data-binary @/path/to/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 · references/cli-reference.md (reported line 49)May include surrounding context.

md
Open the short payment link printed by the CLI in your browser and complete payment with a credit card or Stripe test card (`4242 4242 4242 4242`).

The link looks like: `https://api.corall.ai/pay/<order_id>`

After successful payment, the Stripe webhook will update the order status to `paid` automatically. Confirm the payment went through:

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 · references/cli-reference.md (reported line 59)May include surrounding context.

md
Open the short payment link printed by the CLI in your browser and complete payment with a credit card or Stripe test card (`4242 4242 4242 4242`).

The link looks like: `https://api.corall.ai/pay/<order_id>`

After successful payment, the Stripe webhook will update the order status to `paid` automatically. Confirm the payment went through:

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 · references/order-create.md (reported line 34)May include surrounding context.

md
Open the short payment link printed by the CLI in your browser and complete payment with a credit card or Stripe test card (`4242 4242 4242 4242`).

The link looks like: `https://api.corall.ai/pay/<order_id>`

After successful payment, the Stripe webhook will update the order status to `paid` automatically. Confirm the payment went through:

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 · references/setup-provider-openclaw.md (reported line 97)May include surrounding context.

md
Open the short payment link printed by the CLI in your browser and complete payment with a credit card or Stripe test card (`4242 4242 4242 4242`).

The link looks like: `https://api.corall.ai/pay/<order_id>`

After successful payment, the Stripe webhook will update the order status to `paid` automatically. Confirm the payment went through:

Session Persistence

Medium
Category
Rogue Agent
Confidence
60% confidence
Finding

Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.

Content

Scanner excerpt · references/setup-provider-openclaw.md (reported line 107)May include surrounding context.

md
The response should show `"hasActiveSubscription": true`. If not, wait a few seconds for the webhook callback and retry.

## 5. Create or Update Agent

Check if an agent already exists:

Context-Inappropriate Capability

Low
Category
Not specified by scanner
Confidence
79% confidence
Finding

The manifest focuses on marketplace setup, order handling, and order creation. The documented subscription commands create Stripe checkout sessions and cancel Developer Club memberships, which are account billing/membership management capabilities not clearly justified by that stated purpose.

Content

No source excerpt is available for this finding.