Back to skill

Security audit

blog-polish-zhcn-images

Security checks for vulnerabilities and agentic risk

Overview

The skill appears locally scoped and non-destructive, but its executable workflow does not actually perform the promised translation and polishing.

Review this skill before installing if you need real translation and publishing output: the included workflow appears to create a simulated result rather than a polished zh-CN article. Also remember that drafts are saved under ~/.openclaw by default, so choose a different output directory or clean up files when working with sensitive content.

Vulnerability Patterns
  • 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
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Output HandlingUnvalidated Output Injection, Cross-Context Output, Unbounded Output
  • Rogue AgentSelf-Modification, Session Persistence
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
Findings (9)

Description-Behavior Mismatch

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

The manifest says the skill will polish a technical blog into an 800–1000 word zh-CN article while preserving terms and code. In code, the polish_and_translate step simply wraps the original content in a fixed string and writes it out, without performing any restructuring, translation, or length enforcement.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The markdown instructions say outputs should use yymmddhhmm-* naming and include a subject-derived filename. The code sets ts=$(date +"%H%M") and writes only ${ts}-polished.md, which directly contradicts the documented naming behavior.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The description promises consistent hero and per-section image prompts for the user's blog, implying prompts should reflect the draft topic and section count. The code always emits exactly three fixed filenames and three generic prompts, regardless of the blog subject, requested style/background/aspect ratio, or number of sections.

Content

No source excerpt is available for this finding.

Session Persistence

Medium
Category
Rogue Agent
Confidence
92% confidence
Finding

The skill persists user-provided or derived content to a stable workspace path under the user's home directory, which can leave sensitive draft material on disk beyond the current session. In a content-processing skill, this increases privacy and data-retention risk, especially if drafts contain unpublished, confidential, or proprietary information.

Content

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

md
- code blocks and commands (no translation inside code fences)
  - inline code spans (backticks) as-is unless obviously wrong
- **Images**: generate a **hero prompt** + **one prompt per section**, all in the same style/tone
- **Save**: write everything to `~/.openclaw/workspace/contentPolished/` using `yymmddhhmm-*` naming

## When to Use This Skill

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The instruction says that when the user asks to polish a technical blog, translate it to Simplified Chinese, and create images, the agent 'MUST use this skill,' and the skill is explicitly fixed to zh-CN. This enforces a specific locale/language behavior rather than offering a choice, which matches the language-policy violation category.

Content

No source excerpt is available for this finding.

Session Persistence

Medium
Category
Rogue Agent
Confidence
91% confidence
Finding

The documented workflow explicitly creates timestamped files in a persistent workspace, which can accumulate historical copies of user content and metadata over time. This increases exposure if the workstation is shared, backed up to external systems, or later compromised.

Content

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

  1. Resolve defaults:
    • draftPath = input.draftPath || "~/.openclaw/workspace/contentDraft/latestDraft.md"
    • outputDir = input.outputDir || "~/.openclaw/workspace/contentPolished/"
  2. Create a timestamp prefix ts in yymmddhhmm format (Linux/macOS):
text
date +"%y%m%d%H"

Unbounded Output

Medium
Category
Output Handling
Confidence
60% confidence
Finding

Output size or generation rate is not bounded. Unbounded output enables denial-of-service through resource exhaustion, log flooding, or context-window stuffing.

Content

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

md
- `skills`, `plugin`, `OpenClaw`, `ClawHub`, `CLI`, `Markdown`, `YAML`
- If a technical term has a standard Chinese translation but the English term is common in your audience, keep the English term and (optionally) add a short Chinese clarification once on first use

### Step 5 — Enforce Length (1000–1200 Words) Without Cutting Meaning

Target final length 800–1000 words (counting Chinese words approximately by rough equivalence).

Session Persistence

Medium
Category
Rogue Agent
Confidence
93% confidence
Finding

The save step formalizes durable storage of the polished article and related image filenames, creating a predictable artifact trail on disk. Predictable, persistent output paths make it easier for other local processes or users to discover unpublished content, which is a real confidentiality concern even though it is not remote code execution.

Content

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

md
1. Decide `subject`:
   - `subject = input.subject || slugify(title)` (lowercase, hyphens)
2. Write the polished markdown:
   - `{{outputDir}}/{{ts}}-{{subject}}.md`
3. Determine image filenames:
   - Hero: `{{ts}}-main.png`

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
80% confidence
Finding

The documentation describes a careful content-processing workflow with preservation of code fences, inline code, and technical terms through translation. The implementation merely loads the entire file with cat and passes raw content onward, with no evidence of the promised exact-preservation or structured parsing behavior.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.