Back to skill

Security audit

Ai News Poster

Security checks for vulnerabilities and agentic risk

Overview

This skill is a local AI-news poster renderer with some install-safety caveats, but no evidence of hidden access, persistence, exfiltration, or destructive runtime behavior.

Install only if you want a Chinese or bilingual fixed-template AI news poster tool. Use a virtual environment and pin Pillow if possible, and be careful with the manual's update command because rm -rf deletes the existing skill directory without confirmation.

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:82
Finding

Unpinned Third-Party Dependency Installation

Content
View full analysis

Vulnerability Details

File Location: SKILL.md:82-83; OPENCLAW-操作手册.md:12-14
Vulnerability Type: T08: Insecure Dependencies
Risk Level: Medium

Vulnerable code in SKILL.md:

bash
python -m pip install pillow

Vulnerable code in OPENCLAW-操作手册.md:

bash
python3 -m pip install pillow

Technical Analysis

The installation instructions retrieve Pillow without specifying a reviewed version, verifying a package hash, or using a lockfile. Consequently, the dependency resolved during installation can change after the skill has been audited.

Although the package name is legitimate and no malicious dependency is embedded in the project, the instructions do not guarantee that users install the same dependency artifact that was reviewed and tested. A compromised package repository, compromised upstream release, or unsafe future package version could introduce malicious installation behavior or incompatible runtime behavior. Python package installation can execute package build or installation logic with the privileges of the user invoking pip.

Attack Path

  1. An attacker compromises the upstream package distribution channel, a maintainer account, or a future package release.
  2. A user follows the documented command and runs pip install pillow without a version or hash constraint.
  3. pip resolves and downloads the currently published artifact rather than a previously reviewed artifact.
  4. Malicious build or installation logic executes with the invoking user's privileges, or malicious runtime behavior is loaded when render.py imports Pillow.
  5. The compromised dependency can access resources available to that user and affect every subsequent invocation within the same Python environment.

This path depends on compromise or malicious modification of the external dependency supply chain; the audited repository does not itself retrieve code from an arbitrary URL or contain an e ...[truncated 703 chars]

Remediation
View remediation

Remediation Suggestions

  1. Add a dependency lock file containing a reviewed Pillow version and its cryptographic hashes, for example:
    text
    Pillow==<reviewed-version> \
        --hash=sha256:<verified-wheel-hash>
    
  2. Replace the direct installation command with:
    bash
    python3 -m pip install --require-hashes -r requirements.txt
    
  3. Generate and review hashes for every supported platform and Python version rather than inserting placeholder values.
  4. Install dependencies in a dedicated virtual environment instead of the system Python environment:
    bash
    python3 -m venv .venv
    . .venv/bin/activate
    python3 -m pip install --require-hashes -r requirements.txt
    
  5. Document the tested Python and Pillow versions and update them through an explicit dependency-review process.
  6. Apply the same hardened installation instructions consistently in both SKILL.md and OPENCLAW-操作手册.md.
  7. In automated environments, scan locked dependencies for known vulnerabilities and verify artifacts against an approved package index or internal mirror before deployment.
Vulnerability Patterns
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • Rogue AgentSelf-Modification, Session Persistence
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (13)

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
91% confidence
Finding

The manual directs users to run rm -rf ~/.openclaw/skills/ai-news-poster as part of a routine update workflow. Although targeted, rm -rf is a high-risk primitive: if the path is mistyped, shell-expanded unexpectedly, or adapted by users, it can delete unintended files without confirmation; the skill context makes this more dangerous because it is presented as normal maintenance guidance likely to be copied verbatim.

Content

Scanner excerpt · OPENCLAW-操作手册.md (reported line 91)May include surrounding context.

如果你在仓库里改了 skills/ai-news-poster,重新覆盖到 OpenClaw 托管目录:

bash
rm -rf ~/.openclaw/skills/ai-news-poster
cp -R /Users/cyc-mac/skills/skills/ai-news-poster ~/.openclaw/skills/ai-news-poster
openclaw skills info ai-news-poster

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
91% confidence
Finding

The manual directs users to run rm -rf ~/.openclaw/skills/ai-news-poster as part of a routine update workflow. Although targeted, rm -rf is a high-risk primitive: if the path is mistyped, shell-expanded unexpectedly, or adapted by users, it can delete unintended files without confirmation; the skill context makes this more dangerous because it is presented as normal maintenance guidance likely to be copied verbatim.

