Back to skill

Security audit

Wx Huitu

Security checks for vulnerabilities and agentic risk

Overview

This skill does what it claims, but its screenshot workflow disables Chrome sandboxing while rendering generated HTML, so it should be reviewed before installation.

Review before installing. Use this only if you are comfortable with local file writes, subprocess launching of Chrome or Edge, Google Fonts network requests, and optional Feishu upload. Avoid rendering sensitive or untrusted article content unless you run the workflow in a low-privilege or isolated environment, and enable cloud sync only when you intentionally want the generated chart data uploaded.

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 (1)

T09 · Insecure Skill Coding Practices

Error
Location
references/workflow.md:264
Finding

Chromium Sandbox Disabled While Rendering User-Derived HTML

Content
View full analysis

Vulnerability Details

File Location: references/workflow.md, lines 264-273
Vulnerability Type: Chromium browser sandbox disabled during HTML rendering
Risk Level: High

Vulnerable Code

javascript
const browser = await puppeteer.launch({
  headless: 'new', executablePath: chromePath,
  args: ['--no-sandbox','--disable-setuid-sandbox','--disable-gpu']
});

Technical Analysis

The screenshot workflow launches Chrome or Edge with both --no-sandbox and --disable-setuid-sandbox. These options disable Chromium's principal process-isolation security boundary.

The workflow renders locally generated HTML derived from user-provided articles or data. The documented HTML-generation process does not mandate context-aware escaping, removal of active HTML, blocking of event handlers, or a restrictive Content Security Policy. If attacker-controlled content is inserted into the generated document as markup rather than text, it may execute JavaScript during screenshot generation.

Disabling the sandbox does not itself grant administrative privileges, but it materially increases the consequences of malicious browser content or a browser exploit. A renderer compromise that would normally remain contained may gain access to the privileges of the account running the Skill.

The documentation states that these flags are technically necessary for headless execution, but headless Chromium normally supports sandboxed operation when the host is configured correctly. This explanation therefore does not eliminate the security risk.

Attack Path

  1. An attacker supplies article text or chart data containing active HTML, such as a script element, an event-handler attribute, or markup that initiates unauthorized network requests.
  2. The Skill incorporates that value into a generated chart HTML file without guaranteed context-aware escaping.
  3. The generated screenshot.js workflow opens the local HTML file in Chromium through Puppeteer.
  4. Chromium ...[truncated 1151 chars]
Remediation
View remediation

Remediation Suggestions

  1. Remove --no-sandbox and --disable-setuid-sandbox, and launch Chromium with its normal sandbox enabled.
  2. Configure the runtime so sandboxed Chromium is supported. If that is impossible, fail safely or perform rendering inside a disposable, low-privilege container or virtual machine with no sensitive mounts or credentials.
  3. Apply context-aware HTML escaping to every user-derived title, label, source, description, and data value before inserting it into HTML or SVG.
  4. Insert user-provided values through safe text APIs such as textContent rather than innerHTML.
  5. Reject or sanitize script elements, event-handler attributes, javascript: URLs, embedded frames, and other active content.
  6. Add a restrictive Content Security Policy that disables scripts and plugins and permits network access only to explicitly required origins.
  7. Use Puppeteer request interception to block unexpected HTTP requests, navigation, downloads, and access to unapproved resources.
  8. Prefer locally bundled, integrity-verified fonts so chart rendering does not require external network access.
  9. Run the screenshot process under a dedicated, unprivileged account with access limited to the chart input directory and output directory.
  10. Keep Chrome or Edge patched and terminate rendering on navigation, certificate, timeout, or unexpected resource-loading errors.
Vulnerability Patterns
  • 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
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
Findings (11)

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The trigger phrases are broad, generic chart-related commands that can easily match ordinary user requests not specifically intended for this skill. Because the skill performs file writes, subprocess execution, and optional external upload, accidental activation can cause unintended local side effects or expose user data to downstream processing without sufficiently explicit invocation intent.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

In the English section, the usage instructions still require the user to speak specific Chinese phrases, but the document does not offer an English-language alternative or explain that the skill is intentionally limited to Chinese-language invocation. That creates a language/locale policy concern because the skill appears to impose one language without user opt-in.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The trigger list includes broad everyday phrases such as '画个图表' and '数据图', which can cause the skill to activate outside the user's intended context. Because this skill has filesystem write capability, subprocess use, network access, and optional cloud upload behavior, accidental invocation increases the chance of unintended file generation or follow-on actions in a higher-privilege workflow.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The shared HTML skeleton hard-codes the document language to Simplified Chinese, which imposes a specific locale on all generated outputs. The file does not offer a user opt-in, alternative locale handling, or a justification that this skill is intended only for a China-specific context.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

This markdown file defines activation-style cues for '自动建议' using very generic phrases such as '逐年/逐月增长', '分为三部分/占比', and '多维度对比'. Without explicit scope, exclusions, or negative examples, these broad phrases could cause unintended invocation whenever similar wording appears in normal user content.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The trigger phrases are broad, generic chart-related terms likely to appear in normal conversation, which increases the chance of accidental activation. In this skill, unintended invocation matters because activation can lead to local file generation, browser automation, and optional data upload workflow, so overbroad routing expands exposure beyond user intent.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The document states that --no-sandbox is not a permission relaxation, but the code explicitly disables Chromium sandbox protections with --no-sandbox and --disable-setuid-sandbox. Rendering generated HTML in an unsandboxed browser materially increases the blast radius of any browser exploit or unsafe local content handling, especially because the workflow opens local HTML files and waits for network resources to load.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The workflow embeds shell command execution and host-environment probing that go beyond pure chart rendering: it queries the Windows registry with execSync and launches explorer.exe. Even if intended for local usability, these actions expand the skill’s capability surface, couple it to sensitive host state, and create opportunities for misuse or unsafe propagation if any paths, filenames, or future inputs become user-influenced.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
87% confidence
Finding

The HTML template hard-codes lang="zh-CN", which imposes a specific language/locale choice in the generated output. The file does not indicate that users can opt into another locale or that the restriction is required for a region-specific compliance purpose.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
93% confidence
Finding

Line L207 instructs authors to use the Chinese label “数据来源:” rather than “Source:”, which imposes a specific language choice in natural-language guidance. Because the file does not present this as optional or limited to a clearly justified locale-specific context, it conflicts with the policy against forcing a language without user opt-in.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
89% confidence
Finding

The template sets <html lang="zh-CN">, which enforces a specific language/locale in generated output. The document does not indicate user opt-in or explain that the skill is intentionally limited to a China-specific locale context.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.