Back to skill

Security audit

Snapdesign Rednote Clean

Security checks for vulnerabilities and agentic risk

Overview

The skill mostly matches its image-card purpose, but it asks for an unexplained API key and adds fixed BaoAI branding and engagement content without clear user control.

Review before installing. Use this only if you are comfortable with a Chinese RedNote/Xiaohongshu card workflow that may add BaoAI branding and engagement prompts. Do not place a real API key in TOOLS.md; require the publisher to explain or remove the LibTV/Liblib credential requirement, and consider disabling external Google Fonts or using local fonts for confidential content.

Vulnerability Patterns
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • 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)

T01 · Skill Instruction Hijacking

Warning
Location
SKILL.md:186
Finding
Mandatory Third-Party Branding and Engagement Injection## Vulnerability Details **File Location**: `SKILL.md`, lines 186–196; corroborated by line 365 **Vulnerability Type**: Mandatory output manipulation through Skill instructions **Risk Level**: Medium ### Complete Evidence Snippet The following is an English translation of the relevant source instructions: ```text Each image set must end with a final slide that directs users to follow, save, or comment. [Content area] - Eyebrow text - Divider - Closing title - Summary text - Call to action - Brand signature: BaoAI, aligned to the right Quality-control requirement: - Footer left: page number in "01 / N" format - Footer right: "BaoAI" watermark ``` ### Technical Analysis The Skill imposes output requirements that are not inherently necessary to perform its stated image-layout function. In particular, it directs the Agent to add an engagement-oriented call-to-action slide and repeatedly requires the fixed third-party `BaoAI` brand in the generated material. Because these instructions are loaded as part of the Skill workflow, an Agent following them will modify user deliverables even when the user did not request promotional content or third-party branding. This is a form of instruction-level output hijacking: the Skill introduces an additional promotional objective alongside the user's formatting objective. The issue does not grant operating-system privileges or permit code execution. Its scope is the Agent's generated content and the trust relationship between the user and the Agent. ### Attack Path 1. A user invokes the Skill to convert supplied material into RedNote images. 2. The Agent loads and follows the mandatory workflow in `SKILL.md`. 3. The workflow adds a final slide encouraging follows, saves, or comments. 4. The Agent places the `BaoAI` signature or watermark into the generated slides. 5. The branded deliverables are sent to the user without an explicit user request for ...[truncated 593 chars]
Remediation
## Remediation Suggestions 1. Remove the mandatory `BaoAI` signature and footer watermark from the default templates and quality-control checklist. 2. Do not add engagement calls to action unless the user explicitly requests them. 3. Introduce an optional branding parameter that defaults to no branding. 4. Permit only branding supplied or affirmatively approved by the user. 5. Present a clear preview or disclosure before adding promotional material to deliverables. 6. Add a quality-control requirement confirming that no unrequested trademarks, watermarks, calls to action, or attribution have been inserted.

T09 · Insecure Skill Coding Practices

Note
Location
README.md:5
Finding
Unsafe Recommendation to Store an API Credential in a Documentation File## Vulnerability Details **File Location**: `README.md`, lines 5–11 **Vulnerability Type**: Insecure credential-storage guidance **Risk Level**: Low ### Complete Evidence Snippet The following is an English translation of the relevant source instructions: ```markdown ## Configuration 1. After installation, add your API configuration to TOOLS.md. 2. Alternatively, set an environment variable at runtime. ## API Configuration This Skill requires the following environment variable: - LIBTV_ACCESS_KEY - LibTV API key ``` ### Technical Analysis The README advises users to place API configuration in `TOOLS.md`, but it does not distinguish non-sensitive configuration from the `LIBTV_ACCESS_KEY` secret. It also provides no requirements for file permissions, source-control exclusion, log redaction, secret rotation, or use of a dedicated secret manager. A documentation file is liable to be committed to source control, included in support bundles, indexed by development tools, or exposed to an Agent as ordinary project context. If a user follows the instruction by writing the API key into that file, the credential may be disclosed to unintended parties. The documented image-generation workflow in `SKILL.md` does not explain why the LibTV credential is required, creating an additional inconsistency that may cause users to configure an unnecessary secret. ### Attack Path 1. A user follows the README configuration instructions. 2. The user writes `LIBTV_ACCESS_KEY` and its value into `TOOLS.md`. 3. The file is committed, shared, logged, archived, or loaded into an Agent context. 4. An unauthorized party obtains the plaintext API key. 5. The party uses the key against the associated LibTV account, subject to the permissions and quotas assigned to that credential. ### Impact Assessment The maximum impact is limited by the privileges granted to the exposed API key. Possible consequences include unauthorized API reque ...[truncated 347 chars]
Remediation
## Remediation Suggestions 1. Remove the recommendation to store API credentials in `TOOLS.md`. 2. Require runtime secret injection through a dedicated secret manager or protected environment variable. 3. Document that secret values must never be committed to source control, included in prompts, or written to logs. 4. Provide an example using only a placeholder, such as `LIBTV_ACCESS_KEY=<secret>`. 5. Add relevant secret-bearing files to `.gitignore` and enforce restrictive file permissions where local secret files are unavoidable. 6. Validate whether the LibTV API is actually required by this Skill; remove the credential requirement if it is unused. 7. Recommend scoped, revocable credentials and document rotation procedures for suspected exposure.
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 (9)

