Back to skill

Security audit

Markdown to PPT (Smart Layout)

Security checks for vulnerabilities and agentic risk

Overview

This skill is mostly a Markdown-to-presentation helper, but it gives users unsafe preview/export commands and under-discloses external image lookups from document-derived content.

Review before installing. Do not run the generated `npx slidew` commands; use the intended Slidev CLI from a trusted, pinned local dependency instead. Avoid enabling `--auto-images` on confidential Markdown unless you are comfortable sending derived search terms to external image services.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (1)

T08 · Insecure Dependencies

Warning
Location
scripts/md_to_ppt.py:631
Finding
Typographical Error in npx Command Can Execute an Unintended Registry Package## Vulnerability Details **File Location**: `scripts/md_to_ppt.py:631-645` **Additional Locations**: `scripts/md_to_ppt.py:731`, `README.md:37`, `output/README.md:8-21` **Vulnerability Type**: Dependency confusion or typosquatting through an incorrect `npx` package command **Risk Level**: Medium ### Vulnerable Code ```python ## Preview ```bash npx slidew dev ``` ## Export ```bash npx slidew export # PDF npx slidew export --format pptx # PPTX npx slidew export --format html # HTML ``` ``` The same incorrect command is printed directly to the terminal: ```python print(f" cd {result['output_dir']} && npx slidew dev") ``` The project declares and documents `@slidev/cli` as its intended dependency, but the generated instructions invoke `slidew` rather than `slidev`. ### Technical Analysis `npx` can resolve a named command or package from the npm registry when an appropriate local executable is unavailable. The project intends users to run the Slidev CLI, whose executable is `slidev`, but repeatedly directs them to run `npx slidew`. This typo creates an unsafe package-resolution boundary. Instead of invoking the reviewed Slidev dependency, the command can cause npm to locate, download, and execute a different package associated with the misspelled name. Package installation lifecycle scripts and the package CLI run with the privileges of the invoking user. The vulnerable command is embedded in every generated output README and printed after successful conversion, making it part of the normal workflow rather than an isolated documentation typo. The audit did not establish that a particular `slidew` package is malicious; the confirmed weakness is that the project instructs users to resolve and execute an unintended, unpinned registry package. ### Attack Path 1. A user runs `scripts/md_to_ppt.py` to generate a presentation. 2. The script creates an ...[truncated 1326 chars]
Remediation
## Remediation Suggestions 1. Replace every occurrence of `npx slidew` with the correct `npx slidev` command in: - `scripts/md_to_ppt.py` - `README.md` - `output/README.md` - Any generated templates or terminal messages. 2. Declare `@slidev/cli` as a local, version-pinned project dependency rather than relying on dynamic registry resolution: ```bash npm install --save-dev @slidev/cli@<reviewed-version> ``` 3. Commit a lockfile and use a reproducible installation command such as: ```bash npm ci ``` 4. Prevent `npx` from downloading missing packages at runtime: ```bash npx --no-install slidev dev npx --no-install slidev export ``` Alternatively, expose reviewed package scripts through `package.json` and run them with `npm run`. 5. Add automated tests that inspect generated README content and terminal guidance to ensure the executable is exactly `slidev`. 6. Add dependency review, lockfile integrity checks, and registry restrictions to CI so misspelled or undeclared npm packages cannot silently enter the workflow.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (24)

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding
The skill advertises broad Markdown-to-PPT functionality while also describing automatic web image search/download and AI image generation flows that can send document-derived keywords or prompts to external services. This creates a trust and transparency problem: users may provide sensitive Markdown expecting local conversion, but portions of the content may be disclosed externally without explicit consent, and the claimed output capabilities are overstated relative to the documented implementation.

Natural-Language Policy Violations

Medium
Confidence
96% confidence
Finding
The skill description is written entirely in Chinese from the opening summary, and the document does not offer an alternative language or state that the skill is intentionally limited to a Chinese-speaking or region-specific audience. This creates a natural-language locale constraint without user opt-in, which matches the policy-violation category.

Rp1

Medium
Category
MCP Rug Pull
Confidence
92% confidence
Finding
The README instructs users to run `npx slidew dev`, which fetches and executes an unpinned package name at runtime. Even though this appears to be a typo for `slidev`, executing arbitrary or mistyped packages via `npx` creates a supply-chain risk: a malicious package with that name could be installed and run on the user's machine.

Missing User Warnings

Medium
Confidence
96% confidence
Finding
The skill documents automatic image search and download from external sites without warning that document content will be converted into keywords and sent over the network. If users process internal reports, proposals, or unreleased material, those derived queries can leak sensitive topics, names, or project details to third-party services.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The AI image generation feature implies sending prompts derived from document content to an external model or API, but the skill does not warn users about potential data disclosure. Sensitive business, legal, medical, or strategic content could be embedded in prompts and exposed to third-party providers or retained in external service logs.

Rp1

Medium
Category
MCP Rug Pull
Confidence
88% confidence
Finding
The README instructs users to run `npx slidew` without pinning a specific package version. `npx` may fetch the latest published package at execution time, which creates a supply-chain risk if the package is updated maliciously, compromised, or a typo/confusion package is resolved unexpectedly. In a README for an agent skill, this is more dangerous because users are being guided to execute network-fetched code directly from documentation.

Rp1

Medium
Category
MCP Rug Pull
Confidence
88% confidence
Finding
The export command uses `npx slidew` without a pinned version, so the command may execute whatever version is current at runtime. That exposes users to avoidable supply-chain compromise and non-reproducible behavior, especially risky when documentation encourages direct command execution. The skill context increases risk because converting content to presentations is a common workflow users may run with local file access.

Rp1

