Back to skill

Security audit

content-adapter

Security checks for vulnerabilities and agentic risk

Overview

The skill mostly matches its content-adaptation purpose, but it includes under-disclosed automatic user-linked analytics and an installer that silently replaces the reviewed skill text.

Review this skill before installing if you do not want usage analytics tied to a user identifier or publishing-platform metadata. If installed manually, be aware the installer may overwrite an existing content-adapter skill file and install a shortened version with different publisher metadata.

Vulnerability Patterns
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (2)

other

Warning
Location
skill.md:523
Finding
Automatic User-Linked Telemetry Without Documented Consent or Destination## Vulnerability Details **File Location**: `skill.md`, lines 523-571 **Vulnerability Type**: Undisclosed telemetry and collection of user-linked usage data **Risk Level**: Medium ### Vulnerable Code ```javascript // Skill startup trackEvent("skill_start", { skill_id: "content-adapter", user_id: userId, source: "workbuddy", input_type: "text" }); // Skill completion trackEvent("skill_complete", { skill_id: "content-adapter", user_id: userId, output_format: "html", output_size: 45000, total_duration_ms: 3200, word_count: 1200, platform: "xiaohongshu" }); ``` The surrounding instructions state that events are automatically reported at Skill startup, after generation steps, upon completion, on errors, and when users share generated content. They also state that analytics failures are silent and do not interrupt normal execution. ### Technical Analysis The Skill's legitimate purpose is local transformation of user-provided content into platform-specific writing styles. That task does not require a persistent user identifier or remote reporting of user behavior. The telemetry specification collects or proposes collecting: - A user identifier - Invocation source and input type - Step names and execution timings - Output format, size, and word count - Target publishing platform - Sharing platform and content type - Error information No analytics endpoint, data controller, consent mechanism, retention period, identifier-pseudonymization policy, or opt-out procedure is provided. The referenced `analytics-sdk` implementation is also absent from the audited package, preventing verification of its transmission destination and safeguards. The package does not contain executable telemetry code, so successful data exfiltration cannot be confirmed from the audited files alone. The confirmed issue is that the Skill specification directs automatic, user-linked reporting beyond ...[truncated 1357 chars]
Remediation
## Remediation Suggestions 1. Remove telemetry because it is not necessary for the Skill's content-transformation function. 2. If analytics is retained, require explicit opt-in consent before collecting or transmitting any event. 3. Do not collect a direct `user_id`; use a short-lived, randomized, non-linkable identifier where metrics genuinely require one. 4. Publish the exact destination endpoint, data controller, event schema, retention period, legal basis, and deletion procedure. 5. Provide a clearly documented opt-out that disables all analytics calls. 6. Display reporting failures and configuration status rather than intentionally suppressing all telemetry errors. 7. Include the referenced SDK source or a pinned, verifiable dependency so its network behavior can be audited. 8. Restrict events to aggregate operational metrics and exclude publishing targets, sharing activity, input characteristics, and error content unless strictly required.

T09 · Insecure Skill Coding Practices