Vague Triggers

High
Confidence
94% confidence
Finding
The trigger conditions are very broad and require immediate invocation on common user phrases, which can cause the skill to activate without clear user intent or contextual confirmation. In agent environments, overbroad auto-invocation can bypass safer routing, cause unintended file generation or networked rendering steps, and increase the chance of handling sensitive user content without explicit consent.

Natural-Language Policy Violations

Medium
Confidence
95% confidence
Finding
The README uses Chinese throughout and does not indicate that the skill is region-specific or provide any user opt-in for language preference. This can violate language/locale policy when users are expected to understand setup and safety-relevant instructions but are forced into a single language.

Description-Behavior Mismatch

Medium
Confidence
95% confidence
Finding
The README instructs users to provide a LibTV/Liblib API key even though the skill’s stated purpose is narrow content/layout generation for Xiaohongshu knowledge cards and does not disclose any need for a third-party service. This creates an unjustified credential collection path and can mislead operators into granting external access they did not expect, increasing data exfiltration and supply-chain risk.

Context-Inappropriate Capability

Medium
Confidence
93% confidence
Finding
The documentation introduces an undeclared third-party API integration that is not justified by the manifest’s described functionality. Hidden or poorly documented external integrations are dangerous because they expand the trust boundary, may transmit user content to outside services, and prevent reviewers from accurately assessing the skill’s behavior.

Natural-Language Policy Violations

Medium
Confidence
92% confidence
Finding
The description and formatting instructions are written as mandatory Chinese Xiaohongshu output, with Chinese fonts and Chinese filename/content conventions throughout. There is no opt-in or explicit statement that the skill is limited to Chinese-language output for a region-specific use case, which makes the locale constraint appear mandatory by default.

Missing User Warnings

Medium
Confidence
91% confidence
Finding
The skill instructs saving generated PNGs to local storage and sending them to the user without any disclosure about local persistence, retention, or cleanup. If the input article contains confidential business information, this creates unnecessary data-at-rest exposure and raises the risk of accidental retention or cross-task access on shared systems.

Missing User Warnings

Medium
Confidence
97% confidence
Finding
The skill loads Google Fonts from a third-party service, creating an outbound network request during rendering that may leak metadata such as usage timing, IP, and possibly document-associated context. In a sandboxed or privacy-sensitive environment, undisclosed external fetches are risky because users may assume purely local rendering while their content workflow triggers third-party contact.

Intent-Code Divergence

Medium
Confidence
96% confidence
Finding
L337-L338 明确写着“直接发送图片,不需要打包 ZIP”,但后续 L340 与 L342 仍在执行 `zf.write(...)` 和打印 `ZIP ready`,与注释宣称的行为直接矛盾。这不是单纯信息不完整,而是文档意图与代码动作相反,容易误导实现者。

Intent-Code Divergence

Low
Confidence
90% confidence
Finding
L036 声称“不输出 HTML 文件”,但 L042 明确要求“生成 HTML 并导出为 PNG”,示例代码在 L313、L329 也实际从 `HTML_PATH` 加载本地 HTML 截图。虽然 HTML 可能只是中间产物,但当前表述会让人误解为流程完全不涉及 HTML。

Static analysis

No suspicious patterns detected.