Back to skill

Security audit

Tech Roadmap Generator (10 Templates)

Security checks for vulnerabilities and agentic risk

Overview

The skill mostly generates academic roadmap SVGs as described, but two default templates secretly add unrelated promotional/social-media text into generated output.

Review generated SVGs before using them in academic or public materials, especially templates 24 and 27, because they can include undisclosed promotional text. Treat the package as SVG-only unless you add your own PNG conversion, and prefer custom JSON content if you want tighter control over labels.

Vulnerability Patterns
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
  • 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
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
Findings (1)

T04 · Embedded Malicious Code

Warning
Location
scripts/generate_roadmap.py:241
Finding

Undisclosed Promotional Content Injection in Generated Roadmaps

Content
View full analysis

Vulnerability Details

File Location: scripts/generate_roadmap.py:241-261
Vulnerability Type: Hard-coded content injection in generated artifacts
Risk Level: Medium

Vulnerable Code

python
elif template_id == "template-27":
    data.theme = "classic"
    data.stages = [
        Stage("分析问题", [], header_text=f"{short_name}特征、影响及成因分析 @{short_name}", left_label="分析问题"),
        Stage("理论基础", [], header_text=f"生发{short_name}理论内涵", left_label="理论基础",
              sub_stages=[{"name":"@小紅书;小白龙大智慧","items":["","",""]}]),
        Stage("实证检验",
              items=["假设内容/数据基础1", "假设内容/数据基础2", "假设内容/数据基础3", "假设内容/数据基础4"],
              header_text="实证内容1", left_label="实证检验"),
        Stage("引导政策",
              header_text=f"政策建议@{short_name};小白龙大智慧",
              items=[f"完善{short_name}制度", f"改革{short_name}政策", f"推动{short_name}发展"],
              left_label="引导政策"),
    ]
    data.conclusion = ""

elif template_id == "template-24":
    data.theme = "navy"
    data.stages = [
        Stage("研究背景", header_text=f"研究背景:{short_name}",
              items=["政策背景", "发展趋势", "问题重要性"]),
        Stage("提出问题", header_text=f"提出问题:{short_name} @{short_name};小白龙大智慧"),
        Stage("分析问题", header_text=f"研究内容1:{short_name} @{short_name};小白龙大智慧",
              items=["", "", "", "", "", "具体问题1", "具体问题1"]),
        Stage("解决问题", header_text=f"{short_name}机理研究 @{short_name}; 小白龙大智慧"),
        Stage("政策建议", header_text=f"机理分析和政策建议 @{short_name};小白龙大智慧",
              items=["政策建议1", "政策建议2", "政策建议3"]),
    ]
    data.conclusion = ""

Technical Analysis

The automatic content generator contains hard-coded references to a social-media account or brand, including 小紅书 and 小白龙大智慧. These references are unrelated to the declared roadmap-generation functionality and are not disclosed in SKILL.md.

When template 24 or template 27 is used without a custom JSON document, the strings are in ...[truncated 1906 chars]

Remediation
View remediation

Remediation Suggestions

  1. Remove every hard-coded occurrence of 小白龙大智慧, 小紅书, and associated promotional @... text from the template 24 and template 27 default-content branches.
  2. Replace the affected headers with neutral labels derived only from the user's title or documented template defaults.
  3. Regenerate templates/test_template24.svg and templates/test_template27.svg after correcting the source.
  4. Add automated tests that generate every template and reject undeclared branding, social-media handles, URLs, or attribution strings.
  5. Maintain an explicit allowlist of neutral default labels for all templates.
  6. Require any intentional branding or attribution to be clearly documented and explicitly enabled by the user rather than inserted by default.
  7. Include fixture-content review in release checks so generated examples cannot conceal behavior that is absent from the skill documentation.
Vulnerability Patterns
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • 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 (15)

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