Note
Location
skill.md:1
Finding
Conflicting Package Identity and Silent Replacement of the Audited Skill Specification## Vulnerability Details **File Locations**: `skill.md`, lines 1-13; `install.sh`, lines 24-64 **Vulnerability Type**: Inconsistent provenance metadata and installation of noncanonical content **Risk Level**: Low ### Vulnerable Code Packaged Skill metadata: ```yaml --- name: content-adapter display_name: 多平台内容适配器 description: 一次编写,多平台发布。自动将原始内容适配成小红书、公众号、知乎、微博、抖音等平台风格,智能调整字数、表情、排版和语气,让内容在各平台都能获得最佳效果。 version: 1.0.0 author: 咕嘟科技 homepage: https://hermesai.ltd tags: - content-creation - multi-platform ``` Metadata generated by the installer: ```bash cat > "$SKILL_DIR/SKILL.md" << 'SKILL_EOF' --- name: content-adapter display_name: 多平台内容适配器 description: 一次编写,多平台发布。自动将原始内容适配成小红书、公众号、知乎、微博、抖音等平台风格。 version: 1.0.0 author: 叶建国 homepage: https://github.com/openclaw/content-adapter tags: - 内容创作 - 多平台分发 - 小红书 - 公众号 license: MIT compatibility: - openclaw - skillhub --- ``` ### Technical Analysis The packaged `skill.md` identifies one organizational author and homepage, while the installer generates a separate `SKILL.md` identifying a different individual and repository. The installer does not copy the reviewed document; it writes a shortened replacement through a shell heredoc. Consequently, the content inspected before installation is not the same content installed into the OpenClaw workspace. The installed document omits substantial portions of the packaged specification, including the telemetry section and promotional material. This discrepancy weakens provenance verification and makes security review results dependent on which version the host loads. No command injection or arbitrary external payload retrieval was found in the installer. Variables used for the installation path are quoted, and the script only creates the expected Skill directory and writes a local file. The finding concerns integrity, provenance, and review consistency rather than demonstrated ...[truncated 1118 chars]
Remediation
## Remediation Suggestions 1. Maintain one canonical `SKILL.md` and have the installer copy it verbatim instead of generating a second version. 2. Make the author, homepage, version, license, and tag metadata consistent across all package files. 3. Identify the publisher through a verifiable repository, signed release, or registry identity. 4. Add integrity verification, such as a published checksum or signed manifest, for the installed Skill document. 5. Make installation fail if the source document is missing or its integrity check does not match. 6. If installation-time transformation is required, document every transformation and ensure security-sensitive sections cannot be silently added or removed. 7. Add automated tests that compare packaged and installed metadata and reject unexplained differences.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • 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
Findings (7)

Missing User Warnings

Medium
Confidence
93% confidence
Finding
The installer unconditionally redirects content into $SKILL_DIR/SKILL.md, which will overwrite any existing file at that path without prompting, backup, or integrity check. In this skill context the content is static and not obviously malicious, but it can still destroy local modifications or replace trusted content unexpectedly, making it a real safety issue rather than a code-execution vulnerability.

Natural-Language Policy Violations

Medium
Confidence
85% confidence
Finding
The manifest display name, description, trigger examples, platform rules, clarification prompts, and output examples are all written as Chinese-only guidance for interaction and generated content styles. There is no indication that users may choose another language or that the Chinese-only scope is a documented, justified regional limitation, which fits the language/locale policy concern.

Description-Behavior Mismatch

Medium
Confidence
93% confidence
Finding
The skill is presented as a content adaptation tool, but the embedded documentation adds analytics and tracking behavior that is outside the core stated purpose. This creates a scope mismatch: operators may integrate telemetry collection without realizing the skill handles user identifiers and content-derived metadata, increasing privacy and compliance risk.

Context-Inappropriate Capability

Medium
Confidence
90% confidence
Finding
The telemetry captures activity data such as user identifiers, platform, output size, timing, and content metadata even though the skill's function is only to rewrite text for different platforms. Collecting behavioral data not necessary for content adaptation violates data minimization principles and can expose sensitive usage patterns if logs are mishandled or centralized.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The skill documentation explicitly shows analytics events transmitting user_id and content metadata, but the public-facing description does not warn users that their activity may be tracked. This lack of transparency can lead to covert data collection, privacy violations, and regulatory exposure, especially when generated content may contain sensitive business or personal information.

Natural-Language Policy Violations

Low
Confidence
88% confidence
Finding
The manifest names the skill entirely in Chinese ("多平台内容适配器"), which suggests a language-specific presentation without any indication of user choice, opt-in, or region-specific justification in this file. Under the policy, language constraints should either be optional for the user or clearly documented as justified.

Natural-Language Policy Violations

Low
Confidence
91% confidence
Finding
The installer and embedded SKILL.md use Chinese-language descriptions and trigger guidance, and there is no indication that users can choose another language. This can violate language/locale policy when a skill forces a specific language without documenting choice or regional justification.

Static analysis

No suspicious patterns detected.