Back to skill

Security audit

ppt-generator-smb

Security checks for vulnerabilities and agentic risk

Overview

The skill is a real presentation generator, but it needs Review because it can automatically install an unpinned Python package and can generate HTML that executes untrusted slide content.

Review before installing. This skill should be run only in a constrained workspace or virtual environment, with dependencies installed explicitly from trusted pinned sources. Avoid feeding it untrusted JSON or web-sourced slide data unless the HTML generator is fixed to escape content, and do not expose the preview server beyond the local machine.

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)

T09 · Insecure Skill Coding Practices

Error
Location
scripts/gen_html.py:73
Finding

Unescaped Presentation Data Allows Stored HTML and JavaScript Injection

Content
View full analysis
🦞

{title}

{subtitle}

''' return content def make_content_slide(title, items): if isinstance(items, list): items_html = ''.join(f'
  • {item}
  • ' for item in items) return f'\n

    {title}

    \n
      {items_html}
    \n' return f'\n

    {title}

    \n

    {items}

    \n' def make_cards_slide(title, cards): cards_html = '' for card in cards: cards_html += f'

    {card["icon"]} {card["title"]}

    {card["content"]}

    \n' return f'\n

    {title}

    \n
    {cards_html}
    \n' def make_chart_slide(title, data): bars = '' for item in data: h = item.get("height", 100) bars += f'''
    {item["value"]}
    {item["label"]}
    \n''' return f'\n

    {title}

    \n
    {bars}
    \n' def make_swot_slide(title, strengths, weaknesses): s_items = ''.join(f'
  • {s}
  • ' for s in strengths) w_items = ''.join(f'
  • {w}
  • ' for w in weaknesses) return f'''

    {title}

    💪 Strengths 优势

      {s_items}

    ⚠️ Weaknesses 劣势

      {w_items}
    \n''' ``` The resulting fragments are subsequently inserted into the final document without escaping: ```python total = len(data.get("slides", [])) + 1 html = HTML_TEMPLATE.format(title=args.title, slides=slides_html, to ...[truncated 2661 chars]
    Remediation
    View remediation
    ` elements, event handlers, quoted attribute breakers, CSS-breaking values, and encoded variants. 7. Consider deploying generated presentations with a restrictive Content Security Policy that disallows inline and remote scripts. This should be defense in depth and must not replace output encoding. ]]>

    T08 · Insecure Dependencies

    Warning
    Location
    scripts/gen_pptx.py:8
    Finding

    Automatic Installation of an Unpinned Runtime Dependency

    Content
    View full analysis
    Remediation
    View remediation
    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
    • Behavioral ASTexec() Call, eval() Call, Dynamic Import
    • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
    Findings (13)

    Tp4

    High
    Category
    MCP Tool Poisoning
    Confidence
    96% confidence
    Finding

    Undisclosed behavior such as automatically installing Python dependencies is security-relevant because it causes unexpected code retrieval and execution beyond the stated presentation-generation purpose. Hidden installation steps expand supply-chain and execution risk, especially when users are not warned that external packages may be fetched and run.

    Content

    No source excerpt is available for this finding.

    Tp4

    High
    Category
    MCP Tool Poisoning
    Confidence
    92% confidence
    Finding

    Undisclosed behavior such as automatically installing Python dependencies is security-relevant because it causes unexpected code retrieval and execution beyond the stated presentation-generation purpose. Hidden installation steps expand supply-chain and execution risk, especially when users are not warned that external packages may be fetched and run.

    Content

    No source excerpt is available for this finding.

    Undeclared Tool Scope

    Medium
    Category
    MCP Least Privilege
    Confidence
    92% confidence
    Finding

    The skill describes shell execution, file reads/writes, and running local services, but it does not declare any explicit tool scope or permissions boundary. This creates unnecessary capability ambiguity and can allow the skill to execute broader actions than users or the platform expect.

    Content

    No source excerpt is available for this finding.

    Vague Triggers

    Medium
    Category
    Not specified by scanner
    Confidence
    94% confidence
    Finding

    The manifest description says the skill triggers when users need to make PPTs, slides, market analysis reports, or product introductions. Terms like '市场分析报告' and '产品介绍' are broad, common requests that may arise in many contexts, and the file does not define clear activation boundaries or exclusions.

    Content

    No source excerpt is available for this finding.

    Vague Triggers

    Medium
    Category
    Not specified by scanner
    Confidence
    96% confidence
    Finding

    The trigger section lists keywords such as '市场分析', '产品介绍', '竞品分析', and 'SWOT' without specifying that they must be requests for slide creation. Those terms commonly occur in ordinary analytical conversations, so the activation rule could invoke the skill unintentionally.

    Content

    No source excerpt is available for this finding.

    Context-Inappropriate Capability

    Medium
    Category
    Not specified by scanner
    Confidence
    87% confidence
    Finding

    The manifest describes a presentation generator that outputs HTML and PPTX slides with specific design and visualization features. In SKILL.md, Step 2 explicitly adds external web searching for market data and competitor information, which is a separate research capability not stated in the manifest description.

    Content

    No source excerpt is available for this finding.

    Missing User Warnings

    Medium
    Category
    Not specified by scanner
    Confidence
    93% confidence
    Finding

    Failing to warn that the skill will start a local HTTP server conceals a meaningful runtime side effect that changes the host's exposure profile. Users may not expect a content-generation skill to open a listening service, and hidden service startup can increase risk if the server is reachable, misconfigured, or serves more content than intended.

    Content

    No source excerpt is available for this finding.

    Natural-Language Policy Violations

    Medium
    Category
    Not specified by scanner
    Confidence
    91% confidence
    Finding

    The script's natural-language strings and generated HTML explicitly use Chinese language/locale conventions, including the HTML lang attribute set to zh-CN and Chinese-only CLI descriptions. This appears to impose a specific language/locale on users without opt-in, which matches the language policy violation category.

    Content

    No source excerpt is available for this finding.

    Context-Inappropriate Capability

    Medium
    Category
    Not specified by scanner
    Confidence
    97% confidence
    Finding

    Automatically installing a package from pip at runtime is a genuine security issue here because it causes unreviewed external code to be fetched and installed during document generation. If the package source, index configuration, or dependency resolution is influenced, this can lead to supply-chain compromise or unexpected code execution under the agent's privileges.

    Content

    No source excerpt is available for this finding.

    subprocess module call

    Medium
    Category
    Dangerous Code Execution
    Confidence
    94% confidence
    Finding

    The script executes pip in a subprocess at runtime when python-pptx is missing. This introduces external code retrieval and execution during normal use, which is risky in an agent skill because dependency installation should not occur implicitly inside application logic. In a skill context, this expands the trust boundary from local presentation generation to network/package-supply-chain behavior.

    Content

    Scanner excerpt · scripts/gen_pptx.py (reported line 14)May include surrounding context.

    python
    return True
        except ImportError:
            import subprocess
            subprocess.check_call(['pip', 'install', 'python-pptx', '-q'])
            return True
    
    def create_pptx(title, subtitle, slides_data, output):
    

    Missing User Warnings

    Low
    Category
    Not specified by scanner
    Confidence
    86% confidence
    Finding

    The markdown instructs the skill to use web_search to gather market data, industry reports, and competitor information, but it does not warn users that external/network retrieval will be performed. For markdown files, externally affecting behaviors that may have privacy or data-handling implications should be disclosed clearly.

    Content

    No source excerpt is available for this finding.

    Context-Inappropriate Capability

    Low
    Category
    Not specified by scanner
    Confidence
    86% confidence
    Finding

    Starting a local HTTP server introduces an unnecessary service exposure surface for a content-generation skill, especially when not clearly justified or disclosed. Even if bound locally, it increases attack surface, can expose generated content or local files if misconfigured, and normalizes shell-based service startup for a simple preview task.

    Content

    No source excerpt is available for this finding.

    Natural-Language Policy Violations

    Low
    Category
    Not specified by scanner
    Confidence
    95% confidence
    Finding

    This file contains user-facing natural-language strings such as the module docstring, argument descriptions, and status output exclusively in Chinese. 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.