Back to skill

Security audit

Report Ppt Generator Pro

Security checks for vulnerabilities and agentic risk

Overview

This presentation-generation skill is mostly coherent, but it needs review because it can fetch arbitrary image URLs and embed local image files without strong boundaries.

Review before installing. Use it only with trusted manuscripts and image sources, avoid untrusted remote image URLs, and prefer local images in a dedicated project folder. Ask the publisher to add URL restrictions, local path containment, pinned dependencies, and clearer language/preview scoping.

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

Warning
Location
assets/scripts/html-to-pptx.js:113
Finding

Unrestricted Local Image Paths Can Disclose Local Files

Content
View full analysis
]*src="([^"]+)"[^>]*>/g; let match; while ((match = regex.exec(slideHtml)) !== null) { if (!match[1].includes('cover_bg') && !match[1].includes('end_bg')) { images.push(match[1]); } } return images; } ``` ```javascript function addImages(slide, images, imgBasePath) { const imgX = 5.0, imgY = 1.1, imgW = 4.7, imgH = 4.0; const validImages = images.filter(p => fs.existsSync(p)); if (validImages.length > 0) { if (validImages.length === 1) { slide.addImage({ path: validImages[0], x: imgX, y: imgY, w: imgW, h: imgH, sizing: { type: 'contain', w: imgW, h: imgH } }); ``` ### Technical Analysis The converter extracts image paths directly from input HTML and treats each extracted value as a local filesystem path. The only validation is `fs.existsSync()`, which confirms that the process can access the path but does not establish that access is authorized. The supplied `imgBasePath` is not used to constrain these image paths. Absolute paths, traversal paths, and paths resolving through symbolic links can therefore refer to files outside the intended working directory. If such a file is a supported image, `pptxgenjs` embeds it in the generated presentation. This violates the documented least-privilege expectation that only user-specified files and Skill resources are read. ### Attack Path 1. An attacker supplies or influences the HTML processed by `html-to-pptx.js`. 2. The HTML contains an image reference to a readable local file, for example: ```html ``` 3. `extractImages()` copies the path without canonicalizat ...[truncated 851 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
references/image-handling.md:207
Finding

Unrestricted Network Image Fetching Enables Server-Side Request Forgery

Content
View full analysis
Remediation
View remediation

T08 · Insecure Dependencies

Note
Location
assets/scripts/html-to-pptx.js:11
Finding

Unpinned Runtime Dependency Installation Creates Supply-Chain Exposure

