Back to skill

Security audit

Html Report Slides

Security checks for vulnerabilities and agentic risk

Overview

The skill is mainly a coherent HTML slide-template generator, but it includes a persistent self-update instruction and some under-disclosed external-resource behavior that users should review before installing.

Review this skill before installing in shared or sensitive environments. It is suitable for generating styled HTML report decks, but users should remove or approve external font loading, audit copied examples for leftover external links, and disable or require explicit consent for the instruction that appends future lessons back into SKILL.md.

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
components/base-template.html:7
Finding

Automatic Loading of Mutable Third-Party Stylesheets and Fonts

Content
View full analysis
``` The examples and design-system documentation also use the following external import: ```css @import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&display=swap'); ``` ### Technical Analysis The starter template and both example reports automatically establish connections to Google infrastructure and retrieve remotely hosted CSS and font resources whenever a report is opened in a network-enabled browser. Although the resource is a font stylesheet rather than executable JavaScript, its contents are mutable outside the audited project. Consequently, the rendered result depends on a third-party supply chain that can change after the project has been reviewed. This also conflicts with the project's characterization as a single-file report and reduces the reliability of offline operation. The requests can expose ordinary browser connection metadata to the external provider. Depending on browser policy and hosting configuration, request metadata may include the client IP address, user agent, and referrer information associated with the hosted report. No evidence was found that these resources currently serve malicious content, so this is a supply-chain and privacy weakness rather than confirmed malicious e ...[truncated 1203 chars]
Remediation
View remediation
``` 6. For hosted reports, consider a Content Security Policy that restricts resources to approved origins. A fully local configuration should prefer: ```http Content-Security-Policy: default-src 'self'; font-src 'self' data:; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' ``` 7. Add an automated check that rejects unexpected external URLs in generated reports. ]]>

T09 · Insecure Skill Coding Practices

Note
Location
examples/report.html:684
Finding

Deployment-Specific External Link Embedded in a Reusable Example

Content
View full analysis
WB 专家 Demo ``` The documented workflow in `SKILL.md:58` directs the Agent to select and copy the nearest example before modifying its content. This creates a realistic path for the hardcoded link to be retained unintentionally. ### Technical Analysis A generic strategic-report example contains a deployment-specific URL hosted on an external CloudBase domain. The destination is unrelated to the reusable template's core operation and remains under control separate from the audited package. Because the workflow recommends copying example files, generated reports may accidentally retain this link. The external destination can change after package review, expire, be reassigned, or host content that differs from what the report author intended. The anchor also uses `target="_blank"` without `rel="noopener noreferrer"`. Modern browsers commonly isolate the opener automatically, but relying solely on browser defaults is weaker than explicitly preventing opener access and suppressing referrer information. The Skill does not require the link to be preserved, and no evidence shows that the current destination is malicious. The finding is therefore an unsafe-template practice rather than confirmed phishing or instruction hijacking. ### Attack Path 1. An Agent follows `SKILL.md` and copies `examples/report.html` as the basis for a new report. 2. The Agent replaces visible report content but overlooks the embedded external anchor. 3. The generated report is distributed to users. 4. A recipient clicks the ap ...[truncated 958 chars]
Remediation
View remediation
Demo ``` 3. If no URL is provided, omit the anchor entirely rather than shipping a default external destination. 4. Add `rel="noopener noreferrer"` to every external link opened with `target="_blank"`. 5. Add generation-time validation that enumerates all external URLs and requires user confirmation before final output. 6. Maintain an allowlist when reports are intended for controlled organizational distribution. 7. Add a release check that scans templates and examples for personal domains, deployment identifiers, and non-placeholder links. ]]>
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (29)

Hidden Instructions

High
Category
Prompt Injection
Confidence
70% confidence
Finding

Hidden instructions were detected in comments or invisible text. These could contain malicious directives. Manual review is recommended.

Content

Scanner excerpt · components/base-template.html (reported line 691)May include surrounding context.

html
</head>
<body>

<!-- 进度条 -->
<div class="progress-bar" id="progressBar"></div>

<!-- 导航圆点(JS 自动生成) -->

Hidden Instructions

