Versioned security assessment

Report ID: SA-816C62B2

7/7/2026, 1:46:40 AM

pptx security assessment v3

Skill Security Certification Report

Audit History
Audit model: codex Historical report
Skill name
pptx
Version
v3
Maintainer
sickn33
Coverage
56 Files scanned · 26,504 Lines analyzed
Policy version
Unavailable

Highest confirmed finding severity

High

1 confirmed security finding requires attention.

Installation context

Historical evidence

This report may not describe the currently installable artifact. Open the current Skill page for install guidance.

Open current Skill page

This report does not block or authorize the manifest or ZIP.

Most static alerts are false positives from Markdown syntax, OOXML namespaces, schema imports, and presentation layout terms. Confirmed issues include unsafe archive extraction, privileged setup guidance, external converters on user files, and browser rendering of local HTML.

Report position

Historical report

Open audit history before using this report to install.

Audit attestation

Not attestable

The required immutable binding is incomplete.

Human verification

Not verified

No human verification is recorded for this report.

Coverage

56 Files scanned · 26,504 Lines analyzed

21 items shown for review

Limitations

This report does not claim runtime or sandbox execution and does not prove the absence of side effects.

Evidence chain

Follow the evidence from source binding to the install contract. Available evidence supports verification; it is not a safety guarantee.

  1. Source

    Binding unavailable

  2. Artifact

    Identity incomplete

  3. Audit

    Complete

  4. Install contract

    Open manifest to verify

    Open manifest

Capabilities observed

Observed means this report recorded supporting evidence. Not recorded does not prove that a capability is absent.

Contains scripts

May execute code included with the Skill.

Not recorded by this audit

Network access

May connect to external services.

Observed in 206 evidence locations

Filesystem access

May read or write local files.

Observed in 52 evidence locations

Env variables

May read values from the process environment.

Observed in 2 evidence locations

External commands

May invoke commands or programs outside the Skill.

Observed in 124 evidence locations

