Back to skill

Security audit

Supervisor

Security checks for vulnerabilities and agentic risk

Overview

The skill mostly matches a supervisor status-dashboard purpose, but it includes an unsafe shell/Python snippet plus credentialed network checks and automated outreach that need review before installation.

Install only if you want a supervisor skill with access to local OpenClaw memory, WhatsApp-derived notes, PA status data, and billing health. Before use, fix the unsafe python3 -c path handling, make the Anthropic billing check explicitly opt-in or cached, and confirm who may receive full reports, scheduled reports, and PA pings.

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

Arbitrary Python Code Execution Through Unsafe Directory-Name Interpolation

Content
View full analysis
/dev/null) ``` ### Technical Analysis The `group_dir` shell variable is interpolated directly into Python source code passed to `python3 -c`. Although the shell loop safely quotes the path for ordinary filesystem operations, the value is not escaped as a Python string literal. Unix directory names may contain single quotes, commas, parentheses, and other Python syntax characters. A maliciously named directory can therefore terminate the string passed to `open()` and inject an additional Python expression. For example, a name structured like the following can introduce a function call while Python evaluates the arguments to `open()`: ```text x',__import__('os').system('ATTACKER_COMMAND'),' ``` When substituted into the command, the injected expression is evaluated by Python. Suppressing standard error with `2>/dev/null` can also conceal syntax errors or runtime errors generated after the payload has run. This vulnerability becomes exploitable whenever an attacker, compromised integration, or lower-trust process can create or rename a directory beneath: ```text $HOME/.openclaw/workspace/memory/whatsapp/groups/ ``` ### Attack Path 1. The attacker gains the ability to create or rename a WhatsApp group-memory directory under `memory/whatsapp/groups/`. This may occur through a group synchronization component, an import process, another compromised skill, or existing local write access. 2. The attacker creates a directory whose name contains Python syntax that closes the quoted path and inserts a function call. 3. T ...[truncated 1406 chars]
Remediation
View remediation
/dev/null) done ``` Additional hardening measures should include: 1. Prefer a standalone, reviewed Python script over dynamically supplied `python3 -c` source. 2. Validate that the resolved metadata path remains beneath the expected groups directory before opening it. 3. Reject unexpected group-directory names if upstream synchronization does not require arbitrary Unix filename characters. 4. Run the reporting workflow as a least-privileged account with access only to the required workspace files. 5. Avoid silently discarding all errors. Record sanitized failures in a protected diagnostic log so exploitation attempts and malformed metadata remain detectable. 6. Treat group names and metadata as untrusted data when including them in reports, logs, shell commands, or future prompts. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (7)

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill description advertises activation on very common status-style requests, making accidental invocation likely. Because the skill can aggregate broad internal state and, in some paths, perform network checks, overly broad triggering raises the risk of oversharing or executing a more privileged workflow than the user intended.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The trigger list includes ordinary conversational phrases like 'what's going on' and 'give me a summary' without exclusions or confirmation rules. In a multi-user or mixed-context environment, that can cause the skill to activate unexpectedly and disclose aggregated tasks, group activity, or system health beyond what was intended.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The skill performs a live curl request to an external API using the ANTHROPIC_API_KEY to infer billing status. Even if only headers are sent, this is unnecessary external transmission for a dashboard skill and creates side effects, secret handling risk, and dependency on external connectivity for a status operation.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
94% confidence
Finding

The skill sends a request to an external Anthropic endpoint with an API key header as part of generating status output. Any unnecessary external transmission from a status skill increases attack surface, can leak metadata, and turns a read/report action into one with outbound network side effects.

Content

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

md
API_STATUS=$(curl -s -o /dev/null -w "%{http_code}" \
    -H "x-api-key: ${ANTHROPIC_API_KEY:-none}" \
    -H "anthropic-version: 2023-06-01" \
    https://api.anthropic.com/v1/models 2>/dev/null)
  case "$API_STATUS" in
    200) echo "• Billing: ✅ OK" ;;
    402) echo "• Billing: ⚠️ OUT OF CREDITS" ;;

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The documentation claims no external API calls are needed for basic status, yet the skill includes an external billing/API probe elsewhere. This mismatch can mislead operators and downstream agents into invoking network behavior they did not expect, weakening reviewability and increasing the chance of unintended data egress.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill is presented as a status dashboard, but it instructs the agent to actively message other PAs ('ping 🏓') and wait for responses. That expands the skill from passive reporting into autonomous outreach, which can create unintended communications, operational noise, and side effects not implied by a simple status request.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
82% confidence
Finding

The trigger section hardcodes both Hebrew and English phrases, but the document does not explain whether the skill supports multiple languages by default, how language is selected, or whether users can opt into a preferred locale. This can create unclear language-policy behavior because the skill appears to enforce locale handling implicitly rather than by explicit user choice.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.