Back to skill

Security audit

Claw Employer

Security checks for vulnerabilities and agentic risk

Overview

The skill is a coherent ClawHire marketplace integration, but it can send task data to outside workers and perform paid account actions without enough explicit user control.

Install only if you are comfortable with an agent using ClawHire to create an account, store an API key, send task details to ClawHire and selected workers, download third-party deliverables, and perform paid task actions. Require the agent to show you the exact destination, payload, budget, and accept/reject action before any external request that shares sensitive work or affects money.

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

T09 · Insecure Skill Coding Practices

Error
Location
SKILL.md:88
Finding
Unvalidated Worker Endpoint Enables Server-Side Request Forgery and Task Data Disclosure## Vulnerability Details **File Location**: `SKILL.md`, lines 88-108 **Vulnerability Type**: Server-Side Request Forgery through an untrusted A2A endpoint **Risk Level**: High ### Vulnerable Code ```bash curl -s -X POST {worker_a2a_url} \ -H "Content-Type: application/json" \ -d '{ "jsonrpc": "2.0", "id": 1, "method": "message/send", "params": { "message": { "role": "user", "parts": [{ "kind": "text", "text": "Please translate this to Japanese:\n\nHello, world. This is a test document." }] } } }' ``` The same unsafe destination handling is repeated for structured requests beginning at `SKILL.md:117`. ### Technical Analysis The skill obtains `worker_a2a_url` from marketplace discovery results and uses it directly as the destination of a `curl` request. It does not require HTTPS, validate the hostname or port, resolve and inspect the destination IP address, or restrict requests to an approved set of ClawHire-controlled endpoints. Because the endpoint is supplied through external worker metadata, a malicious worker profile or compromised marketplace response could return a URL targeting: - Loopback services such as `127.0.0.1` or `::1` - RFC 1918 private network services - Link-local services or cloud instance metadata endpoints - Internal administrative APIs - An attacker-controlled server used to collect confidential task content The request body contains the task instructions and may include documents, structured metadata, or other user-provided information. Consequently, this behavior combines an SSRF primitive with direct disclosure of task data. ### Attack Path 1. An attacker registers or controls a worker profile whose A2A URL points to an attacker-selected destination. 2. The employer agent searches for workers through the ClawHire discovery service. 3. The malicious profile is included in the di ...[truncated 1242 chars]
Remediation
## Remediation Suggestions 1. Do not connect directly to arbitrary worker-supplied URLs. Prefer routing A2A traffic through a trusted ClawHire gateway that enforces destination policy. 2. Require the `https` scheme and reject URLs containing embedded credentials, fragments, unsupported ports, malformed hosts, or noncanonical IP representations. 3. Resolve the hostname before connecting and reject every resolved loopback, private, link-local, multicast, unspecified, documentation, and reserved IPv4 or IPv6 address. 4. Pin the validated destination for the connection or use a trusted outbound proxy to prevent DNS rebinding between validation and connection. 5. Restrict destination ports to an explicit allowlist, normally TCP 443. 6. Keep redirects disabled. If redirect support is later introduced, validate every redirect target using the same scheme, hostname, port, and resolved-address controls. 7. Apply outbound network controls at the container or host level so the skill cannot access cloud metadata, loopback services, or private network ranges. 8. Display the validated destination and obtain explicit user approval before transmitting sensitive documents or task data to a third-party worker. 9. Minimize transmitted data and redact credentials, secrets, personal information, and unrelated workspace content before constructing the A2A request. 10. Record destination validation decisions and failures without logging confidential request bodies or authentication material.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Rogue AgentSelf-Modification, Session Persistence
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (22)

Missing User Warnings

High
Confidence
97% confidence
Finding
The skill description omits a clear warning that task contents, profile data, and possibly user contact details may be transmitted to ClawHire and third-party workers. In a skill whose core function is outsourcing, that omission materially increases the risk of unintentional disclosure of sensitive data.

Vague Triggers

Medium
Confidence
95% confidence
Finding
The trigger phrases are broad enough that the skill may activate for generic requests like 'need help with a task' or 'find a worker' without the user understanding that data may be sent to external services or other agents. This increases the chance of accidental invocation and unintended outsourcing.

Context-Inappropriate Capability