该代码的核心目的与描述总体相关,确实是在生成学术技术路线图,并且内置10种模板,支持基于研究主题自动生成内容,因此主方向基本一致。但存在几个实质性不符点:第一,代码没有实现PNG渲染或导出,只保存SVG;第二,所谓“上传文本自动填充内容”并未出现,唯一外部内容输入是JSON文件,且要求已经是结构化数据,不是普通文本解析;第三,自动内容生成只是依据标题拼接固定模板字段和占位文本,不属于较强意义上的文本内容自动填充。因此应判定为描述与实际行为存在明显但非恶意的能力夸大/不准确。

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
70% confidence
Finding

Without declared permissions the skill's intent is opaque and cannot be validated.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The activation section says the skill triggers when users mention keywords such as “路线图”, “生成路线图”, and “做路线图”. Some of these are broad phrases that could appear in ordinary conversation without clearly indicating the user wants this specific skill, and the file provides no exclusion conditions or negative examples to narrow scope.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The manifest states the skill can automatically generate high-quality SVG/PNG roadmaps, but the implementation in this file only renders SVG markup and writes it to disk as an SVG file. There is no PNG rendering, conversion, or export path anywhere in the code shown, so the described capability is broader than the actual behavior.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
72% confidence
Finding

The top-level documentation says the engine supports '10 academic technical roadmap templates', implying a coherent 10-template academic roadmap set. The code actually maps 10 IDs, but one is a survey workflow template and the internal comments/numbering are inconsistent (for example '模板10' and '模板8/9'), making the documentation's claimed intent imprecise relative to implementation.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
92% confidence
Finding

This code embeds user-facing text primarily in Chinese, including the module description and later CLI help and status messages, which effectively forces a specific language for users without opt-in. Under the language/locale policy rule, this is a natural-language policy concern because no alternative locale selection or justification is provided.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
79% confidence
Finding

This SVG contains user-visible labels primarily in Chinese, such as '综述', '教学质量评价模型构建', and '结论', with no indication that the locale is optional or that the asset is intended only for a Chinese-language context. Under the policy for natural-language violations, forcing a specific language without opt-in can be a locale policy issue.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
91% confidence
Finding

This file contains multiple visible text labels entirely in Chinese, such as "提出问题" and "智慧课堂建设研究结论", with no surrounding indication that the language is optional or tied to a justified region-specific use case. Under the policy rule for language or locale constraints, hard-coding a single language without user opt-in can be a natural-language policy violation.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
90% confidence
Finding

This SVG contains user-facing natural-language labels and comments entirely in Chinese, such as section titles and method names, with no indication that language selection is optional. The policy requires flagging language or locale constraints when the skill forces 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
90% confidence
Finding

This SVG template contains visible text labels entirely in Chinese across the document, indicating a fixed language/locale choice embedded in the asset. Under the policy, forcing a specific language without user opt-in or documented justification 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
83% confidence
Finding

This SVG template contains all visible labels in Chinese, such as "提出问题" and "结论与展望", which indicates a fixed language/locale choice in user-facing content. The file does not provide any opt-in, alternative locale, or justification that it is intended only for a Chinese-language context.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
88% confidence
Finding

This SVG contains all user-visible labels and comments in Chinese, such as section headings and node text, with no indication that the language is selectable or that the asset is intentionally limited to a Chinese-only regional context. Under the natural-language policy rule, fixed locale-specific content can be a policy concern when no user choice or justification is provided.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
88% confidence
Finding

This SVG contains user-visible labels and descriptions entirely in Chinese, such as the section headings and content text. Because the file provides no indication that the skill is region-specific or that users can opt into the locale, it may violate the language/locale policy for natural-language content.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
88% confidence
Finding

This SVG template contains user-facing text entirely in Chinese across multiple labels and annotations, but the file provides no indication that the skill is region-specific or that users can opt into this locale. Under the policy rule, forcing a specific language without user choice can be a natural-language policy violation.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
97% confidence
Finding

This file contains user-facing labels entirely in Chinese, such as '初期准备', '问卷调查', and '展望未来', with no indication that the language is optional or region-specific. Under the policy, forcing a specific language without user opt-in is a natural-language locale violation.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.