Back to skill

Security audit

Frontend Slides

Security checks for vulnerabilities and agentic risk

Overview

This skill is a presentation-generation helper with some disclosed local file creation, optional browser autosave, remote font loading, and package-install risks to consider.

Install only if you are comfortable with the skill creating local HTML/assets, optionally storing edits in browser localStorage, opening generated files in a browser, and using remote fonts. For PPT conversion or image processing, prefer a virtual environment with pinned dependencies instead of installing packages into a shared Python environment.

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

T08 · Insecure Dependencies

Warning
Location
SKILL.md:192
Finding
Unpinned Dependencies Installed into the Active Python Environment## Vulnerability Details **File Location**: `SKILL.md`, line 192 **Vulnerability Type**: Unpinned third-party dependency installation **Risk Level**: Medium **Vulnerable Code Snippet**: ```markdown 1. **Extract content** — Run `python scripts/extract-pptx.py <input.pptx> <output_dir>` (install python-pptx if needed: `pip install python-pptx`) ``` ### Technical Analysis The skill instructs the agent to install `python-pptx` from the default Python package index without a version constraint, hash verification, lock file, isolated virtual environment, or explicit trusted index. A similar optional instruction for Pillow appears in `html-template.md`. Although the named packages are legitimate, an unpinned installation resolves to whichever release the package index considers current at execution time. Consequently, the effective dependency code can change after this skill has been audited. A compromised publisher account, malicious future release, package-index compromise, or compromised dependency in the transitive dependency graph could introduce attacker-controlled code. Python packages can execute code during installation or when imported. The extractor subsequently imports the installed dependency with: ```python from pptx import Presentation ``` The dependency therefore receives an execution opportunity under the identity and environment of the agent running the skill. ### Attack Path 1. An attacker compromises the upstream package, a transitive dependency, a publisher account, or the configured Python package index. 2. The attacker publishes a malicious version that satisfies the unconstrained package request. 3. A user asks the skill to convert a PowerPoint file on a system where `python-pptx` is unavailable. 4. Following `SKILL.md`, the agent runs `pip install python-pptx`. 5. Pip selects and installs the attacker-controlled release into the active environment. 6. Malicious installation hooks ...[truncated 916 chars]
Remediation
## Remediation Suggestions - Pin every dependency to an audited version, for example through a version-controlled requirements file. - Use hashes and require them during installation: ```text python-pptx==AUDITED_VERSION --hash=sha256:EXPECTED_HASH ``` ```bash python -m pip install --require-hashes -r requirements.txt ``` - Pin and hash transitive dependencies as well, using a reproducible lock-generation process. - Install dependencies inside a dedicated virtual environment rather than the user's global or shared Python environment. - Use `python -m pip` tied to the intended interpreter instead of an ambiguous `pip` executable. - Configure an approved package index and disable unexpected additional indexes to reduce dependency-confusion exposure. - Apply the same controls to the Pillow installation documented in `html-template.md`. - Prefer a prebuilt, reviewed execution environment where dependencies are installed before the skill runs. - Document that dependency installation causes third-party code to execute and require confirmation before changing the environment.

other

Note
Location
html-template.md:14
Finding
Generated Presentations Load Mutable Third-Party Font Stylesheets## Vulnerability Details **File Location**: `html-template.md`, lines 14-16 **Vulnerability Type**: External resource privacy and integrity exposure **Risk Level**: Low **Vulnerable Code Snippet**: ```html <!-- Fonts: use Fontshare or Google Fonts — never system fonts --> <link rel="stylesheet" href="https://api.fontshare.com/v2/css?f[]=..."> ``` ### Technical Analysis The template directs generated presentations to load a stylesheet from a third-party font service. This conflicts with the project's description of presentations as self-contained and causes local presentations to initiate network requests when opened. The remote provider receives connection metadata such as the viewer's IP address, request time, user agent, and potentially referrer information. The returned stylesheet and referenced font resources are mutable external content that can change after presentation generation and after this skill's review. A compromised provider, account, DNS path, or delivery infrastructure could alter the stylesheet or its referenced assets. Remote CSS does not inherently grant arbitrary JavaScript execution, and no such payload exists in the audited files. However, attacker-controlled CSS can alter or conceal presentation content, trigger additional cross-origin resource requests, and create limited CSS-based disclosure channels when combined with sensitive DOM state. ### Attack Path 1. The skill generates an HTML presentation containing the external Fontshare or Google Fonts stylesheet reference. 2. The presentation is opened while the viewer is online. 3. The browser contacts the third-party service, disclosing normal HTTP connection metadata. 4. If the service or resource-delivery path has been compromised, the browser receives attacker-controlled CSS or font-resource references. 5. The malicious stylesheet changes the presentation's appearance, conceals or overlays content, or causes requests to attacker-c ...[truncated 946 chars]
Remediation
## Remediation Suggestions - Bundle reviewed font files with the presentation or embed them as local data resources so the presentation remains deterministic and offline. - If a single-file artifact is required, embed font files with `@font-face` and data URLs after verifying their license and integrity. - Remove the mandatory instruction to use externally hosted fonts; permit locally bundled or privacy-preserving fallback fonts. - Add a restrictive Content Security Policy. For fully self-contained presentations, use a policy that blocks network access, such as: ```html <meta http-equiv="Content-Security-Policy" content="default-src 'none'; style-src 'unsafe-inline'; font-src data:; img-src 'self' data:; script-src 'unsafe-inline'; connect-src 'none'"> ``` - If remote fonts must remain supported, disclose the resulting third-party requests and make them an explicit user choice. - Restrict `style-src` and `font-src` to an allowlist of required origins and set `referrerpolicy="no-referrer"` on external stylesheet links where browser support permits. - Avoid claiming generated files are entirely self-contained when they depend on remote font infrastructure.
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Rogue AgentSelf-Modification, Session Persistence
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
Findings (11)

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding
The declared description emphasizes building rich HTML presentations and converting PowerPoint files into web presentations. The supplied code does not create presentations, generate HTML, apply animations, or provide design assistance. Its behavior is limited to parsing a PPTX file and exporting its contents as JSON plus extracted image files. While PPTX extraction could be a supporting step in a conversion pipeline, this code chunk by itself has a materially narrower and different primary purpose than the declared skill.