Medium
Category
MCP Rug Pull
Confidence
88% confidence
Finding
The PPTX export example invokes `npx slidew` without version pinning, which can cause execution of an unintended or newly compromised package version. Because this is documentation intended for end users, it meaningfully lowers the barrier to running unreviewed remote code and creates supply-chain exposure. The skill’s context does not justify dynamic fetching, so the risk remains real.

Rp1

Medium
Category
MCP Rug Pull
Confidence
88% confidence
Finding
The HTML export command again relies on unpinned `npx slidew`, allowing runtime resolution of whatever package version is available. This introduces supply-chain and reproducibility risks, and in practice could lead to arbitrary code execution if the package or dependency chain is compromised. The fact that the command appears multiple times reinforces unsafe usage patterns for users.

Natural-Language Policy Violations

Medium
Confidence
93% confidence
Finding
The slide content and speaker notes are written entirely in Chinese, including headings and narrative text, with no indication that the user can choose another language or that the presentation is intended only for a Chinese-speaking audience. This can violate a language/locale policy when a skill output is constrained to a specific language without user opt-in.

Natural-Language Policy Violations

Medium
Confidence
89% confidence
Finding
The file presents its functionality and many user-facing strings in Chinese, including the top-level description and CLI output/help, but provides no option for users to select another language. This can violate language/locale policy where tools must not force a specific language without user opt-in.

Missing User Warnings

Medium
Confidence
93% confidence
Finding
When `--auto-images` is enabled, the script derives keywords from document content and sends them to Unsplash via a network request without clear user warning about what content is disclosed. If the Markdown contains confidential project names, personal data, or sensitive topics, that information may leak to a third party. In this skill’s context, the behavior is optional but still risky because the disclosure is content-derived and not transparently described at the point of use.

Rp1

Medium
Category
MCP Rug Pull
Confidence
88% confidence
Finding
The generated README tells users to run `npx slidew dev`, which fetches and executes an unpinned package from the npm registry. If that package name is compromised, typosquatted, or changes unexpectedly, users could execute attacker-controlled code on their machine. In this skill’s context, the danger is elevated because the tool itself emits the command as trusted next-step guidance.

Rp1

Medium
Category
MCP Rug Pull
Confidence
88% confidence
Finding
The README export instructions include `npx slidew export`, again causing execution of an unpinned npm package. This creates a supply-chain execution path where generated documentation can induce users to run arbitrary code if the referenced package is malicious or replaced. Because the instruction is auto-generated by the skill, users may reasonably trust it.

Rp1

Medium
Category
MCP Rug Pull
Confidence
88% confidence
Finding
The generated command `npx slidew export --format pptx` references an unpinned executable from npm. This exposes users to remote code execution through package resolution at the time they follow the documentation. The mismatch with the rest of the code also increases the chance this is a typo, making typosquatting risk more plausible.

Rp1

Medium
Category
MCP Rug Pull
Confidence
88% confidence
Finding
The generated HTML export command uses `npx slidew export --format html`, which executes an unpinned npm package chosen at runtime. An attacker controlling or impersonating that package could gain code execution on a user's workstation. The risk is materially tied to this skill because it embeds the command in generated artifacts users are expected to follow.

Description-Behavior Mismatch

Medium
Confidence
97% confidence
Finding
The CLI advertises only `slidev` and `html` formats, and the selected format is not used anywhere in generation. The implementation always writes `slides.md`, `style.css`, `README.md`, and related Slidev assets, so the manifest overstates the skill's actual output behavior.

Rp1

Medium
Category
MCP Rug Pull
Confidence
89% confidence
Finding
The console output instructs users to run `cd <output> && npx slidew dev`, directly encouraging execution of an unpinned package. This is a supply-chain risk and can become code execution if the package is malicious, hijacked, or typosquatted. The skill context makes it more dangerous because the message appears as part of successful tool output, which strongly encourages trust.

Natural-Language Policy Violations

Low
Confidence
78% confidence
Finding
The skill body is overwhelmingly written in Chinese and the interactive examples assume Chinese-language prompts and responses. While the short description includes English, the operational instructions do not clearly offer the user a language/locale choice or state that other languages are supported.

Natural-Language Policy Violations

Low
Confidence
94% confidence
Finding
The document content is written entirely in Chinese, with no indication that language selection is optional or that the skill is intended only for a Chinese-speaking or region-specific audience. This creates a natural-language policy concern because it effectively imposes a specific language without user opt-in.

Natural-Language Policy Violations

Low
Confidence
88% confidence
Finding
The stylesheet includes Chinese-only comments such as "标题样式", which indicates a fixed language choice in the file's natural-language content. Under the policy, forcing a specific language without offering a choice or documenting a justified locale constraint is a natural-language policy concern.

Intent-Code Divergence

Low
Confidence
90% confidence
Finding
Elsewhere the code consistently refers to Slidev and generates Slidev-style files such as `slides.md`, but the generated README tells users to run `npx slidew ...`, which is a different tool name. This is active documentation mismatch that can mislead users about how to use the generated output.

Intent-Code Divergence

Low
Confidence
88% confidence
Finding
The script's module docstring and generated artifacts indicate a Slidev workflow, but the success message recommends `slidew`, which does not match that stated intent. This inconsistency is in inline user-facing guidance rather than merely omitted detail.

Natural-Language Policy Violations

Low
Confidence
91% confidence
Finding
This markdown file presents all user-facing content in Chinese, and there is no indication that the user can choose another language or that the skill is intentionally limited to a Chinese-speaking audience. Under the policy rule for language or locale constraints, forcing a specific language without opt-in is a natural-language policy concern.

Static analysis

No suspicious patterns detected.