Back to skill

Security audit

content-matrix-publisher

Security checks for vulnerabilities and agentic risk

Overview

This skill is not clearly malicious, but it can publish to connected social accounts automatically despite settings that imply draft-only or manual control.

Install only if you are comfortable giving this workflow publishing access to real Xiaohongshu and WeChat accounts. Before enabling it, pin and verify dependency skills, store credentials outside plaintext configs, disable schedules and webhooks by default, and require human preview/approval before every publish action.

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

T08 · Insecure Dependencies

Warning
Location
README.md:56
Finding
Unpinned Third-Party Skill Dependencies<![CDATA[ ## Vulnerability Details **File Location**: `README.md:56-64` **Vulnerability Type**: Supply-chain exposure through unpinned executable dependencies **Risk Level**: Medium ### Vulnerable Code ```bash # Install all dependent Skills openclaw skill install agent-reach openclaw skill install summarize openclaw skill install xiaohongshu-mcp openclaw skill install card-renderer openclaw skill install wechat-article-pro ``` ### Technical Analysis The installation instructions identify five executable third-party Skills only by mutable package name. They do not specify reviewed versions, immutable digests, publisher identities, cryptographic signatures, or an approved registry. Consequently, the code installed when these commands are executed can change after this project has been audited. A compromised upstream release, registry account, or package-name resolution process could cause users to install malicious code without any modification to this repository. The affected dependencies perform sensitive operations such as gathering external content, rendering files, and publishing to authenticated social-media accounts. Their implementations are not included in this repository and therefore could not be verified during this audit. ### Attack Path 1. An attacker compromises a dependency publisher or the registry entry for one of the named Skills. 2. The attacker publishes a malicious release under the same mutable dependency name. 3. A user follows the documented installation commands. 4. OpenClaw resolves and installs the attacker's current package version. 5. The malicious Skill executes when the workflow invokes it. 6. Depending on the runtime permissions granted to that Skill, it may access configured platform credentials, alter generated content, publish unauthorized material, or perform other actions available to the Agent. ### Impact Assessment Successful exploitation would execute attacker-controlled dependency logic with the permissions gran ...[truncated 599 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Pin every dependency to an explicitly reviewed version or immutable content digest. 2. Declare the expected registry, canonical package identity, and verified publisher for each Skill. 3. Require cryptographic signature or checksum verification before installation. 4. Maintain a lock file or equivalent dependency manifest that prevents automatic resolution to newer releases. 5. Review dependency source code and release changes before updating pinned versions. 6. Grant each dependency only the minimum tools, filesystem paths, network destinations, and credentials required for its role. 7. Isolate publishing credentials from discovery, summarization, and rendering dependencies. 8. Add automated dependency-integrity and provenance checks to the installation process. ]]>

T09 · Insecure Skill Coding Practices

Warning
Location
workflow.json:112
Finding
Scheduled Workflow Can Bypass the Disabled Auto-Publish Setting<![CDATA[ ## Vulnerability Details **File Location**: `config/default.yaml:27-30`, `config/default.yaml:41-47`, `workflow.json:112-132`, and `workflow.json:157-162` **Vulnerability Type**: Missing authorization and approval enforcement for external publication **Risk Level**: Medium ### Vulnerable Code The default configuration indicates that automatic publishing is disabled: ```yaml distribution: auto_publish: false save_draft: true retry_count: 3 retry_delay: 60 ``` However, scheduled operation is enabled: ```yaml schedule: enabled: true times: - "09:00" - "12:00" - "18:00" timezone: "Asia/Shanghai" ``` The distribution phase invokes publication actions directly and contains no condition tied to `distribution.auto_publish`: ```json { "id": "distribution", "name": "Multi-platform distribution", "estimated_time": "5min", "parallel": true, "steps": [ { "skill": "card-renderer", "action": "generate", "params": { "content": "${created_content.xiaohongshu}", "style": "Mac Pro" } }, { "skill": "xiaohongshu-mcp", "action": "publish", "params": { "title": "${created_content.xiaohongshu.title}", "content": "${created_content.xiaohongshu.body}", "images": ["${card_image_path}"] } }, { "skill": "WeChat publishing assistant", "action": "publish", "params": { "title": "${created_content.wechat.title}", "content": "${created_content.wechat.body}", "auto_cover": true } } ], "output": "publish_results" } ``` The workflow also defines a cron trigger: ```json "scheduled": { "type": "cron", "description": "Automatically publish every day at 9 AM", "schedule": "0 9 * * *" } ``` ### Technical Analysis The configuration presents `auto_publish: false` and `save_draft: true` as safety controls, but the executable workflow does not reference or enforce either setting befo ...[truncated 2189 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Enforce `distribution.auto_publish` within the executable workflow rather than treating it as documentation-only configuration. 2. When `auto_publish` is `false`, replace every external `publish` action with a draft-saving action. 3. Add a mandatory approval stage immediately before publication. Bind approval to the final content hash, target account, target platform, and expiration time. 4. Disable all schedules by default and require an explicit administrative action to enable them. 5. Reject startup when workflow behavior conflicts with safety configuration, such as an enabled publication schedule combined with `auto_publish: false`. 6. Require separate approval for each platform so approval for one account cannot authorize another. 7. Log the trigger source, approver, final content, target account, and publication result in an immutable audit record. 8. Ensure retries cannot bypass approval or repeatedly publish content after an ambiguous timeout. 9. Add automated tests verifying that scheduled and webhook invocations cannot reach a `publish` action while automatic publication is disabled. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (13)

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding
声明描述的核心能力是“生成多平台内容并自动分发”,即内容改写/生成与发布分发流程。而代码仅是一个 discovery.sh 热点发现脚本:接收主题词,调用 agent-reach 在小红书、微博、知乎执行搜索,将结果输出到本地文件,并做简单汇总。它没有实现任何内容生成、转换、排版、发布、分发或调度逻辑。虽然热点发现可能是内容矩阵工作流的辅助步骤,但该代码片段的主要目的与声明的主要目的存在明显差异,因此应判定为描述与实际行为不匹配。

Natural-Language Policy Violations

Medium
Confidence
90% confidence
Finding
The README presents all user-facing instructions and examples exclusively in Chinese, which can amount to a language-policy issue when no user opt-in or locale limitation is stated. The policy allows fixed-language behavior only when the skill offers a language choice or clearly documents a justified regional constraint, neither of which appears here.

Vague Triggers

Medium
Confidence
92% confidence
Finding
The trigger scope is effectively unspecified, while the examples are broad, everyday requests such as generating and distributing topical content. In an agent environment, vague triggers can cause unintended invocation of a skill that performs external searches and may lead to publication actions, increasing the risk of accidental data disclosure or unauthorized posting.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The skill is designed to publish to external platforms using stored account credentials, but the description does not prominently warn users that it can perform outbound posting on their behalf. Without explicit user-facing notice and confirmation, a user may invoke the skill expecting drafting assistance while the agent proceeds to search, transform, and publish content through connected accounts.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The configuration embeds highly sensitive authentication material such as web session cookies and WeChat app credentials, but the document does not include secure-handling guidance or privacy warnings. If users store these values insecurely, share configs, or logs expose them, attackers could hijack platform accounts, publish unauthorized content, or access associated account data.

Natural-Language Policy Violations

Medium
Confidence
92% confidence
Finding
The file uses Chinese-only natural-language labels and config values throughout, and explicitly fixes the timezone to Asia/Shanghai. This indicates a Chinese locale assumption without any visible opt-in, alternative locale support, or justification that the skill is region-specific.

Natural-Language Policy Violations

Medium
Confidence
94% confidence
Finding
This shell script uses Chinese in its title, status messages, and error messages throughout, with no indication that the user can choose another language or that the skill is intentionally limited to a Chinese-speaking or region-specific context. That creates a natural-language locale policy issue under the rule for forced language without user opt-in.

Missing User Warnings

Medium
Confidence
93% confidence
Finding
The script performs live publishing to external platforms as soon as DRY_RUN is not set to true, without any interactive confirmation, approval gate, or secondary safeguard. In a content-distribution skill, this increases the chance of accidental or unauthorized publication caused by operator error, bad upstream input, or automation misuse, potentially exposing sensitive, incorrect, or premature content to public audiences.

Missing User Warnings

Medium
Confidence
94% confidence
Finding
The workflow defines a cron trigger for daily automatic publishing across external platforms, but the file provides no explicit approval gate, user warning, or restriction before posting. In a content-publishing skill, unattended scheduled execution materially increases the risk of accidental spam, policy-violating posts, reputational damage, or unintended publication of generated content at scale.

Missing User Warnings

Medium
Confidence
96% confidence
Finding
The webhook trigger allows remote initiation of a workflow that includes external publishing actions, yet the configuration shows no visible authentication, authorization, confirmation, or warning controls. In this skill’s context, remote triggering is especially risky because it can cause unauthorized posting to multiple accounts, turning an API exposure or misconfiguration into immediate public-facing impact.

Natural-Language Policy Violations

Low
Confidence
93% confidence
Finding
The script's comments and user-visible status/error messages are written in Chinese throughout, which imposes a specific language on all users. The file does not provide any language selection, fallback, or documented justification that the skill is intended only for a Chinese-speaking or region-specific context.

Natural-Language Policy Violations

Low
Confidence
84% confidence
Finding
This markdown template mandates Chinese-language output throughout the skill content, including headings, structure, and example text. The file does not indicate that language selection is optional or user-configurable, which can conflict with language/locale choice policies when no opt-in is provided.

Natural-Language Policy Violations

Low
Confidence
72% confidence
Finding
The description forces a specific language presentation in the manifest, and other visible strings in the file are also Chinese-only. There is no indication that the skill is limited to Chinese-speaking users or that users can opt into this locale, which may conflict with language-choice policy expectations.

Static analysis

No suspicious patterns detected.