Medium
Confidence
95% confidence
Finding
The skill instructs the agent to create a new third-party account using a user email address and to transmit that email to an external service. That exceeds simple task-posting behavior and creates privacy, consent, and identity-management risk because account creation is a durable action on behalf of the user.

External Transmission

Medium
Category
Data Exfiltration
Content
Check env `CLAWHIRE_API_KEY`. If missing, register:

```bash
curl -s -X POST https://api.clawhire.io/v1/auth/register \
  -H "Content-Type: application/json" \
  -d '{"name":"<agent-name>","owner_email":"<ask-user>","role":"employer"}'
```
Confidence
94% confidence
Finding
This step transmits a user email and agent name to an external service to create an account. The transmission itself is expected for the feature, but it is still security-relevant because it exports user data off-platform and performs an irreversible external side effect.

External Transmission

Medium
Category
Data Exfiltration
Content
Check env `CLAWHIRE_API_KEY`. If missing, register:

```bash
curl -s -X POST https://api.clawhire.io/v1/auth/register \
  -H "Content-Type: application/json" \
  -d '{"name":"<agent-name>","owner_email":"<ask-user>","role":"employer"}'
```
Confidence
94% confidence
Finding
This step transmits a user email and agent name to an external service to create an account. The transmission itself is expected for the feature, but it is still security-relevant because it exports user data off-platform and performs an irreversible external side effect.

Session Persistence

Medium
Category
Rogue Agent
Content
Response: `{ "data": { "agent_id": "...", "api_key": "clawhire_xxx" } }`

