Back to skill

Security audit

activity-planner

Security checks for vulnerabilities and agentic risk

Overview

This is a disclosed event-planning skill that generates a local HTML report, with the main caution being safe handling of user text in that HTML output.

Install only if you want a Chinese-language event-planning report generator. Treat generated HTML as a document that may contain business details, review where it is saved, and avoid opening or sharing reports built from untrusted input unless user-provided values are escaped or sanitized.

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

Warning
Location
assets/plan_template.html:115
Finding

Unescaped User-Controlled Values in Generated HTML Reports

Content
View full analysis

{{ACTIVITY_NAME}}

{{ACTIVITY_THEME}}
{{ACTIVITY_TYPE}} | {{ACTIVITY_DATE}} | {{ACTIVITY_LOCATION}}
``` Additional affected interpolation contexts include: ```html {{ACTIVITY_NAME}} - 活动策划方案 ``` ```html
{{ACTIVITY_NAME}}
{{ACTIVITY_THEME}}
{{ACTIVITY_DATE}}
{{ACTIVITY_LOCATION}}

{{ACTIVITY_GOALS}}

``` ### Technical Analysis The Skill instructs the Agent to collect event names, themes, dates, locations, goals, and other values from the user, and then use `assets/plan_template.html` to produce a shareable HTML report. These user-derived values are inserted directly into HTML text and title contexts. Neither the template nor the workflow in `SKILL.md` requires context-sensitive HTML escaping or sanitization. If a replacement value is copied literally, an attacker can terminate the intended HTML context and inject arbitrary markup. For example, a malicious activity name could contain: ```html

``` When inserted without escaping, this changes the structure of the generated document and creates an executable `script` element. Similar payloads could inject event-handler attributes, external resources, deceptive forms, redirects, or other active content. The template also contains placeholders intended to hold larger HTML fragments, such as `{{STRATEGY_CONTENT}}` and `{{CREATIVE_CONTENT}}`. These require an ...[truncated 1691 chars]

Remediation
View remediation
` as `>`. - Encode quotation marks when values are used in attributes. - Use a template engine with automatic escaping enabled rather than raw string replacement. 2. **Separate plain-text values from trusted rich-content fragments.** - Treat fields such as activity name, theme, date, location, goals, budget values, and participant counts exclusively as text. - Do not permit these fields to produce HTML elements. 3. **Sanitize intentionally generated HTML fragments.** Apply a strict allowlist to placeholders such as `{{STRATEGY_CONTENT}}`, `{{CREATIVE_CONTENT}}`, and `{{PROMOTION_CONTENT}}`. Permit only necessary formatting elements and safe attributes. Remove: - `script`, `iframe`, `object`, `embed`, and similar active elements. - Inline event handlers such as `onclick` and `onerror`. - `javascript:`, unsafe `data:`, and other active URL schemes. - Form controls, navigation elements, and external resources unless explicitly required. 4. **Add an explicit security requirement to `SKILL.md`.** Require all user-provided and generated text to be escaped before insertion and prohibit direct interpolation of untrusted HTML. 5. **Add a restrictive Content Security Policy where practical.** A suitable baseline for this self-contained template is: ```html ``` This is defense in depth and does not replace escaping or sanitization. 6. **Test with adversarial input.** Include regression cases containing closing tags, script elements, event handlers, encoded markup, malformed tags, and dangerous URL schemes. Verify that every payload appears as inert text in the gene ...[truncated 17 chars]
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 (11)

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 · assets/plan_template.html (reported line 114)May include surrounding context.

html
</head>
<body>
    <div class="container">
        <!-- Cover -->
        <div class="cover">
            <h1>{{ACTIVITY_NAME}}</h1>
            <div class="subtitle">{{ACTIVITY_THEME}}</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 · assets/plan_template.html (reported line 172)May include surrounding context.

html
<p>{{ACTIVITY_GOALS}}</p>
        </div>

        <!-- Strategy -->
        <div class="section" id="strategy">
            <h2>策略定位</h2>
            {{STRATEGY_CONTENT}}

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 · assets/plan_template.html (reported line 221)May include surrounding context.

html
</table>
        </div>

        <!-- Promotion -->
        <div class="section" id="promotion">
            <h2>宣传推广计划</h2>
            {{PROMOTION_CONTENT}}

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The README’s invocation example uses a broad natural-language phrase ('帮我策划一个新品发布会') without documenting stricter trigger boundaries, increasing the chance the skill is activated by ordinary conversation rather than deliberate user intent. In an agent ecosystem, ambiguous activation can cause unintended workflow execution, unnecessary data collection, or confusing context capture, even though this particular skill appears oriented toward event planning rather than high-risk actions.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The trigger list includes broad, common phrases such as 'marketing campaign' and '活动策划', which can cause the skill to activate in situations where the user did not clearly intend to invoke this specific skill. Unintended invocation can route ordinary conversation into a workflow that solicits structured business details and prepares files, creating confusion and unnecessary data collection.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The skill instructs automatic output of an HTML file into the user's current working directory without an explicit confirmation step. Writing files without clear user consent can create unwanted artifacts, overwrite existing files with similar names, or expose generated content in shared/project directories, and HTML output may later render unsafe user-supplied content if escaping is not enforced.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The HTML root sets lang="zh-CN", and the entire visible template content is written in Chinese, which imposes a specific language/locale by default. The file does not indicate that this locale is optional, user-selected, or limited to a justified region-specific use case.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

This markdown skill content forces a specific language/locale for all users, and there is no indication that Chinese is optional or that the skill is intentionally limited to a Chinese-speaking audience. Under the policy, language constraints should either be opt-in or clearly justified.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
83% confidence
Finding

The natural-language instructions and usage examples are entirely in Chinese, and the README does not state that the skill is region-specific or offer users a language/locale option. Per the policy, forcing a specific language without user opt-in can be a locale-policy violation unless the restriction is clearly documented and justified.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
96% confidence
Finding

This file presents all user-facing templates and instructions exclusively in Chinese, which can amount to a language/locale policy issue if users are not given an opt-in or alternative language. There is no indication that the skill is limited to a Chinese-speaking audience or justified as a region-specific template set.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
88% confidence
Finding

This markdown file contains user-facing scripts exclusively in Chinese, and there is no indication that users can select another language or that the skill is intentionally limited to a Chinese-speaking context. Under the policy rule for language or locale constraints, forcing a specific language without opt-in is a natural-language policy concern.

Content

No source excerpt is available for this finding.