Back to skill

Security audit

PPT Master

Security checks for vulnerabilities and agentic risk

Overview

The skill mostly fits a PPT/SVG creation workflow, but it needs Review because it directs automatic URL fetching and includes unsafe privileged install guidance.

Install only if you are comfortable running a local content-generation toolchain. Avoid the curl | sudo bash Node.js command; use trusted package-manager methods or a sandbox instead. Do not use the URL converter on untrusted links or in cloud/internal-network environments unless it is isolated, and review image watermark-removal use for rights and policy compliance.

Vulnerability Patterns
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • 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
Findings (3)

T03 · Remote Payload Retrieval and Execution

Error
Location
README_EN.md:45
Finding
Unverified Remote Script Executed with Root Privileges<![CDATA[ ## Vulnerability Details **File Location**: `README_EN.md:45` and equivalent instruction in `README.md:45` **Vulnerability Type**: Remote payload retrieval and execution **Risk Level**: Critical ### Vulnerable Code ```bash curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash - && sudo apt-get install -y nodejs ``` ### Technical Analysis The installation instructions retrieve a mutable script from an external server and pass it directly to a privileged Bash process. The script is neither pinned to an immutable version nor verified through a cryptographic hash or signature. Consequently, the code that ultimately executes can change after the Skill package has been reviewed. The pipeline also prevents users from inspecting the downloaded script before execution. Although the URL belongs to a recognizable Node.js package provider, that does not remove the risks associated with compromise of the hosting infrastructure, DNS resolution, TLS trust chain, or upstream account. This behavior exceeds least privilege because installing Node.js for an optional web-conversion feature does not require executing an unreviewed remote script directly as root. ### Attack Path 1. A user follows the Linux installation instructions. 2. `curl` retrieves the current contents of `setup_lts.x`. 3. The retrieved bytes are passed directly to `sudo -E bash`. 4. If the remote endpoint, delivery path, or signing account has been compromised, attacker-controlled shell commands execute with root privileges. 5. Those commands can modify system files, install packages or services, access root-readable data, and establish persistence. ### Impact Assessment Successful exploitation provides arbitrary operating-system command execution as root. The affected scope includes the entire host rather than only the project directory. An attacker could alter system packages and configuration, read protected files, create privileged accounts, install persistence mechanisms, or c ...[truncated 64 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Remove the `curl | sudo bash` pipeline. 2. Prefer the operating system's standard, signed package repositories where feasible. 3. If NodeSource is necessary: - Download a version-pinned installer or repository configuration file to disk. - Verify its publisher signature and a checksum obtained through a separate trusted channel. - Display or inspect the file before execution. - Require explicit user confirmation before any privileged operation. 4. Do not preserve the caller's complete environment with `sudo -E` unless specific variables are demonstrably required. 5. Clearly identify Node.js as optional and avoid requesting administrator privileges unless the user selects the corresponding feature. 6. Apply the same correction to both `README.md` and `README_EN.md`. ]]>

T09 · Insecure Skill Coding Practices

Error
Location
tools/web_to_md.py:78
Finding
Arbitrary URL Fetching Enables SSRF and Uses Disabled TLS Verification<![CDATA[ ## Vulnerability Details **File Location**: `tools/web_to_md.py:78-99` and `tools/web_to_md.py:174-195`; automatically triggered by `AGENTS.md:43-48` and `AGENTS.md:451-469` **Vulnerability Type**: Server-side request forgery and insecure transport validation **Risk Level**: High ### Vulnerable Code ```python def fetch_url(url): """ Fetches the URL handling headers, timeout and encoding detection. """ headers = { "User-Agent": CONFIG["user_agent"], "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8" } try: response = requests.get(url, headers=headers, timeout=CONFIG["timeout"], verify=False) response.raise_for_status() response.encoding = response.apparent_encoding return response.text except Exception as e: raise Exception(f"Failed to fetch {url}: {str(e)}") ``` The same unsafe behavior is used when downloading images referenced by a page: ```python abs_url = urljoin(page_url, src) resp = requests.get( abs_url, headers={"User-Agent": CONFIG["user_agent"]}, timeout=CONFIG["timeout"], verify=False, ) resp.raise_for_status() ``` The Skill rulebook directs the agent to process supplied URLs immediately: ```markdown When the user provides a PDF or URL, the corresponding tool must be called immediately. ``` ### Technical Analysis The converter accepts arbitrary URLs without restricting schemes, destinations, resolved IP addresses, ports, or redirect targets. It does not reject loopback, private, link-local, reserved, or cloud metadata address ranges. Because normal `requests` redirect behavior is enabled, a public URL can also redirect to an internal destination. The page parser subsequently downloads image URLs controlled by the fetched page. Relative and absolute image references are resolved with `urljoin`, but the resulting destination ...[truncated 2059 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Allow only explicitly supported `http` and `https` URLs. 2. Resolve every hostname before connecting and reject all loopback, private, link-local, multicast, unspecified, and reserved IPv4 and IPv6 addresses. 3. Repeat destination validation after every redirect and limit the number of redirects. 4. Protect against DNS rebinding by ensuring the validated destination is the address actually used for the connection. 5. Restore certificate verification by removing `verify=False`; use the platform trust store or a narrowly scoped custom CA bundle if required. 6. Apply the same destination checks to page URLs and every image or other subresource URL. 7. Add connection and read timeouts separately. 8. Stream responses and enforce strict maximum sizes before loading content into memory or writing it to disk. 9. Validate `Content-Type`, decoded image format, pixel dimensions, and decompression limits before processing images. 10. Require user confirmation before network access rather than automatically fetching every supplied URL. 11. Consider an allowlist for trusted domains when this Skill is used in sensitive or cloud-hosted environments. ]]>

T08 · Insecure Dependencies

Warning
Location
SKILL.md:119
Finding
Unpinned and Non-Reproducible Third-Party Dependency Installation<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md:119-125` **Vulnerability Type**: Insecure software supply-chain configuration **Risk Level**: Medium ### Vulnerable Code ```bash # Python dependencies pip install python-pptx Pillow beautifulsoup4 requests lxml # Node.js tools (optional, for WeChat page retrieval) npm install ``` ### Technical Analysis The Python installation command names packages without pinning exact versions or requiring cryptographic hashes. A future release therefore changes the effective code installed by the Skill without any modification to the audited package. The documented `npm install` command is also not reproducible because the audited project inventory did not show a package manifest or lock file at the project root. Even when a manifest exists, using an unlocked installation can resolve mutable transitive dependency versions. Package installation may execute package build or lifecycle logic. A compromised publisher account, malicious future release, dependency confusion condition, or compromised transitive package could introduce code that runs during installation or later when the bundled tools import the dependency. No evidence was found that the currently named packages are malicious. The finding concerns the unsafe and non-reproducible installation process. ### Attack Path 1. A user follows the dependency installation instructions. 2. The package manager queries public registries and resolves versions available at that time. 3. A compromised or malicious package release, or a compromised transitive dependency, is selected. 4. Package installation or lifecycle code executes with the user's privileges. 5. The dependency subsequently runs whenever a bundled tool imports or invokes it. ### Impact Assessment Exploitation would ordinarily provide code execution with the privileges of the user running `pip` or `npm`. If installation is performed from an administrator account or privileged environment, the i ...[truncated 302 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Create a reviewed Python dependency lock file with exact versions. 2. Require hashes for all Python packages and transitive dependencies, such as through a hash-locked requirements file. 3. Install dependencies inside a dedicated virtual environment rather than globally. 4. Include a reviewed Node.js package manifest and lock file if the Node.js converter is supported. 5. Use deterministic installation commands such as `npm ci` against a committed lock file instead of an unconstrained `npm install`. 6. Remove the Node.js installation instruction if the required manifest is not shipped. 7. Add automated dependency vulnerability and provenance scanning. 8. Review and deliberately update locked dependencies rather than resolving the latest releases during normal Skill execution. 9. Avoid running package managers with administrator or root privileges. ]]>
Vulnerability Patterns
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • 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 (603)

Context-Inappropriate Capability

High
Confidence
95% confidence
Finding
The manifest describes a system for generating presentation and marketing visuals, but these lines explicitly direct use of a watermark-removal tool on generated images. Watermark removal is not an obvious or necessary implementation detail of PPT/SVG generation and introduces a capability unrelated to the declared content-creation purpose.

Chaining Abuse

High
Category
Tool Misuse
Content
|----------|-------------------------|
| **macOS** | Use [Homebrew](https://brew.sh/): `brew install node` |
| **Windows** | Download LTS version from [Node.js Official Website](https://nodejs.org/) |
| **Linux** | Use [NodeSource](https://github.com/nodesource/distributions): `curl -fsSL https://deb.nodesource.com/setup_lts.x \| sudo -E bash - && sudo apt-get install -y nodejs` |

> 💡 **Verify Installation**: Run `node --version` to confirm version ≥ 18
Confidence
75% confidence
Finding
Tool calls are chained to bypass individual safety checks or escalate capabilities beyond what any single tool call would allow.

Chaining Abuse

High
Category
Tool Misuse
Content
|----------|-------------------------|
| **macOS** | Use [Homebrew](https://brew.sh/): `brew install node` |
| **Windows** | Download LTS version from [Node.js Official Website](https://nodejs.org/) |
| **Linux** | Use [NodeSource](https://github.com/nodesource/distributions): `curl -fsSL https://deb.nodesource.com/setup_lts.x \| sudo -E bash - && sudo apt-get install -y nodejs` |

> 💡 **Verify Installation**: Run `node --version` to confirm version ≥ 18
Confidence
75% confidence
Finding
Tool calls are chained to bypass individual safety checks or escalate capabilities beyond what any single tool call would allow.

Chaining Abuse

High
Category
Tool Misuse
Content
|----------|-------------------------|
| **macOS** | Use [Homebrew](https://brew.sh/): `brew install node` |
| **Windows** | Download LTS version from [Node.js Official Website](https://nodejs.org/) |
| **Linux** | Use [NodeSource](https://github.com/nodesource/distributions): `curl -fsSL https://deb.nodesource.com/setup_lts.x \| sudo -E bash - && sudo apt-get install -y nodejs` |

> 💡 **Verify Installation**: Run `node --version` to confirm version ≥ 18
Confidence
75% confidence
Finding
Tool calls are chained to bypass individual safety checks or escalate capabilities beyond what any single tool call would allow.

Chaining Abuse

High
Category
Tool Misuse
Content
|----------|-------------------------|
| **macOS** | Use [Homebrew](https://brew.sh/): `brew install node` |
| **Windows** | Download LTS version from [Node.js Official Website](https://nodejs.org/) |
| **Linux** | Use [NodeSource](https://github.com/nodesource/distributions): `curl -fsSL https://deb.nodesource.com/setup_lts.x \| sudo -E bash - && sudo apt-get install -y nodejs` |

> 💡 **Verify Installation**: Run `node --version` to confirm version ≥ 18
Confidence
75% confidence
Finding
Tool calls are chained to bypass individual safety checks or escalate capabilities beyond what any single tool call would allow.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding
The description claims a content-generation skill focused on AI-driven SVG creation for presentations and marketing materials. The supplied code does something materially different: it inspects existing image files in a directory, reports their size/aspect ratio, suggests presentation layout categories, prints markdown, and writes a CSV summary. While the PPT-related suggestions are tangentially relevant to presentation workflows, the primary purpose is analysis/reporting of existing images, not generation of SVG or other visual assets from documents. This is a clear description-behavior mismatch.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding
The declared description says the skill generates SVG visual content for presentations and marketing materials. The provided code does not generate SVGs, create presentations, or transform documents into visuals. Instead, it is a command-line quality assurance/validation tool for existing projects, checking structure, metadata, required files, and SVG formatting issues, then printing/exporting reports. This is a materially different primary purpose and introduces undeclared capabilities related to auditing and validation rather than content generation.

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding
The declared description presents the skill as a content-generation system that creates SVG-based presentation and marketing visuals, presumably driven by AI and usable on input documents. The supplied code does not generate any content, perform AI inference, transform documents, or produce presentation/poster/social-media graphics. Instead, it is a configuration module containing predefined formats, palettes, fonts, layout values, SVG restrictions, and helper getters. It also exposes a CLI for listing these settings and exporting them to a JSON file. While these configurations may support a larger SVG-generation system, this code chunk itself is only an internal config tool, so the declared purpose materially overstates and misrepresents the actual behavior.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding
The description claims a broad AI-based SVG/visual content generation system for presentations and marketing materials. The supplied code does not generate content at all. Its actual purpose is narrow and procedural: it post-processes existing SVGs by cropping linked images based on preserveAspectRatio='slice', saving the cropped assets, and updating SVG references. This is a materially different primary purpose and includes file modification behavior not conveyed by the declaration. Therefore the description does not accurately represent the code.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding
The declared description presents a broad AI-based visual content generation system for creating presentation and marketing graphics from documents. The supplied code instead implements a narrow SVG post-processing tool: it reads existing SVG files, finds custom icon placeholders, loads matching icon SVGs from a local templates/icons directory, extracts path elements, and writes replacements back into the SVG. This is materially different in primary purpose and capability. While both relate to SVG assets, the code does not perform AI generation, document-to-visual transformation, or multi-format output creation; it only embeds icons into existing SVGs.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding
The declared description suggests a broad AI-based content generation system for creating presentation and marketing visuals. The supplied code does not perform any AI processing, document ingestion, or visual generation. Instead, it is a narrow utility for modifying existing SVG files by embedding referenced external images as Base64 data URLs. This is a materially different primary purpose and capability than what was declared.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding
The supplied code does not generate SVGs, presentations, or any visual content, nor does it invoke AI capabilities. It is a static helper utility for formatting error messages and suggested fixes for known project and SVG rule violations. While it is related to an SVG/PPT workflow, its role is support tooling for validation and troubleshooting, which is materially different from the declared primary purpose of an AI-driven content generation system.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding
The declared description says the skill is an AI-based SVG content generation system for presentations and marketing visuals. The supplied code does something materially different: it is a maintenance/post-processing tool that repairs aspect ratios of existing SVG <image> elements by reading image dimensions and rewriting SVG geometry. There is no AI behavior, no generation of presentations/posters/social graphics, and no document-to-visual conversion workflow. While the code does operate on SVGs and is tangentially relevant to presentation assets, its primary purpose is narrowly focused on fixing embedded image sizing for PowerPoint compatibility, which is a significant mismatch from the declared purpose.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding
The declared description presents a broad AI content-generation system for producing presentation and marketing visuals from documents. The supplied code does something much narrower and materially different: it reads existing SVG files, detects <text>/<tspan> patterns, and rewrites them into flatter SVG text structures for compatibility. There is no model usage, document-to-graphic generation, presentation creation, or multi-format output beyond SVG file rewriting. The code’s primary purpose is SVG text normalization/flattening, so the description does not accurately represent the actual behavior.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding
The declared description says this skill generates multi-format SVG visual content for presentations and marketing materials. The supplied code does not generate SVGs, presentations, posters, or graphics from documents, and it does not perform AI-driven content creation. Instead, its sole purpose is to remove a Gemini watermark/logo from existing images using a reverse blending algorithm and save a cleaned output file. This is a materially different primary purpose and introduces undeclared capabilities related to watermark removal and image alteration.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding
The declared description says this skill is for AI-powered SVG content generation for presentations and marketing materials. However, the supplied code does not generate SVGs, create presentations, transform documents into visuals, or invoke any AI functionality. Its actual purpose is to scan an examples directory, collect project metadata via helper utilities, and write a README index file listing projects by format and date. This is a materially different primary purpose from the declared one, so the description does not accurately represent the code chunk.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding
The declared description says this skill generates SVG visual content for presentations and marketing materials. The supplied code does not generate SVGs, slides, posters, or social media graphics, and it does not use AI generation. Instead, it opens PDF files with PyMuPDF, analyzes font sizes to infer heading structure, extracts text/tables/images, cleans headers and footers, and outputs Markdown plus extracted image files. This is a materially different primary purpose and includes undeclared file-processing capabilities unrelated to SVG content generation.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding
The declared description suggests a broad system for AI-based generation of SVG visual assets across multiple use cases and formats. The supplied code instead narrowly produces XML fragments for PowerPoint slide transitions and entrance animations. Its primary purpose is PPTX animation/timing support, not SVG creation or multi-format graphic generation. This is a material description-to-behavior mismatch.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding
The declared description emphasizes automated SVG content generation for PPTs, posters, and visual materials. The provided code does not generate or transform content at all. Instead, it manages project directories, validates project structure, checks for spec files and SVG naming/viewBox consistency, and prints project info. While this may support a larger SVG workflow, the chunk’s primary purpose is project administration/validation, which is materially different from the declared generation capability.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding
The declared description says this skill generates SVG visual content for PPTs/posters/social graphics. However, the supplied code does not generate any SVGs, create presentation assets, invoke AI models, or transform documents into visuals. Instead, it is a helper module focused on parsing directory names, checking presence of README/spec/source files, counting SVG files, validating project structure and SVG viewBox/naming conventions, searching project folders, and calculating file counts/sizes. This is a materially different primary purpose, so the description does not accurately represent the code chunk.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding
The declared description says this skill generates multi-format SVG visual content for presentations and marketing materials. The code does nothing related to AI generation, SVG creation, document-to-visual transformation, or presentation/poster generation. Its actual purpose is image maintenance: correcting EXIF orientation, rotating existing image files, and generating a browser-based helper UI to review and produce rotation instructions. This is a materially different primary purpose and includes undeclared file-modification behavior, so the description does not accurately represent the code.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding
The declared description suggests a broad AI-powered system that generates SVG visual content for presentations, posters, and marketing materials from documents. The supplied code does not implement AI behavior, document ingestion, or general multi-format content generation. Instead, it is a specialized CLI utility for calculating chart coordinates, generating chart geometry metadata/path strings, analyzing existing SVG files, and validating element positions. While the code is SVG-related and could support presentation graphics workflows, its primary purpose is materially narrower and different from the declared purpose, and it also provides undeclared SVG analysis/validation functionality.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding
The declared description says this skill generates SVG content for presentations and marketing materials. The supplied code does not generate any SVG or visual content, does not transform documents into graphics, and does not appear AI-driven. Its primary function is to inspect existing SVG files for compliance with project/PPT compatibility rules, summarize issues, and optionally export a report. This is a materially different purpose, so the description does not accurately represent the code.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding
The description claims a broad AI-based visual content generation system for multiple output formats and use cases. The supplied code instead performs a specific deterministic SVG transformation: it scans SVG files/directories, parses XML, and rewrites rounded rectangle elements into path elements for PowerPoint compatibility. It does not generate new content, does not process documents into graphics, does not appear AI-driven, and does not support the broad multi-format presentation/social-media/marketing workflow described. This is a material description-behavior mismatch.

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding
The declared description says this skill is an AI-driven multi-format SVG content generation system for presentations and marketing materials. The supplied code does not generate content, does not use AI, and does not transform documents into visuals. Instead, it is a batch conversion/export tool: it scans a local project directory for pre-existing SVG files, optionally reads notes/*.md, may render PNG fallback images, edits PPTX internals, and produces a PowerPoint file with one slide per SVG plus optional transitions and notes. That is a materially different primary purpose from the declared description, so this is a mismatch.

Static analysis

No suspicious patterns detected.