Back to skill

Security audit

Laravel Creem Agent

Security checks for vulnerabilities and agentic risk

Overview

This skill is purpose-aligned with a local payment-store assistant, but it has review-worthy risks around unsafe shell handling, broad activation phrases, and state-changing payment actions without clear confirmation.

Review before installing. Use this only in a trusted local demo or controlled payment-store environment, narrow the activation language to store-specific prompts, require explicit confirmation for cancellations and checkout creation, and replace the documented shell command with a structured HTTP call or safely serialized payload that cannot execute user text as shell syntax.

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:31
Finding

Shell Command Injection Through Improper Escaping of User-Controlled Input

Content
View full analysis
","source":"openclaw"}' ``` Remember to JSON-escape the user text (escape `"`, `\`, newlines). ``` ### Technical Analysis The skill requires the agent to insert user-controlled text directly into a Bash command. The JSON request body is enclosed in single quotes, but the escaping instructions only address JSON metacharacters: double quotes, backslashes, and newlines. JSON escaping does not protect a shell single-quoted argument. If the supplied message contains an apostrophe, it can terminate the shell string. Subsequent shell metacharacters such as semicolons, command substitutions, redirections, or pipelines may then be interpreted by Bash. The risk is increased by instructions elsewhere in the skill requiring the agent to preserve and forward the user's original wording. Consequently, malicious shell syntax contained in a store-related request could reach the vulnerable command construction without normalization. For example, interpolating a message conceptually shaped like: ```text status'; id; # ``` would produce shell source shaped like: ```bash curl -fsS -X POST "http://127.0.0.1:8000/creem-agent/chat" \ -H 'Content-Type: application/json' \ -d '{"message":"status'; id; #","source":"openclaw"}' ``` The apostrophe closes the `-d` argument, the semicolon begins another command, and the comment marker suppresses the remaining malformed command text. The exact exploitability depends on whether the host agent executes the documented command through a shell, but the skill explicitly directs it to use Bash. ### Attack Path 1. ...[truncated 1498 chars]
Remediation
View remediation
Vulnerability Patterns
  • 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
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
Findings (12)

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

Copy the SKILL.md file into your OpenClaw workspace skills directory:

bash
mkdir -p ~/.openclaw/workspace/skills/openclaw-laravel-creem-agent-skill
cp SKILL.md ~/.openclaw/workspace/skills/openclaw-laravel-creem-agent-skill/SKILL.md

Skill Enumeration

Medium
Category
Agent Snooping
Confidence
80% confidence
Finding

Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.

Content

Scanner excerpt · README.md (reported line 11)May include surrounding context.

bash
mkdir -p ~/.openclaw/workspace/skills/openclaw-laravel-creem-agent-skill
cp SKILL.md ~/.openclaw/workspace/skills/openclaw-laravel-creem-agent-skill/SKILL.md

If you are following the demo VM layout from this repository, the checked-out bundle lives at /home/www, so copy it from there:

Skill Enumeration

Medium
Category
Agent Snooping
Confidence
80% confidence
Finding

Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.

Content

Scanner excerpt · README.md (reported line 19)May include surrounding context.

bash
mkdir -p ~/.openclaw/workspace/skills/openclaw-laravel-creem-agent-skill
cp SKILL.md ~/.openclaw/workspace/skills/openclaw-laravel-creem-agent-skill/SKILL.md

If you are following the demo VM layout from this repository, the checked-out bundle lives at /home/www, so copy it from there:

Skill Enumeration

Medium
Category
Agent Snooping
Confidence
80% confidence
Finding

Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.

Content

Scanner excerpt · README.md (reported line 77)May include surrounding context.

bash
mkdir -p ~/.openclaw/workspace/skills/openclaw-laravel-creem-agent-skill
cp SKILL.md ~/.openclaw/workspace/skills/openclaw-laravel-creem-agent-skill/SKILL.md

If you are following the demo VM layout from this repository, the checked-out bundle lives at /home/www, so copy it from there:

Sudo/Root Execution