Hidden Instructions

High
Category
Prompt Injection
Content
<meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Presentation Title</title>

    <!-- Fonts: use Fontshare or Google Fonts — never system fonts -->
    <link rel="stylesheet" href="https://api.fontshare.com/v2/css?f[]=...">

    <style>
Confidence
70% confidence
Finding
Hidden instructions were detected in comments or invisible text. These could contain malicious directives. Manual review is recommended.

Session Persistence

Medium
Category
Rogue Agent
Content
## What This Does

**Frontend Slides** helps non-designers create beautiful web presentations without knowing CSS or JavaScript. It uses a "show, don't tell" approach: instead of asking you to describe your aesthetic preferences in words, it generates visual previews and lets you pick what you like.

Here is a deck about the skill, made through the skill:
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.

Skill Enumeration

Medium
Category
Agent Snooping
Content
```bash
# Create the skill directory
mkdir -p ~/.claude/skills/frontend-slides/scripts

# Copy all files (or clone this repo directly)
cp SKILL.md STYLE_PRESETS.md viewport-base.css html-template.md animation-patterns.md ~/.claude/skills/frontend-slides/
Confidence
85% confidence
Finding
Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.

Lp3

Medium
Category
MCP Least Privilege
Confidence
91% confidence
Finding
The skill instructs the agent to create and modify files, save previews, delete directories, and generate HTML artifacts, but it does not declare any explicit tool scope or allowed-tools boundary. This weakens least-privilege controls and can let a runtime grant broader file-write capability than users or reviewers expect.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
4. **After ANY modification, verify:** `.slide` has `overflow: hidden`, new elements use `clamp()`, images have viewport-relative max-height, content fits at 1280x720
5. **Proactively reorganize:** If modifications will cause overflow, automatically split content and inform the user. Don't wait to be asked

**When adding images to existing slides:** Move image to new slide or reduce other content first. Never add images without checking if existing content already fills the viewport.

---
Confidence
75% confidence
Finding
Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Context-Inappropriate Capability

Medium
Confidence
91% confidence
Finding
The skill directs the agent to run shell commands and install a Python package (`pip install python-pptx`) during PPT conversion. Allowing package installation and shell execution expands the attack surface beyond simple presentation authoring, introducing supply-chain and environment-modification risk if used in sensitive or shared runtimes.

Natural-Language Policy Violations

Medium
Confidence
91% confidence
Finding
The template hard-codes `<html lang="en">`, which forces a specific language/locale in the generated output. Under the policy, locale constraints should be user-selectable or clearly justified as region-specific; neither is present here.

External Transmission

Medium
Category
Data Exfiltration
Content
<title>Presentation Title</title>

    <!-- Fonts: use Fontshare or Google Fonts — never system fonts -->
    <link rel="stylesheet" href="https://api.fontshare.com/v2/css?f[]=...">

    <style>
        /* ===========================================
Confidence
95% confidence
Finding
The template requires loading fonts from Fontshare or Google Fonts, which causes the presentation to contact third-party servers when opened. In a locally viewed presentation workflow, this leaks viewer metadata such as IP address, user agent, and access timing, and also creates a supply-chain and availability dependency on external infrastructure.

Missing User Warnings

Low
Confidence
88% confidence
Finding
The skill offers inline editing with automatic localStorage persistence but does not require a clear disclosure that presentation content will be stored in the browser. This can cause unintended retention of sensitive material on shared devices or in regulated environments, even though the storage is client-side rather than exfiltrated.

Missing User Warnings

Low
Confidence
88% confidence
Finding
This markdown file instructs implementations to include auto-save to localStorage and export/save file functionality, both of which can affect user data handling and persistence. The surrounding text marks inline editing as opt-in, but it does not explicitly warn users that edits may be stored locally or written out to files.

Static analysis

No suspicious patterns detected.