Capability review items (20)
High
Python subprocess.run
result = subprocess.run(
The script invokes LibreOffice on a generated or user-provided Office file. Arguments are fixed, but external document parsers should run in a sandbox.
High
Python archive libraries
zipfile.ZipFile(input_file).extractall(output_path)
This archive-library use is the same unsafe extraction path that expands a user-controlled Office ZIP. It needs path checks before extraction.
High
Archive extract all (zip slip risk)
zipfile.ZipFile(input_file).extractall(output_path)
The code calls zipfile.extractall on an Office archive without validating member paths. A crafted archive can write files outside the intended directory.
High
Archive extract all (zip slip risk)
zip_ref.extractall(temp_path)
The code calls zipfile.extractall on an Office archive without validating member paths. A crafted archive can write files outside the intended directory.
High
Archive extract all (zip slip risk)
zip_ref.extractall(temp_dir)
The code calls zipfile.extractall on an Office archive without validating member paths. A crafted archive can write files outside the intended directory.
High
Archive extract all (zip slip risk)
zip_ref.extractall(temp_path)
The code calls zipfile.extractall on an Office archive without validating member paths. A crafted archive can write files outside the intended directory.
High
Python subprocess.run
result = subprocess.run(
The thumbnail workflow runs local conversion binaries on user-supplied presentations and PDFs. There is no shell injection, but parser exposure remains real.
High
Python subprocess.run
result = subprocess.run(
The thumbnail workflow runs local conversion binaries on user-supplied presentations and PDFs. There is no shell injection, but parser exposure remains real.
High
Ruby/shell backtick execution
- **LibreOffice**: `sudo apt-get install libreoffice` (for PDF conversion)
This inline command is privileged setup guidance, not harmless formatting. If followed by an agent, it can modify the host package set with root privileges.
High
Ruby/shell backtick execution
- **Poppler**: `sudo apt-get install poppler-utils` (for pdftoppm to convert PDF to images)
This inline command is privileged setup guidance, not harmless formatting. If followed by an agent, it can modify the host package set with root privileges.
High
sudo privilege escalation
- **LibreOffice**: `sudo apt-get install libreoffice` (for PDF conversion)
The skill documentation recommends sudo apt-get installation. That requires elevated privileges and should never run without explicit environment-owner approval.
High
sudo privilege escalation
- **Poppler**: `sudo apt-get install poppler-utils` (for pdftoppm to convert PDF to images)
The skill documentation recommends sudo apt-get installation. That requires elevated privileges and should never run without explicit environment-owner approval.
Medium
Python archive libraries
with zipfile.ZipFile(self.original_file, "r") as zip_ref:
This ZipFile read is immediately paired with extractall on an original Office document. The surrounding flow is vulnerable unless archive members are validated.
Medium
Python archive libraries
with zipfile.ZipFile(self.original_file, "r") as zip_ref:
This ZipFile read is immediately paired with extractall on an original Office document. The surrounding flow is vulnerable unless archive members are validated.
Medium
Python archive libraries
with zipfile.ZipFile(self.original_docx, "r") as zip_ref:
This ZipFile read is immediately paired with extractall on an original Office document. The surrounding flow is vulnerable unless archive members are validated.
Medium
Ruby/shell backtick execution
- **markitdown**: `pip install "markitdown[pptx]"` (for text extraction from presentations)
The dependency section tells users or agents to run package-manager installs. That mutates the environment and can execute third-party installer scripts.
Medium
Ruby/shell backtick execution
- **pptxgenjs**: `npm install -g pptxgenjs` (for creating presentations via html2pptx)
The dependency section tells users or agents to run package-manager installs. That mutates the environment and can execute third-party installer scripts.
Medium
Ruby/shell backtick execution
- **playwright**: `npm install -g playwright` (for HTML rendering in html2pptx)
The dependency section tells users or agents to run package-manager installs. That mutates the environment and can execute third-party installer scripts.
Medium
Ruby/shell backtick execution
- **react-icons**: `npm install -g react-icons react react-dom` (for icons)
The dependency section tells users or agents to run package-manager installs. That mutates the environment and can execute third-party installer scripts.
Medium
Ruby/shell backtick execution
- **sharp**: `npm install -g sharp` (for SVG rasterization and image processing)
The dependency section tells users or agents to run package-manager installs. That mutates the environment and can execute third-party installer scripts.

Risk findings

Confirmed security concerns are separated from items that still need review.

Confirmed security concerns (1)

RISK-001 High
Untrusted HTML Rendered In Browser
scripts/html2pptx.js opens a local HTML file in Playwright with default browser behavior. A user-supplied slide file could execute JavaScript or attempt local and network access.
The code directly calls page.goto on a file:// URL derived from htmlFile. No network blocking, JavaScript disabling, or sanitization is visible nearby.

Remediation

Suggested fixes recorded by this audit. Applying them is the maintainer’s responsibility.

  1. FIX-001
    High
    Unsafe Office archive extraction
    Extract ZIP members one by one after rejecting absolute paths, parent-directory segments, symlinks, and paths outside the resolved output directory.
  2. FIX-002
    High
    Privileged and global setup commands
    Remove sudo and global package-manager commands from agent-facing instructions. Document prerequisites and require explicit user approval for installation.
  3. FIX-003
    High
    Browser rendering of local HTML
    Render only trusted generated HTML, block network requests, use an isolated browser context, and disable JavaScript when layout extraction allows it.
  4. FIX-004
    Medium
    External converters process user files
    Run LibreOffice, Poppler, and similar converters with timeouts, resource limits, isolated temporary directories, and least-privilege sandboxing.

Expert evidence

Immutable subject identity, scanner metadata, dismissed matches, and source-level evidence.

Artifact subject

Marketplace commit
Unavailable
Content hash
Unavailable
Tree hash
Unavailable
Skill path
Unavailable
Audit payload hash
Unavailable

Analysis metadata

Audit model: codex

Analysis state: Complete

Scope is limited to the recorded files, lines, methods, and evidence. No runtime or sandbox execution is claimed.

Verify and export

The manifest and lockfile bind install artifacts to cryptographic hashes. This integrity claim is separate from the security assessment.

Audit attestation: not_attestable