Back to skill

Security audit

Frontend Slides

Security checks for vulnerabilities and agentic risk

Overview

This skill appears to create and convert presentations locally as described, with normal privacy and dependency cautions but no evidence of hidden or malicious behavior.

Before installing, treat presentations and speaker notes as potentially sensitive: only convert files you are comfortable letting the agent read, and review generated output before sharing. For safer dependency handling, install Pillow and python-pptx in a virtual environment with pinned versions. If you enable browser editing, remember that auto-save may retain deck content in that browser profile until cleared.

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
SKILL.md:274
Finding

Unpinned Third-Party Python Dependency Installation

Content
View full analysis

Vulnerability Details

File Location: SKILL.md, lines 274 and 288
Vulnerability Type: Unpinned and integrity-unverified third-party dependencies
Risk Level: Medium

Complete Vulnerable Code Snippets

From SKILL.md, line 274:

text
Dependency: `pip install Pillow`.

From SKILL.md, line 288:

text
Dependency: `pip install python-pptx`.

The same dependency guidance also appears in:

  • reference/image-processing.py, line 4
  • reference/ppt-extract.py, line 4

Technical Analysis

The skill directs the agent to install Pillow and python-pptx without pinning reviewed versions, verifying package hashes, or constraining the package index. Python package installation can execute package-controlled build and installation logic. Consequently, the code executed by these workflows may differ over time from the code originally audited.

This creates a supply-chain risk if a dependency release or package repository is compromised, if the environment is configured to use an untrusted package index, or if dependency resolution selects a vulnerable transitive package.

No evidence indicates that the currently named packages are malicious. The vulnerability is the unsafe installation procedure rather than a confirmed malicious package.

Attack Path

  1. A user requests image processing or PowerPoint conversion.
  2. The agent follows the dependency instructions in SKILL.md.
  3. The agent runs pip install Pillow or pip install python-pptx.
  4. Package resolution retrieves an unpinned release and its transitive dependencies from the configured index.
  5. A compromised package, dependency, index, or unsafe resolver configuration supplies attacker-controlled installation or runtime code.
  6. That code executes with the privileges of the user or agent environment during installation or subsequent import.

Impact Assessment

Successful exploitation could execute arbitrary code with the privileges of the process running the install ...[truncated 427 chars]

Remediation
View remediation

Remediation Suggestions

  1. Pin each direct dependency to a reviewed version rather than installing the latest available release.
  2. Generate a lock file containing all resolved transitive dependencies.
  3. Require cryptographic hashes for every package, for example through a hashed requirements file and pip install --require-hashes.
  4. Explicitly use a trusted package index and disable unintended extra indexes that could enable dependency confusion.
  5. Install dependencies in a dedicated, least-privileged virtual environment.
  6. Obtain explicit user approval before installing packages or changing the environment.
  7. Scan pinned dependencies for known vulnerabilities and review updates before changing versions.
  8. Replace the current instructions with a hardened process such as:
bash
python -m venv .venv
.venv/bin/python -m pip install \
  --index-url https://pypi.org/simple \
  --require-hashes \
  -r requirements.lock
  1. Document the exact supported Python and dependency versions in the project metadata and README.
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Rogue AgentSelf-Modification, Session Persistence
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
Findings (10)

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 · README.md (reported line 7)May include surrounding context.

md
## 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.

### Key Features

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The README says to trigger the skill by describing what you need, with examples like "Make a presales presentation," which is common everyday phrasing rather than a narrowly scoped invocation. It does not provide exclusion conditions or a bounded trigger list, so the activation scope is ambiguous and could cause unintended invocation.

Content

No source excerpt is available for this finding.

Skill Enumeration

Medium
Category
Agent Snooping
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.

Content

Scanner excerpt · README.md (reported line 44)May include surrounding context.

bash
# Create the skill directory
mkdir -p ~/.claude/skills/frontend-slides

# Copy the files (or download from this repo)
cp SKILL.md ~/.claude/skills/frontend-slides/

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The PPT conversion description states that the skill extracts text, images, and notes, but it does not prominently warn users that speaker notes and embedded content may contain sensitive or confidential information. In a sales/presales context, presentations often include internal strategy, customer data, pricing, or private notes, so silent or underemphasized extraction increases the risk of unintended data exposure to the agent or downstream outputs.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The document switches into Chinese for a full trend section and later includes Chinese-specific workflow labels such as '解决方案 PPT' and related prompts. This imposes multilingual output/instructions without explicit user opt-in or a stated region-specific justification, which can violate language/locale policy requirements.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The skill explicitly instructs implementing auto-save to localStorage and export/save behavior, but provides no requirement for user notice, consent, retention limits, or safeguards around what content is persisted or written out. In a presentation-editing context, users may handle confidential sales, client, or internal material, so silent persistence can expose sensitive data to other users of the same browser profile or cause unintended file overwrites/export of sensitive content.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
76% confidence
Finding

These lines suggest adding Chinese-language description and trigger aliases to improve discoverability for Chinese users. Because the file is natural-language guidance and frames a language preference for users rather than offering an explicit language choice, it can be read as steering the skill toward a fixed locale without opt-in.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
88% confidence
Finding

The button title is hard-coded as Chinese text ('编辑模式 (E)') with no indication of localization, fallback, or user choice. Under SQP-3, forcing a specific language without opt-in is a natural-language policy concern.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
97% confidence
Finding

The instruction requires generated HTML to use <html lang="en">, which forces a specific language/locale choice. This is a natural-language policy concern because the file does not offer any user choice or explain a justified region-specific constraint.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
85% confidence
Finding

The comment at L45 states processed images should be saved with a _processed suffix and originals should never be overwritten. However, crop_circle, resize_max, and add_padding all accept arbitrary output_path values and do not prevent callers from passing the same path as input_path, so the implementation does not enforce the documented intent.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.