Content
View full analysis
[imageBasePath] * * 参数: * htmlPath - HTML 文件路径 * outputPath - 输出 PPTX 文件路径 * imageBasePath - 图片基础路径(可选,默认从 HTML 中的路径读取) * * 依赖: npm install pptxgenjs */ ``` The corresponding `package.json` does not declare `pptxgenjs` in a `dependencies` section, and the audited project contains no lockfile. ### Technical Analysis The installation instruction uses an unversioned package name. Running `npm install pptxgenjs` resolves the package and its transitive dependency graph at installation time rather than installing a reviewed, immutable version. Because the dependency is absent from `package.json` and no lockfile or integrity metadata is included, two installations of the same Skill release may execute different third-party code. Any compromised future release, compromised transitive dependency, or malicious lifecycle script introduced upstream would run with the installing user’s privileges. No evidence was found that `pptxgenjs` itself is malicious. The finding concerns the unsafe and mutable dependency-management process. ### Attack Path 1. A user follows the script’s dependency instruction and runs: ```bash npm install pptxgenjs ``` 2. npm resolves the current package release and current transitive dependency graph. 3. Downloaded package lifecycle scripts, if present, execute with the user’s installation privileges. 4. The converter subsequently loads the downloaded package through: ```javascript const PptxGenJS = require('pptxgenjs'); ``` 5. A compromised or unexpectedly changed package version can therefore affect local execution without any change to the audited Skill files. ### Impact Assessment Potential ...[truncated 491 chars]
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
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (17)

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

The code clearly implements a local HTML-to-PPTX converter. It reads an HTML file path and output path from command-line arguments, parses specific slide div structures, extracts headings, paragraphs, lists, simple grid/flow layouts, and embeds existing local images into a generated PPTX. This partially overlaps with the declared presentation-generation purpose, especially PPT creation and image embedding. However, several prominently declared capabilities are absent: there is no style extraction from example images, no AI image generation, and no HTML preview workflow. Also, the input is not a general text manuscript but a preformatted HTML document with expected class names and structure. Therefore the description materially overstates and mischaracterizes the actual functionality.

Content

No source excerpt is available for this finding.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 747)May include surrounding context.

md
- `slide.html` - 页面模板

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The manifest description lists triggers such as "create slides" and "make presentation," which are generic phrases a user might say in many ordinary contexts. The description also provides no negative examples or constraints to clarify when the skill should or should not activate, increasing the risk of unintended invocation.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

Most operational instructions, user prompts, and examples in the skill are written exclusively in Chinese, including the expected workflow dialogue. There is no statement that the skill adapts to the user's preferred language or offers opt-in language selection, which may violate language or locale policy requirements.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
83% confidence
Finding

The manifest describes generating presentations, style extraction, image embedding, AI illustrations, and HTML preview before export. While preview itself fits the purpose, explicitly using a local server to host generated HTML adds a network/listening capability that is not declared in the skill's purpose or permissions section, which only discusses local file access and external LLM APIs.

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 sets lang="zh-CN" and includes multiple fixed Chinese strings such as 目录, 感谢聆听, and navigation labels. Per the policy, forcing a specific language/locale without user opt-in is a natural-language policy violation unless the locale restriction is clearly justified.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

This .js file contains natural-language strings exclusively in Chinese in the header comments and later CLI messages, which imposes a specific language on users. The policy for SQP-3 applies to all file types and allows locale constraints only when users are given a choice or the restriction is clearly justified, neither of which is present here.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The trigger list includes generic phrases such as 'create slides', 'make presentation', and 'convert to powerpoint', which can match a wide range of normal user requests and cause this skill to be invoked too broadly. In a skill that can process documents, extract style from images, and export files, over-broad routing increases the chance of unintended activation, unnecessary access to user content, and confusion or interference with more appropriate skills.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The file describes prompt templates for image generation and then provides the prompt structure, examples, and generated template strings almost entirely in Chinese. Because the document does not offer an opt-in language choice or explain that the skill is intentionally China/Chinese-locale specific, it effectively forces a specific language/locale for users.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The documented workflow downloads arbitrary HTTP(S) image URLs with no mention of user consent, allowlisting, or restrictions on internal/private addresses. In a PPT-generation skill, this can cause server-side requests to attacker-controlled or sensitive endpoints, leaking network metadata/IP information and potentially exposing internal resources or confidential document context through external fetches.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The file includes hardcoded Chinese user-facing text such as [图片加载失败], 数据分析, and other slide content examples, which implies a fixed output language. There is no indication that the user can choose language/locale or that the guide is intentionally limited to a Chinese-only context.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

This markdown file contains user-facing prompt text exclusively in Chinese, which can impose a specific language on users without opt-in. The policy for this category flags language or locale constraints unless the skill offers a choice or clearly documents a justified regional limitation.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The layout-analysis prompt is presented solely in Chinese and does not offer an alternative language or indicate that the skill is region-specific. That creates a natural-language policy issue because it constrains user interaction to one language without documented justification.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

These instructions are natural-language content embedded in the markdown and require Chinese to use as written. Because no opt-in, alternative locale, or justification is provided, this appears to violate the language/locale policy described for SQP-3.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The guide again uses Chinese-only prompt text for a user-facing workflow. Requiring one language throughout the skill content without opt-in or explanation matches the policy-violation criteria for forced language or locale.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
82% confidence
Finding

The package description forces a single language presentation for the skill metadata, and there is no indication that users can choose another language or that the skill is intentionally limited to a Chinese-speaking context. This may conflict with organizational language/locale policy when multilingual or user-selectable language behavior is expected.

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 substantive template content, labels, and examples in Chinese throughout the document. Under the language/locale policy, forcing a specific language without user opt-in can be a natural-language policy violation when no alternative language choice or justification is provided.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.