Content

Scanner excerpt · OPENCLAW-操作手册.md (reported line 91)May include surrounding context.

如果你在仓库里改了 skills/ai-news-poster,重新覆盖到 OpenClaw 托管目录:

bash
rm -rf ~/.openclaw/skills/ai-news-poster
cp -R /Users/cyc-mac/skills/skills/ai-news-poster ~/.openclaw/skills/ai-news-poster
openclaw skills info ai-news-poster

Tp4

High
Category
MCP Tool Poisoning
Confidence
93% confidence
Finding

The code generally aligns with the broad idea of creating a fixed-template AI news poster from five items, so it is related to the declared purpose. However, there are material gaps. It does not actually generate daily AI news posters from user intent; it only renders a PNG from an already-prepared local JSON file. It performs no news selection, summarization, or content generation. It also hardcodes Chinese header text ('科创中心', 'AI热点速报', '热点资讯') and does not use the provided title field, which conflicts with the description's implication of Chinese or bilingual output and customizable poster wording. Thus the actual code is a narrower rendering utility than the declared skill behavior, making this a description-behavior mismatch.

Content

No source excerpt is available for this finding.

Session Persistence

Medium
Category
Rogue Agent
Confidence
60% confidence
Finding

Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.

Content

Scanner excerpt · OPENCLAW-操作手册.md (reported line 21)May include surrounding context.

OpenClaw 的本地托管技能目录是:~/.openclaw/skills

bash
mkdir -p ~/.openclaw/skills
cp -R /Users/cyc-mac/skills/skills/ai-news-poster ~/.openclaw/skills/ai-news-poster

Skill Enumeration

Medium
Category
Agent Snooping
Confidence
80% confidence
Finding

Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.

Content

Scanner excerpt · OPENCLAW-操作手册.md (reported line 35)May include surrounding context.

md
预期关键结果:
- `Source: openclaw-managed`
- `Path: ~/.openclaw/skills/ai-news-poster/SKILL.md`
- 状态为 `Ready`

### 3.2 全量健康检查

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The manual instructs users to run a destructive deletion command before reinstalling the skill, but it provides no warning, backup guidance, path verification, or safer alternative. While scoped to a specific directory, destructive filesystem operations in operational docs can still cause accidental data loss if copied incorrectly, expanded unexpectedly, or modified by users.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
70% confidence
Finding

Without declared permissions the skill's intent is opaque and cannot be validated.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The manifest description states the skill should be used for requests including Chinese or bilingual output, and later sections prescribe Chinese title/text defaults. This creates a language/locale constraint in the skill behavior without clearly offering the user a language choice or opt-in path.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

Instructing the agent to run python -m pip install pillow expands the skill from deterministic poster rendering into package installation, which introduces supply-chain and environment-modification risk. If executed in an automated environment, this can pull unpinned external code, alter the runtime, and create a path for malicious or compromised packages to affect the system.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

This JSON content is entirely presented in Chinese, including the title and all news text, with no indication that language selection is optional or user-configurable. The audit criteria require flagging language or locale policy violations when a specific language is imposed without opt-in or clear documented justification.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The rendered poster includes fixed Chinese text literals such as the title, subtitle, date suffix, and section header, which imposes a specific language regardless of user preference. This is a natural-language locale policy concern because the skill does not offer any way to choose or opt into the language.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
80% confidence
Finding

The troubleshooting section specifically assumes Chinese font handling (中文字体显示异常) and states the script will try common macOS Chinese fonts. This reflects a language/locale-specific expectation without documenting user choice or clarifying that the skill is intended only for Chinese-language content.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
87% confidence
Finding

The module docstring and CLI usage imply the script renders the poster content from the provided input JSON. However, although load_input requires a title field, render_poster does not use data.title and instead hard-codes Chinese title strings at L258-L260. This is an intent/documentation mismatch within the file because documented input-driven rendering is contradicted by fixed output text.

Content

No source excerpt is available for this finding.

Static analysis

Detected: suspicious.destructive_delete_command

Documentation contains a destructive delete command without an explicit confirmation gate.

Warn
Code
suspicious.destructive_delete_command
Location
OPENCLAW-操作手册.md:91