Back to skill

Security audit

ClawVision Lite

Security checks for vulnerabilities and agentic risk

Overview

This session-to-HTML exporter is mostly coherent, but its renderer can let crafted summary data inject browser script and can write HTML outside the intended output folder when a slug is supplied.

Install only if you are comfortable letting the skill read the selected OpenClaw session and summarize it locally. Avoid sessions containing secrets, inspect generated HTML before sharing it, and prefer default output naming until the publisher adds strict status validation, HTML attribute escaping, and slug path containment.

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
scripts/generate_visual.py:112
Finding

Stored HTML Attribute Injection Through Unvalidated Checklist Status

Content
View full analysis
{_h(c.get("text", ""))} {_h(status)}\n' ``` ### Technical Analysis The `status` value is inserted directly into a double-quoted HTML `class` attribute without escaping or validation: ```html ``` Although the same value is passed through `_h()` when rendered as visible text, its use inside the `class` attribute remains unprotected. The summary JSON may be generated from attacker-influenced session content through an LLM. The prompt asks the model to use `ready`, `pending`, or `blocked`, but prompt instructions do not constitute a security boundary. For example, the following JSON value can terminate the `class` attribute and add an event handler: ```json { "text": "Open this item", "status": "ready\" onmouseover=\"alert(document.domain)" } ``` This produces markup equivalent to: ```html ``` The resulting payload executes when the generated report is opened and the event is triggered. The HTML document does not impose a Content Security Policy that would prevent inline event handlers. ### Attack Path 1. An attacker places adversarial content in a session that will be summarized, or otherwise controls the summary JSON supplied to the renderer. 2. The resulting `checklist[].status` value contains a quotation mark and an injected HTML event handler. 3. `render_html()` inserts the value into the `class` attribute without escaping or allowlist validation. 4. The Skill writes the generated content to an HTML file. 5. The user opens the file in a browser. 6. The injected event is triggered, causing at ...[truncated 679 chars]
Remediation
View remediation
` element. Avoid allowing inline event handlers. 6. Add regression tests with payloads containing quotation marks, event handlers, tags, and malformed status values. ]]>

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/generate_visual.py:176
Finding

Output Path Traversal and Arbitrary HTML File Overwrite Through Unsanitized Slug

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • 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
Findings (9)

Tp4

High
Category
MCP Tool Poisoning
Confidence
94% confidence
Finding

Most of the implementation aligns with the declared scope: it generates a single self-contained HTML file, is English-only in its UI labels, and contains no analytics, PowerPoint, or Markdown features. However, the description specifically says it 'Reads session history,' while this code does not parse or access OpenClaw session history. It only consumes an already-prepared JSON summary via stdin or a file path. That is a material mismatch in the skill's stated behavior and input source, even though the output format is otherwise consistent.

Content

No source excerpt is available for this finding.

Direct Prompt Extraction

High
Category
System Prompt Leakage
Confidence
85% confidence
Finding

Skill contains instructions that could directly expose system prompts, internal rules, or hidden instructions to users or external parties.

Content

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

{{transcript}}

text

## Output rules

- HTML is self-contained (inline CSS and JS only).
- English UI labels only.

Context Leakage

High
Category
Data Exfiltration
Confidence
85% confidence
Finding

Code or instructions that leak agent conversation context to external services, potentially exposing sensitive user interactions.

Content

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

md
- Confirm intent before accessing session history or writing files.
- Ask first if the session may contain sensitive content.
- Do not send session data to external APIs.
- Review the generated HTML before sharing it.

Context Leakage

High
Category
Data Exfiltration
Confidence
80% confidence
Finding

Code or instructions that leak agent conversation context to external services, potentially exposing sensitive user interactions.

Content

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

md
- Confirm intent before accessing session history or writing files.
- Ask first if the session may contain sensitive content.
- Do not send session data to external APIs.
- Review the generated HTML before sharing it.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The description explicitly states the skill is "English-only," which imposes a language restriction as a policy choice rather than offering the user a language or locale option. The file does not provide a user opt-in mechanism or a clear region/compliance justification for this constraint.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

Declaring exec gives the skill the ability to launch local programs, which materially increases the attack surface beyond a simple file exporter. If the invoked script path, arguments, or input files are influenced by untrusted session content or user-controlled paths, this can enable command execution abuse or unsafe file access.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The manifest description at L003 frames the skill as reading session history and writing a single self-contained HTML file, which suggests a straightforward local export pipeline. However, the skill documentation explicitly says it summarizes the conversation with a local LLM, adding an AI inference capability that is not disclosed in the manifest description.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The output rules mandate "English UI labels only," which is a natural-language policy restriction affecting all users. No alternative language selection, opt-in, or documented justification is provided in the skill instructions.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The module docstring states 'English-only, no extras,' and the generated HTML also hard-codes lang="en". This imposes a language/locale constraint without offering the user a choice or documenting a justified region-specific need.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.