Save key — write to `~/.openclaw/openclaw.json` (merge, don't overwrite):

```json
{ "skills": { "entries": { "claw-employer": { "env": { "CLAWHIRE_API_KEY": "clawhire_xxx" } } } } }
Confidence
92% confidence
Finding
The skill instructs persistent storage of the API key in a local config file, creating long-lived credential exposure if the host or config is later accessed by other tools, users, or compromised skills. Persistence is convenient, but it increases blast radius compared with ephemeral credential handling.

External Transmission

Medium
Category
Data Exfiltration
Content
### 2. Create Profile

```bash
curl -s -X POST https://api.clawhire.io/v1/agents/profile \
  -H "Authorization: Bearer $CLAWHIRE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
Confidence
86% confidence
Finding
Creating a profile sends agent metadata and skills to an external platform. In context this is part of normal functionality, but it still exposes potentially sensitive operational details and should not occur silently or without consent.

External Transmission

Medium
Category
Data Exfiltration
Content
**Option A: REST API**

```bash
curl -s "https://api.clawhire.io/v1/agents/discover?skills=translation,japanese"
```

Returns workers with their `a2a_url` endpoints.
Confidence
80% confidence
Finding
Worker discovery sends search terms and hiring intent to a third-party service. Although lower risk than sending task content, it still reveals operational interests and initiates external network activity that users may not expect from a generic 'help with a task' trigger.

External Transmission

Medium
Category
Data Exfiltration
Content
**Option B: A2A JSON-RPC** (via ClawHire gateway)

```bash
curl -s -X POST https://api.clawhire.io/a2a \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
Confidence
87% confidence
Finding
The A2A gateway flow sends structured discovery requests to an external platform, which may expose user intent and search criteria. Because the skill encourages outsourcing, this increases the chance that sensitive project context could be sent externally with little friction.

Missing User Warnings

Medium
Confidence
91% confidence
Finding
The paid escrow flow describes money movement and payout-triggering acceptance without an explicit user-impact warning or confirmation gate. An agent following this literally could commit funds or release payment without sufficient user awareness.

External Transmission

Medium
Category
Data Exfiltration
Content
### Step 1: Browse workers (optional)

```bash
curl -s "https://api.clawhire.io/v1/agents/browse?skills=translation&is_online=true&sort=rating"
```

View a specific worker's full profile:
Confidence
78% confidence
Finding
Browsing workers transmits search parameters to an external marketplace and may reveal preferences or business intent. This is expected behavior for the skill, but still requires transparency and user awareness.

External Transmission

Medium
Category
Data Exfiltration
Content
View a specific worker's full profile:
```bash
curl -s "https://api.clawhire.io/v1/agents/{agent_id}/card"
```

### Step 2: Post task
Confidence
76% confidence
Finding
Fetching a worker card contacts an external service and may deepen profiling of third-party agents on behalf of the user. This is not inherently malicious, but it contributes to unannounced data exchange and marketplace interaction.

External Transmission

Medium
Category
Data Exfiltration
Content
**Option A: REST API**

```bash
curl -s -X POST https://api.clawhire.io/v1/tasks \
  -H "Authorization: Bearer $CLAWHIRE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
Confidence
96% confidence
Finding
Posting a task transmits task title, description, skills, budget, and deadline to an external service. This can disclose sensitive project details and may initiate financial obligations, so it is high impact if triggered without clear user authorization.

External Transmission

Medium
Category
Data Exfiltration
Content
**Option B: A2A JSON-RPC** (via ClawHire gateway)

```bash
curl -s -X POST https://api.clawhire.io/a2a \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $CLAWHIRE_API_KEY" \
  -d '{
Confidence
96% confidence
Finding
The A2A task-posting flow similarly sends full task details and authorization to an external gateway. Because it combines data disclosure with authenticated account actions, misuse could create both privacy and financial harm.

External Transmission

Medium
Category
Data Exfiltration
Content
### Step 3: Monitor

```bash
curl -s "https://api.clawhire.io/v1/tasks/{task_id}" \
  -H "Authorization: Bearer $CLAWHIRE_API_KEY"
```
Confidence
72% confidence
Finding
Task status monitoring contacts the external platform using the API key and reveals ongoing use of the service. The direct impact is lower than posting or registration, but it is still external transmission that should be transparent.

External Transmission

Medium
Category
Data Exfiltration
Content
Or via A2A:

```bash
curl -s -X POST https://api.clawhire.io/a2a \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
Confidence
72% confidence
Finding
The A2A status check sends task identifiers to the external gateway. This is comparatively low risk, but still exposes metadata about ongoing outsourced work.

External Transmission

Medium
Category
Data Exfiltration
Content
Download deliverable:
```bash
curl -s "https://api.clawhire.io/v1/submissions/{sub_id}/download" \
  -H "Authorization: Bearer $CLAWHIRE_API_KEY" -o deliverable.file
```
Confidence
90% confidence
Finding
Downloading a submission imports data from an external service into the local environment. Besides network transmission, this creates content-ingestion risk because deliverables from third-party agents may be malicious, malformed, or sensitive.

External Transmission

Medium
Category
Data Exfiltration
Content
Accept (triggers 99% payout):
```bash
curl -s -X POST "https://api.clawhire.io/v1/submissions/{sub_id}/accept" \
  -H "Authorization: Bearer $CLAWHIRE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"feedback":"Great work!","rating":5}'
Confidence
95% confidence
Finding
Accepting a submission triggers payout, making this an authenticated external action with direct financial consequence. If an agent performs it automatically, the user could lose funds or approve inadequate work without review.

External Transmission

Medium
Category
Data Exfiltration
Content
Reject (worker can revise, max 3 attempts):
```bash
curl -s -X POST "https://api.clawhire.io/v1/submissions/{sub_id}/reject" \
  -H "Authorization: Bearer $CLAWHIRE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"feedback":"Please fix X and Y"}'
Confidence
82% confidence
Finding
Rejecting a submission is an authenticated external action that affects the worker relationship and task state. While less severe than payout release, it still has user-impact and should not be done silently.

External Transmission

Medium
Category
Data Exfiltration
Content
ClawHire exposes an A2A Agent Card at:

```
https://api.clawhire.io/.well-known/agent.json
```

This tells any A2A-compatible agent what ClawHire can do:
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Natural-Language Policy Violations

Low
Confidence
74% confidence
Finding
The examples repeatedly direct translation specifically to Japanese, such as "Please translate this to Japanese," without framing the language as user-selected or illustrative. This can be read as a fixed language preference rather than offering locale choice.

Context-Inappropriate Capability

Low
Confidence
91% confidence
Finding
The skill mandates appending interaction details to a general memory log after every interaction, even though persistent cross-task logging is not necessary to hire a worker or post a task. This can retain sensitive metadata about outsourced work, workers, costs, and task history longer than needed.

Static analysis

No suspicious patterns detected.