High
Category
Prompt Injection
Confidence
70% confidence
Finding

Hidden instructions were detected in comments or invisible text. These could contain malicious directives. Manual review is recommended.

Content

Scanner excerpt · components/base-template.html (reported line 691)May include surrounding context.

html
</head>
<body>

<!-- 进度条 -->
<div class="progress-bar" id="progressBar"></div>

<!-- 导航圆点(JS 自动生成) -->

Hidden Instructions

High
Category
Prompt Injection
Confidence
70% confidence
Finding

Hidden instructions were detected in comments or invisible text. These could contain malicious directives. Manual review is recommended.

Content

Scanner excerpt · components/budget-timeline.html (reported line 1)May include surrounding context.

html
<!-- ============================================
     COMPONENT: Budget Timeline (预算进度条)
     用途:展示各项预算的使用进度/占比
     每行:标签 + 进度条 + 数值

Hidden Instructions

High
Category
Prompt Injection
Confidence
70% confidence
Finding

Hidden instructions were detected in comments or invisible text. These could contain malicious directives. Manual review is recommended.

Content

Scanner excerpt · components/budget-timeline.html (reported line 1)May include surrounding context.

html
<!-- ============================================
     COMPONENT: Budget Timeline (预算进度条)
     用途:展示各项预算的使用进度/占比
     每行:标签 + 进度条 + 数值

Hidden Instructions

High
Category
Prompt Injection
Confidence
70% confidence
Finding

Hidden instructions were detected in comments or invisible text. These could contain malicious directives. Manual review is recommended.

Content

Scanner excerpt · components/budget-timeline.html (reported line 8)May include surrounding context.

html
============================================ -->
<div class="budget-timeline">

  <!-- 预算项 1 -->
  <div class="budget-item">
    <div class="budget-label">__LABEL_1__</div>
    <div class="budget-bar-track">

Hidden Instructions

High
Category
Prompt Injection
Confidence
70% confidence
Finding

Hidden instructions were detected in comments or invisible text. These could contain malicious directives. Manual review is recommended.

Content

Scanner excerpt · components/budget-timeline.html (reported line 26)May include surrounding context.

html
<div class="budget-value">__VALUE_2__</div>
  </div>

  <!-- 预算项 3 -->
  <div class="budget-item">
    <div class="budget-label">__LABEL_3__</div>
    <div class="budget-bar-track">

Hidden Instructions

High
Category
Prompt Injection
Confidence
70% confidence
Finding

Hidden instructions were detected in comments or invisible text. These could contain malicious directives. Manual review is recommended.

Content

Scanner excerpt · examples/cost-report.html (reported line 607)May include surrounding context.

html
</head>
<body>

<!-- ==================== SLIDE 1: COVER ==================== -->
<div class="slide">
  <div class="slide-cover">
    <div class="cover-badge">Budget · Value · Roadmap</div>

Hidden Instructions

High
Category
Prompt Injection
Confidence
70% confidence
Finding

Hidden instructions were detected in comments or invisible text. These could contain malicious directives. Manual review is recommended.

Content

Scanner excerpt · examples/cost-report.html (reported line 632)May include surrounding context.

html
<div class="slide-subtitle">前期 ProductA 申请的 100W 模型预算即将耗尽,需要追加</div>
  </div>

  <!-- 成本对比 -->
  <div class="cost-hero" style="margin-bottom: 22px;">
    <div class="cost-card march">
      <div class="cost-card-label">

Hidden Instructions

High
Category
Prompt Injection
Confidence
70% confidence
Finding

Hidden instructions were detected in comments or invisible text. These could contain malicious directives. Manual review is recommended.

Content

Scanner excerpt · examples/cost-report.html (reported line 632)May include surrounding context.

html
<div class="slide-subtitle">前期 ProductA 申请的 100W 模型预算即将耗尽,需要追加</div>
  </div>

  <!-- 成本对比 -->
  <div class="cost-hero" style="margin-bottom: 22px;">
    <div class="cost-card march">
      <div class="cost-card-label">

Hidden Instructions

High
Category
Prompt Injection
Confidence
70% confidence
Finding

Hidden instructions were detected in comments or invisible text. These could contain malicious directives. Manual review is recommended.

