Back to skill

Security audit

Clawvisual

Security checks for vulnerabilities and agentic risk

Overview

This skill is a disclosed wrapper for a local carousel-generation CLI/MCP service, with ordinary but real supply-chain and API-key handling considerations.

Install only if you trust the npm package publisher and are comfortable giving the CLI an LLM API key. Prefer a pinned reviewed version or isolated environment when possible, and avoid using the raw call command with untrusted tool names or arguments.

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 (1)

T08 · Insecure Dependencies

Warning
Location
SKILL.md:3
Finding
Unpinned Third-Party npm Package Executes Unreviewed Code## Vulnerability Details **File Location**: `SKILL.md`, lines 3 and 13 **Vulnerability Type**: `T08: Insecure Dependencies` **Risk Level**: Medium ### Vulnerable Code ```yaml metadata: {"clawdbot":{"emoji":"🖼️","requires":{"bins":["clawvisual"]},"install":[{"id":"npm","kind":"npm","package":"clawvisual","bins":["clawvisual"],"label":"Install clawvisual (npm)"}]}} ``` ```bash npm install -g clawvisual ``` ### Technical Analysis The Skill installs the third-party `clawvisual` npm package without specifying an exact version or integrity hash. The package's source code, package manifest, and lockfile are not included in the audited project, so its installation hooks and runtime behavior cannot be verified from the available artifact. Running `npm install -g clawvisual` resolves whichever package version is current under that npm package name. npm packages may execute package-controlled lifecycle scripts during installation and install executable commands. The global installation scope also makes the resulting command available outside this individual Skill invocation. This creates a supply-chain exposure: a compromised maintainer account, malicious package release, or unexpected future package update could alter the code executed by users without requiring any change to `SKILL.md`. The documentation later directs users to provide API keys to this unaudited executable, increasing the potential sensitivity of a compromised dependency. The audit found no evidence that the current package is malicious. The issue is the Skill's unpinned and unverifiable trust in an externally maintained executable dependency. ### Attack Path 1. An attacker compromises the npm package, its maintainer account, or its release process and publishes a malicious version under the `clawvisual` package name. 2. A user or Agent follows the installation instruction in `SKILL.md`: ```bash npm install -g clawvisual ``` 3. npm resolves ...[truncated 1159 chars]
Remediation
## Remediation Suggestions 1. Pin the dependency to an exact, reviewed version rather than resolving the latest release: ```bash npm install --global clawvisual@<reviewed-exact-version> ``` 2. Record and verify the expected package integrity digest through a lockfile or an equivalent trusted verification mechanism. 3. Prefer a project-local installation over a global installation to reduce command replacement and cross-project exposure. 4. Review and retain the source code and package metadata corresponding to the pinned release. 5. Disable npm lifecycle scripts during installation with `--ignore-scripts` unless they are demonstrably required. If scripts are required, audit each script before permitting execution. 6. Pin the package by immutable artifact or commit and establish a controlled update process requiring security review. 7. Document the expected network endpoints, local credential-storage behavior, and file permissions used by the CLI. 8. Store API keys using an operating-system credential manager or another protected secret store rather than plaintext configuration, if supported. 9. Run the CLI with least privilege and restrict filesystem and network access where practical.
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 (1)

MCP Config Access

High
Category
Agent Snooping
Content
- `clawvisual initialize`: probe/start local service and print Web URL.
- `clawvisual status`: check service identity (must be `clawvisual`).
- `clawvisual tools`: list MCP tools.
- `clawvisual convert --input <text_or_url> [--slides auto|1-8] [--ratio 4:5|1:1|9:16|16:9] [--lang <code>]`
- `clawvisual status --job <job_id>`: query job state and result.
- `clawvisual revise --job <job_id> --instruction <text> [--intent rewrite_copy_style|regenerate_cover|regenerate_slides]`
Confidence
80% confidence
Finding
Skill accesses MCP server configuration files (mcp.json). MCP configs contain server URLs, authentication tokens, and tool definitions — reading them allows the skill to discover and potentially abuse other tool integrations.

Static analysis

No suspicious patterns detected.