Back to skill

Security audit

clawvision

Security checks for vulnerabilities and agentic risk

Overview

ClawVision has a coherent session-export purpose, but it handles private session history and has under-disclosed metadata plus unsafe output handling that users should review before installing.

Install only if you are comfortable letting the skill read selected OpenClaw session history and create local export files. Avoid using it on sessions containing secrets or personal data, and treat generated HTML as untrusted until the renderer validates model output and sanitizes explicit slugs.

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

Warning
Location
scripts/generate_visual.py:382
Finding

Stored HTML Injection Through an Unvalidated Checklist Status

Content
View full analysis
{_h(c.get('text', ''))} {_h(status)}\n" ``` ### Technical Analysis The `checklist[].status` value originates from parsed JSON and is inserted directly into the quoted `class` attribute. Although the summary prompt asks the model to return only `ready`, `pending`, or `blocked`, the implementation does not enforce that allowlist. The visible status text is escaped through `_h(status)`, but the copy embedded in the `class` attribute is not escaped. A malicious value containing a quotation mark can terminate the attribute and introduce new attributes or HTML elements. For example, a crafted status value conceptually similar to the following could introduce an image with an error handler: ```text x">
Remediation
View remediation
{_h(c.get("text", ""))} ' f'{_h(status)}\n' ) ``` 3. Validate the complete inference response against a JSON schema before passing it to any renderer. Validate field types, required properties, string lengths, array lengths, and enum values. 4. Prefer a proper template engine with context-aware escaping rather than manual string replacement. 5. Add a restrictive Content Security Policy. Because the current template contains inline JavaScript, move that code to a local script or authorize it with a nonce or hash. At minimum, prohibit inline event handlers and remote connections. 6. Add regression tests using quotation marks, angle brackets, event-handler attributes, malformed types, and oversized values in every model-generated field. ]]>

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/generate_visual.py:632
Finding

Output Directory Escape Through an Unvalidated Slug

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • System Prompt LeakageDirect Leakage, Indirect Extraction, Tool-Based Exfiltration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
Findings (5)

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The metadata description claims the update is limited to transparency and permission cleanup, but the skill still performs broad session extraction, model prompting, and multi-format file generation. This mismatch can mislead reviewers and users about the actual data flows and capabilities, reducing informed consent and making risky permissions or behaviors easier to overlook.

Content

No source excerpt is available for this finding.

Direct Prompt Extraction

High
Category
System Prompt Leakage
Confidence
89% confidence
Finding

The skill explicitly extracts the full session transcript and injects it into a model prompt, which is a direct prompt/data exfiltration pathway from prior conversation context into another processing stage. Even though the model is described as local, this still expands exposure of potentially sensitive session contents and creates prompt-injection risk where hostile transcript content can manipulate the summarizer or cause unsafe inclusion of secrets in outputs.

Content

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

{{transcript}}

text

## Output rules

- HTML must be self-contained: inline CSS and JS, no external assets. Preset font should be requested from a web-safe fallback stack.
- Include an EN/RU/ZH language switcher and light/dark theme toggle.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

Granting exec to a skill that processes conversation transcripts and writes exports unnecessarily expands its attack surface. If transcript content, generated JSON, paths, or future script arguments are ever influenced unexpectedly, shell execution could turn a summarization workflow into arbitrary local command execution or unsafe file operations.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
73% confidence
Finding

The script writes an HTML file to the output directory using write_text(), but the code does not provide a visible warning, confirmation, or pre-write log message describing this file creation. Although generating output is part of the script's function, SQP-2 for code files looks for some form of disclosure around file writes when none is otherwise visible in the file.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
78% confidence
Finding

This code creates a .pptx file on disk via prs.save() when the --pptx option is used, but there is no confirmation prompt, explicit log message before writing, or inline comment/docstring warning about the file-write side effect. For code-file SQP-2, file writes can be flagged when they lack any visible disclosure unless the action is clearly explained elsewhere in the skill description.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.