Content

Scanner excerpt · examples/report.html (reported line 497)May include surrounding context.

html
</head>
<body>

<!-- SLIDE 1: COVER -->
<div class="slide">
  <div class="slide-cover">
    <div class="cover-title">Platform AI 能力全景图<br>& 故事线规划</div>

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The trigger phrase set includes very generic requests like creating a report page or presentation, which can overlap with ordinary user intent and cause the skill to activate when the user did not explicitly request this specific tool. In an agent environment, overly broad activation increases the chance of unintended tool selection, content injection into the wrong workflow, or confusion about which skill is operating.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The skill metadata and body strongly prescribe Chinese output and a fixed presentation style without requiring user opt-in. If auto-loaded, this can override the user's requested language or format, leading to prompt/behavior steering and reduced user control over the assistant's response.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The trigger phrases are broad and map to very common presentation-related requests, which can cause the skill to activate when the user did not explicitly ask for this specific HTML slide generator. That increases the chance of incorrect tool/skill selection, language/style hijacking, and unintended file-generation workflow being injected into otherwise generic assistance.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The HTML root element hard-codes lang="zh-CN", which establishes a specific language/locale for the rendered skill output. The file does not provide any opt-in, alternative locale handling, or justification that this template is intended only for a China-specific context.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The README is entirely written in Chinese and provides instructions in that language only, with no indication that users may choose another language or that the file is intended solely for a Chinese-language or region-specific audience. Under the policy, forcing a specific language without user opt-in is a natural-language policy violation.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The document explicitly sets the page language to zh-CN, and the visible content throughout the file is Chinese-only. For SQP-3, forcing a specific language or locale without user opt-in can violate organizational language/locale policy when no choice or justification is provided.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The file is entirely written as a prescriptive standard in Chinese and line L003 uses mandatory language such as '必须严格使用', but there is no indication that the skill supports other languages or that Chinese is required for a region-specific purpose. Under the policy, forcing a specific language without user opt-in is a natural-language policy concern.

Content

No source excerpt is available for this finding.

Vague Triggers

Low
Category
Not specified by scanner
Confidence
87% confidence
Finding

The invocation examples are broad and underspecified, which may lead an assistant to map common presentation-related requests to this skill even when the user wants a different format, tool, or output style. This is primarily a safety and routing issue: unintended activation can expose users to incorrect behavior, wasted execution, or accidental substitution of HTML output for another deliverable.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
82% confidence
Finding

This HTML file includes natural-language comments in Chinese describing the component purpose and usage, with no indication that language choice is configurable or that the component is intended only for a Chinese-speaking context. Under the stated policy, forcing a specific language without user opt-in can be a locale-policy violation.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
80% confidence
Finding

The component header comments and usage notes are written in Chinese, which imposes a specific language context without any indication of user opt-in or a justified locale-specific constraint. Under the stated policy, natural-language content that forces a specific language can be a locale-policy concern.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
95% confidence
Finding

The natural-language comments specify the component purpose and usage in Chinese only, which can amount to a language-policy constraint without user opt-in. There is no indication that this component is intentionally region-specific or that alternative language options are supported.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
91% confidence
Finding

The comments and visible labels in this HTML component use Chinese text such as '关键决策', '用途', and '方案 A/B', which imposes a specific language/locale. There is no indication in this file that the language is optional, configurable, or intentionally limited to a Chinese-language context.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
89% confidence
Finding

This HTML component includes fixed Chinese text such as "当前阶段", "用途", and "下一步" in comments and visible UI labels. Because the file provides no indication of user language selection or justification for a Chinese-only locale, it may violate the policy against forcing a specific 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
93% confidence
Finding

This HTML component includes natural-language instructions and labels in Chinese, such as the title and usage notes, without any indication that the locale is optional or region-specific. Under the policy rule for language/locale, hard-coding a specific language without user opt-in is a natural-language policy concern.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
95% confidence
Finding

The comments and usage notes at the top of the file are written in Chinese, which imposes a specific language on maintainers or users of this component. The file does not indicate that the component is intended only for a Chinese-language workflow or provide any opt-in or alternative language.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.