Back to skill

Security audit

ppt-skill2

Security checks for vulnerabilities and agentic risk

Overview

This skill is a mostly coherent Reveal.js presentation generator, but it needs review because it can create active HTML with mutable third-party scripts and has unsafe file and HTML handling in its helper script.

Review this before installing. Use it only in a workspace where presentation files can be safely created, avoid passing untrusted titles, stylesheet names, or output paths, and prefer pinned/local dependencies instead of unpinned npx/npm and CDN resources. Do not open generated presentations from untrusted inputs in a privileged or sensitive browser context.

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

T09 · Insecure Skill Coding Practices

Error
Location
revealjs/scripts/create-presentation.js:29
Finding

HTML Injection Through Unescaped Presentation Metadata

Content
View full analysis
${options.title} ``` ### Technical Analysis The `--title` and `--styles` command-line values are inserted directly into different HTML contexts without escaping or validation. The title is interpolated into an HTML text context, while the stylesheet value is interpolated into a quoted HTML attribute. An attacker can provide markup containing closing tags or quotation marks to escape the intended context and inject additional HTML or JavaScript. For example, a title containing a closing `title` element followed by a `script` element would be written unchanged into the generated presentation. The injected script would execute when the resulting HTML file is opened in a browser. The stylesheet parameter is similarly susceptible to attribute injection because characters such as double quotes and angle brackets are not rejected or encoded. ### Attack Path 1. An attacker supplies presentation metadata containing an HTML payload, directly or through a request processed by an Agent. 2. The Agent follows the documented workflow and invokes `create-presentation.js` ...[truncated 1036 chars]
Remediation
View remediation

T08 · Insecure Dependencies

Warning
Location
revealjs/scripts/create-presentation.js:134
Finding

Mutable and Unpinned Third-Party Dependencies

Content
View full analysis
``` ```javascript ``` The documented workflow also recommends commands and resources such as: ```bash npm install puppeteer npx decktape reveal "presentation.html?export" output.pdf \ --screenshots ``` ```html ``` ### Technical Analysis Several third-party components are referenced without immutable versions: - `chart.js` is requested without a version. - `reveal.js-plugins@latest` explicitly tracks the latest published release. - `cdn.tailwindcss.com` serves remotely controlled executable JavaScript without a version or integrity constraint. - `npx decktape` may download and execute the current package release when no pinned local installation exists. - `npm install puppeteer` does not specify a version. - The project has no dependency loc ...[truncated 1618 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
revealjs/scripts/create-presentation.js:213
Finding

Unrestricted File Creation and Overwrite Through Output Paths

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Rogue AgentSelf-Modification, Session Persistence
Findings (15)

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding

The declared purpose suggests a presentation-generation skill for producing slides or presentation materials when users ask for demos, PPTs, or decks. The supplied code does not generate presentations, slides, or content. Instead, it inspects an existing reveal.js HTML presentation file and validates chart definitions inside canvas elements, checking chart types, JSON/CSV formatting, dataset presence, and display-related options. This is a materially different primary purpose and introduces an undeclared capability: local file-based validation of chart configs in reveal.js presentations. No sensitive or suspicious extra permissions are used, but the behavioral mismatch is clear.

Content

No source excerpt is available for this finding.

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 · revealjs/references/charts.md (reported line 10)May include surrounding context.

The chart plugin is included by default in the scaffold. It adds these to your HTML:

html
<!-- In <head> -->
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>

<!-- Before Reveal.initialize() -->

Context-Inappropriate Capability

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

User-controlled values for title and stylesheet filename are interpolated directly into HTML without escaping, allowing crafted input to break out of the intended context and inject arbitrary tags or script-bearing elements into the generated presentation. Because this tool writes an HTML file that will later be opened in a browser, the payload can execute in the viewer's browser when the presentation is opened.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The trigger keywords are very broad and include common words like '展示', 'presentation', and 'deck', which can cause the skill to activate outside its intended scope. Over-broad activation can route unrelated user requests into HTML/CDN/script-generating behavior, increasing the chance of unintended code output, context confusion, or misuse in environments that should not produce active web content.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
84% confidence
Finding

The metadata and instructions are written in Chinese and imply Chinese-first behavior without stating that output should follow the user's language preference. While not directly enabling code execution, forced language behavior can mis-handle user intent, obscure generated active content, and reduce the user's ability to safely review HTML/JS output.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

Repeating ambiguous trigger conditions in the overview without scoping or exclusions reinforces unsafe routing behavior. In this skill, that matters more because the downstream instructions direct the agent to emit HTML, CSS, external CDN resources, and JavaScript, so accidental activation has a higher security and integrity cost than a purely textual skill.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The trigger keywords are very broad and include common terms such as '演示', '展示', 'presentation', and 'slides', which can appear in many ordinary conversations. This can cause unintended skill activation, routing users into this skill when they did not explicitly request slide-generation behavior, increasing the chance of context hijacking or inappropriate handling of unrelated requests.

Content

No source excerpt is available for this finding.

Session Persistence

Medium
Category
Rogue Agent
Confidence
60% confidence
Finding

Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.

Content

Scanner excerpt · revealjs/SKILL.md (reported line 3)May include surrounding context.

md
---
name: revealjs
description: Create polished, professional reveal.js presentations. Use when the user asks to create slides, a presentation, a deck, or a slideshow. Supports themes, multi-column layouts, callout boxes, code highlighting, animations, speaker notes, and custom styling. Generates HTML + CSS with no build step required.
---

# Reveal.js Presentations

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The skill description says to use this skill when the user asks to create "slides, a presentation, a deck, or a slideshow," which are broad everyday phrases without exclusion conditions or scope boundaries. In a manifest/markdown skill description, this can cause unintended invocation for many generic requests that mention presentations, especially since no negative examples or narrower context are provided.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
91% confidence
Finding

The skill instructs use of npx decktape without pinning an exact package version, which can fetch and execute whatever version is current at runtime. In an agent context, this creates supply-chain risk and reduces reproducibility, especially because npx may download and run code from the registry implicitly.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
91% confidence
Finding

This is a second unpinned npx decktape invocation. Repeating the pattern increases the chance that an agent will execute remote, mutable package code during normal workflow, exposing the environment to dependency hijacking or unexpected behavior changes.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
89% confidence
Finding

The dependency guidance explicitly recommends npx decktape without version pinning, normalizing unsafe package execution practice. In security-sensitive automation, mutable package resolution at runtime is dangerous because it trusts the external package registry on each run.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The manifest describes a skill for generating presentations, but this script emits HTML that depends on remote JS/CSS from jsDelivr, cdnjs, and a reveal.js plugin CDN at runtime. That adds an external-network execution/loading capability not disclosed by the stated scope and is not necessary for a basic local presentation scaffold generator.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
83% confidence
Finding

The description is written entirely in Chinese and presents predefined trigger terms and usage scenarios without indicating language negotiation or user choice. In multilingual environments, this can bias activation and responses toward a specific language, causing user confusion, incorrect routing, or reduced transparency about how the skill behaves.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
82% confidence
Finding

The skill directs creation of presentation files and related artifacts without an explicit user-facing warning or confirmation about filesystem changes. In an agent setting, silent writes can violate user expectations, clutter workspaces, or overwrite existing files if names collide.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.