Medium
Category
Privilege Escalation
Confidence
70% confidence
Finding

Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.

Content

Scanner excerpt · README.md (reported line 76)May include surrounding context.

Check these items in order:

bash
sudo su - openclaw
test -f ~/.openclaw/workspace/skills/openclaw-laravel-creem-agent-skill/SKILL.md && echo "skill present"
curl -fsS -X POST http://127.0.0.1:8000/creem-agent/chat \
  -H 'Content-Type: application/json' \

Sudo/Root Execution

Medium
Category
Privilege Escalation
Confidence
90% confidence
Finding

Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.

Content

Scanner excerpt · README.md (reported line 76)May include surrounding context.

Check these items in order:

bash
sudo su - openclaw
test -f ~/.openclaw/workspace/skills/openclaw-laravel-creem-agent-skill/SKILL.md && echo "skill present"
curl -fsS -X POST http://127.0.0.1:8000/creem-agent/chat \
  -H 'Content-Type: application/json' \

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 · README.md (reported line 78)May include surrounding context.

bash
sudo su - openclaw
test -f ~/.openclaw/workspace/skills/openclaw-laravel-creem-agent-skill/SKILL.md && echo "skill present"
curl -fsS -X POST http://127.0.0.1:8000/creem-agent/chat \
  -H 'Content-Type: application/json' \
  -d '{"message":"status","source":"openclaw"}'

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill description and trigger text include very broad phrases like 'status' and 'status, payments, customers who paid' that can match ordinary user requests unrelated to the payment store. This can cause unintended invocation and silent routing of user prompts to the local payment agent, resulting in unnecessary exposure of user text and unintended operational actions.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
95% confidence
Finding

The skill instructs unconditional transmission of the user's original text to an HTTP endpoint using curl. Even though the endpoint is localhost, this is still external to the model and may expose sensitive user content or trigger sensitive store operations without additional authorization, validation, or least-privilege controls.

Content

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

Use bash with curl. Always use this exact pattern:

bash
curl -fsS -X POST "http://127.0.0.1:8000/creem-agent/chat" \
  -H 'Content-Type: application/json' \
  -d '{"message":"<ESCAPED_USER_TEXT>","source":"openclaw"}'

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The supported command examples contain ambiguous everyday phrases such as 'status', 'overview', 'check now', 'monitor', and 'help' without strict scope boundaries. In a shared assistant environment, these broad phrases increase the chance of the skill activating for unrelated requests and forwarding them to the endpoint.

Content

No source excerpt is available for this finding.

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
80% confidence
Finding

Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Content

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

md
- Do NOT rewrite `which customer paid the most today?` into `recent transactions` unless an exact first call failed
- Do NOT answer from your own knowledge when the endpoint can answer the exact question
- Do NOT say you need local workspace data before calling the endpoint
- Do NOT ask the user where the transactions are stored before calling the endpoint
- Do NOT relay a transaction list verbatim when the user asked for a count

## Multi-step queries (chaining)

External Transmission

Medium
Category
Data Exfiltration
Confidence
90% confidence
Finding

The 'always make a fresh call' behavior encourages repeated transmission of user requests and store-related context to the endpoint on every invocation. This increases the data exposure surface and can amplify the effect of accidental triggers or prompt-injection-driven request generation.

Content

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

md
2. **Do not over-normalize** — cheap models must not replace a precise question with a broader proxy query.
3. **Complex questions → exact first call, then chain if needed** — try the exact question first before decomposing it.
4. **Present responses clearly** — for single calls show the response as-is; for chained calls compose a clear summary.
5. **Handle errors** — if curl fails (exit code ≠ 0), tell the user the store service is unreachable and suggest checking that the Laravel app is running.
6. **Do not cache** — always make a fresh call. Store state changes between requests.
7. **Multi-store** — the agent supports multiple stores. If the user mentions a specific store, forward that context naturally (e.g. "status of store production").
8. **Source field** — always include `"source":"openclaw"` in the JSON body so the endpoint knows the request comes from OpenClaw.