Back to skill

Security audit

Openclaw

Security checks for vulnerabilities and agentic risk

Overview

This skill coherently processes user-provided books into local summaries and an HTML reader, with disclosed file outputs and some supply-chain hardening gaps but no evidence of deception or exfiltration.

Before installing, expect the skill to create local derived book files and summaries. For sensitive books, review or delete the generated input/, chapters/, summaries/, and html/ directories afterward, and prefer pinned Python dependencies plus a bundled local Markdown renderer instead of a CDN script.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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)

T08 · Insecure Dependencies

Warning
Location
SKILL.md:14
Finding
Unpinned Python Dependencies Permit Supply-Chain Substitution## Vulnerability Details **File Location**: `SKILL.md`, lines 14-17; dependency execution is directed at line 32 **Vulnerability Type**: Unpinned third-party Python dependencies **Risk Level**: Medium ### Vulnerable Code ```yaml install: - kind: pip package: ebooklib - kind: pip package: beautifulsoup4 ``` The workflow subsequently directs the agent to use these installed packages: ```markdown 2. If EPUB: write a Python script that uses the `ebooklib` and `beautifulsoup4` libraries (declared as dependencies in this skill) to extract text content from the EPUB file and save it as a clean TXT file. Run the script with `python3`. ``` ### Technical Analysis Both Python packages are declared without exact version constraints or cryptographic integrity hashes. Consequently, the package contents installed by `pip` can change independently of the reviewed skill. The effective executable dependency set is therefore not reproducible. Python packages can execute code during package installation and when imported by the generated preprocessing script. If a package release, transitive dependency, package-index account, or configured package source is compromised, attacker-controlled code may execute with the permissions of the account running the skill. The names shown are established packages rather than apparent typosquats, so this finding does not establish that the current releases are malicious. The risk arises from retrieving and executing mutable, unverified dependency versions. ### Attack Path 1. An attacker compromises a declared package, one of its transitive dependencies, its publishing account, or a package source trusted by the runtime. 2. The attacker publishes a malicious version that remains compatible with the unrestricted dependency declaration. 3. The skill installation process invokes `pip`, which resolves and downloads the malicious version because no reviewed version or hash is enforced ...[truncated 752 chars]
Remediation
## Remediation Suggestions - Pin each direct dependency to a reviewed exact version, such as `package==x.y.z`. - Maintain a lock file that records the complete transitive dependency graph. - Require cryptographic hashes for every resolved artifact, for example through a hash-locked requirements file and `pip install --require-hashes`. - Use only an explicitly configured, trusted package index; prevent fallback to unapproved indexes. - Prefer prebuilt, reviewed artifacts and verify package provenance or signatures where available. - Install and execute dependencies inside a sandbox or virtual environment with minimal filesystem and network permissions. - Add automated dependency vulnerability and provenance scanning, and review changes before updating locked versions.

T08 · Insecure Dependencies

Warning
Location
SKILL.md:125
Finding
Generated Reader Executes an Unpinned CDN JavaScript Dependency## Vulnerability Details **File Location**: `SKILL.md`, line 125 **Vulnerability Type**: Mutable remote client-side dependency **Risk Level**: Medium ### Vulnerable Code ```markdown - Main content area that renders chapter summaries (Markdown rendered via marked.js CDN) ``` ### Technical Analysis The generated HTML reader is required to execute `marked.js` from a CDN, but the skill does not require an exact library version, a specific trusted origin, Subresource Integrity, or a restrictive Content Security Policy. This also conflicts with the requirement that the reader be self-contained. JavaScript loaded through a script element executes in the reader's browser context. If the selected CDN, hosted asset, DNS path, or publishing account is compromised—or if a mutable library URL later serves altered content—the browser can execute attacker-controlled JavaScript when the generated reader is opened. Although the skill explicitly prohibits API keys, API URLs, and external AI calls in the reader, that restriction does not protect against code introduced through the CDN dependency. No actual malicious CDN URL or payload is present in the audited file; the issue is the instruction to depend on mutable remote executable content without integrity controls. ### Attack Path 1. The generated `interactive_reader.html` includes a remote `marked.js` script in accordance with the skill instructions. 2. The referenced CDN asset or its delivery path is compromised, replaced, or changed after the HTML file is generated. 3. A user opens the reader while network access is available. 4. The browser downloads and executes the modified JavaScript. 5. The script reads or changes content available within the reader, falsifies rendered summaries, or transmits accessible reader data to an attacker-controlled endpoint if browser and policy restrictions permit. ### Impact Assessment Exploitation could compromise the confidentiality and integr ...[truncated 528 chars]
Remediation
## Remediation Suggestions - Bundle a reviewed, exact version of `marked.js` with the generated reader rather than loading executable code from a CDN. - Ensure the local library is included in integrity and release-review processes. - If remote delivery is unavoidable, mandate an exact versioned HTTPS URL from an approved origin. - Require Subresource Integrity with a reviewed cryptographic hash and the appropriate `crossorigin` attribute. - Apply a restrictive Content Security Policy that limits scripts to the approved source and blocks unnecessary connections, plugins, framing, and dynamic code execution. - Avoid permissive mechanisms such as `unsafe-inline`, `unsafe-eval`, and unrestricted `connect-src`. - Sanitize rendered Markdown and disable raw HTML unless explicitly required, reducing the impact of untrusted book or summary content. - Update the specification so that “self-contained” consistently means that the generated reader requires no remote executable resources.
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
Findings (4)

Natural-Language Policy Violations

Medium
Confidence
97% confidence
Finding
The instruction "All output must be in English" imposes a fixed language requirement regardless of the user's preference or the source book's language. This is a natural-language policy issue because the skill does not offer a language choice or document a justified locale constraint.

Missing User Warnings

Low
Confidence
84% confidence
Finding
The markdown directs the agent to extract book content and save a cleaned text file to `input/book_clean.txt`, which is a file write affecting the user's workspace. The skill description explains what to do, but it does not explicitly warn the user that local files and directories will be created or modified.

Missing User Warnings

Low
Confidence
81% confidence
Finding
The instructions require creating chapter files and possibly additional split-part files in `chapters/`, which can significantly expand the number of files generated from the user's source book. Because this is a markdown skill description, it should disclose workspace-affecting behavior that may impact user data organization or storage.

Missing User Warnings

Low
Confidence
79% confidence
Finding
The skill description instructs saving chapter summaries and a self-contained HTML reader derived from the user's uploaded book, but it does not explicitly warn that substantial derived content will be written to disk. For markdown files, behaviors affecting user data or system state should be disclosed clearly to the user.

Static analysis

No suspicious patterns detected.