Skills pptx Audit History
📦

Audit History

pptx - 4 audits

Version comparison

Capability and finding changes across audited versions, newest first.

VersionDateResultReview itemsChange vs previous
v4 LatestJul 21, 2026, 08:42 AM 2 confirmed4No capability change
v3 Jul 7, 2026, 01:46 AM 1 confirmed20 Contains scripts
v2 Jun 30, 2026, 06:27 PM 3 confirmed0Contains scriptsEnv variables
v1 Feb 24, 2026, 08:11 PM No confirmed findings2Baseline

Jul 21, 2026, 08:42 AM

Most static alerts are false positives caused by OOXML schemas, documentation, JavaScript template literals, and expected presentation file processing. Confirmed concerns are unbounded archive extraction, browser rendering of untrusted HTML, and external conversion of untrusted documents. No prompt injection, credential theft, network reconnaissance, or command-injection behavior was found. Static review was capped at 400/506 representative findings; omitted static matches are unconfirmed, so automatic publishing stays disabled until manual review.

56
Files scanned
26,504
Lines analyzed
10
Review items
0
False positives ignored

Confirmed security concerns (2)

High
Untrusted HTML executes in a browser renderer
The HTML conversion workflow opens a supplied local HTML file in Chromium. Embedded scripts and remote subresources can run or load unless the input is trusted or browser networking is restricted.
The renderer creates a browser page and navigates to the supplied file URL. Browser execution of attacker-provided HTML creates a clear trust-boundary risk.
Medium
External converters process untrusted documents without a timeout
Thumbnail generation sends a supplied presentation to LibreOffice and then sends the produced PDF to Poppler. This exposes local converter parsers to hostile files and can leave stalled processes running.
The documented subprocess calls process supplied office and PDF content. Fixed arguments prevent command injection, but parser exposure and absent time limits remain.
Capability review items (4)

These are real local capabilities that may be expected for this skill, so they require review but are not counted as confirmed malicious behavior.

High
Archive extract all (zip slip risk)
zipfile.ZipFile(input_file).extractall(output_path)
The workflow extracts an Office archive without member-count or expanded-size limits. A malicious archive can exhaust disk space or processing resources.
High
Archive extract all (zip slip risk) · 2 occurrences
zip_ref.extractall(temp_path)
The workflow extracts an Office archive without member-count or expanded-size limits. A malicious archive can exhaust disk space or processing resources.
High
Archive extract all (zip slip risk)
zip_ref.extractall(temp_dir)
The workflow extracts an Office archive without member-count or expanded-size limits. A malicious archive can exhaust disk space or processing resources.

Risk Factors

⚙️ External commands (50)
🔑 Env variables (4)
🌐 Network access (50)
ooxml.md:237 ooxml.md:321 ooxml.md:322 ooxml.md:327 ooxml.md:328 ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd:2 ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd:4 ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd:2 ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd:3 ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd:4 ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd:5 ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd:7 ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd:8 ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd:9 ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd:10 ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd:2 ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd:4 ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd:2 ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd:4 ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd:3 ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd:4 ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd:5 ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd:6 ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd:7 ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd:8 ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd:10 ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd:12 ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd:14 ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd:16 ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd:3 ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd:4 ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd:5 ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd:7 ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd:3 ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd:4 ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd:5 ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd:6 ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd:7 ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd:9 ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd:11 ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd:13 ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd:3 ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd:4 ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd:5 ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd:7 ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd:8 ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd:3 ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd:4 ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd:5 ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd:6
📁 Filesystem access (50)
ooxml.md:327 ooxml.md:328 ooxml.md:165 ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd:12 ooxml/schemas/microsoft/wml-2010.xsd:3 ooxml/schemas/microsoft/wml-2012.xsd:2 ooxml/schemas/microsoft/wml-2012.xsd:3 ooxml/schemas/microsoft/wml-2018.xsd:2 ooxml/schemas/microsoft/wml-cex-2018.xsd:3 ooxml/schemas/microsoft/wml-cex-2018.xsd:4 ooxml/schemas/microsoft/wml-cid-2016.xsd:2 ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd:2 ooxml/schemas/microsoft/wml-symex-2015.xsd:2 ooxml/scripts/pack.py:22 ooxml/scripts/pack.py:46 ooxml/scripts/pack.py:13 ooxml/scripts/pack.py:65 ooxml/scripts/pack.py:101 ooxml/scripts/pack.py:154 ooxml/scripts/pack.py:67 ooxml/scripts/pack.py:15 ooxml/scripts/pack.py:76 ooxml/scripts/unpack.py:7 ooxml/scripts/unpack.py:17 ooxml/scripts/unpack.py:17 ooxml/scripts/validate.py:25 ooxml/scripts/validation/base.py:347 ooxml/scripts/validation/base.py:349 ooxml/scripts/validation/base.py:878 ooxml/scripts/validation/base.py:886 ooxml/scripts/validation/base.py:879 ooxml/scripts/validation/base.py:890 ooxml/scripts/validation/base.py:891 ooxml/scripts/validation/docx.py:6 ooxml/scripts/validation/docx.py:198 ooxml/scripts/validation/docx.py:7 ooxml/scripts/validation/docx.py:200 ooxml/scripts/validation/docx.py:201 ooxml/scripts/validation/pptx.py:272 ooxml/scripts/validation/redlining.py:6 ooxml/scripts/validation/redlining.py:64 ooxml/scripts/validation/redlining.py:142 ooxml/scripts/validation/redlining.py:7 ooxml/scripts/validation/redlining.py:69 ooxml/scripts/validation/redlining.py:70 scripts/html2pptx.js:809 scripts/inventory.py:311 scripts/inventory.py:311 scripts/inventory.py:1015 scripts/rearrange.py:160
Audited by: claude

Jul 7, 2026, 01:46 AM

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.

56
Files scanned
26,504
Lines analyzed
25
Review items
0
False positives ignored

Confirmed security concerns (1)

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.
Capability review items (20)

These are real local capabilities that may be expected for this skill, so they require review but are not counted as confirmed malicious behavior.

High
Python subprocess.run · 3 occurrences
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) · 2 occurrences
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
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 · 2 occurrences
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 Factors

⚙️ External commands (124)
html2pptx.md:100-114 html2pptx.md:130-142 ooxml/scripts/pack.py:103 ooxml/scripts/validation/redlining.py:153 ooxml/scripts/validation/redlining.py:185 scripts/html2pptx.js:59 scripts/html2pptx.js:60 scripts/html2pptx.js:62 scripts/html2pptx.js:80 scripts/html2pptx.js:81 scripts/html2pptx.js:110 scripts/html2pptx.js:111 scripts/html2pptx.js:460 scripts/html2pptx.js:463 scripts/html2pptx.js:466 scripts/html2pptx.js:469 scripts/html2pptx.js:550 scripts/html2pptx.js:562 scripts/html2pptx.js:566 scripts/html2pptx.js:608 scripts/html2pptx.js:811 scripts/html2pptx.js:921 scripts/html2pptx.js:924 scripts/html2pptx.js:961 scripts/html2pptx.js:973 scripts/thumbnail.py:219 scripts/thumbnail.py:237 SKILL.md:18-21 SKILL.md:21-27 SKILL.md:27-29 SKILL.md:29 SKILL.md:32-33 SKILL.md:33-34 SKILL.md:34-35 SKILL.md:35-36 SKILL.md:36-37 SKILL.md:37-38 SKILL.md:38-39 SKILL.md:39-43 SKILL.md:43 SKILL.md:44 SKILL.md:45 SKILL.md:151-153 SKILL.md:153 SKILL.md:154-157 SKILL.md:157-158 SKILL.md:158-160 SKILL.md:160-162 SKILL.md:162-176 SKILL.md:176-177 SKILL.md:177-178 SKILL.md:178-179 SKILL.md:179-180 SKILL.md:180-188 SKILL.md:188-189 SKILL.md:189-190 SKILL.md:190-195 SKILL.md:195-196 SKILL.md:196-206 SKILL.md:206-230 SKILL.md:230-232 SKILL.md:232-243 SKILL.md:243-245 SKILL.md:245-246 SKILL.md:246-247 SKILL.md:247-249 SKILL.md:249-254 SKILL.md:254-256 SKILL.md:256-258 SKILL.md:258-262 SKILL.md:262-292 SKILL.md:292-298 SKILL.md:298-300 SKILL.md:300 SKILL.md:301 SKILL.md:302 SKILL.md:316 SKILL.md:322-323 SKILL.md:323-324 SKILL.md:324-325 SKILL.md:325 SKILL.md:326 SKILL.md:329-333 SKILL.md:333-361 SKILL.md:361-364 SKILL.md:364-373 SKILL.md:373-378 SKILL.md:378-382 SKILL.md:382-383 SKILL.md:383-385 SKILL.md:385-397 SKILL.md:397-401 SKILL.md:401-403 SKILL.md:403-406 SKILL.md:406-412 SKILL.md:412-414 SKILL.md:414-417 SKILL.md:417 SKILL.md:419-420 SKILL.md:420-421 SKILL.md:421-432 SKILL.md:432-438 SKILL.md:438-445 SKILL.md:445-447 SKILL.md:447-450 SKILL.md:450-452 SKILL.md:452-453 SKILL.md:453 SKILL.md:456-457 SKILL.md:457 SKILL.md:458 SKILL.md:459 SKILL.md:460-463 SKILL.md:463-465 SKILL.md:465-477 SKILL.md:477-478 SKILL.md:478-479 SKILL.md:479-480 SKILL.md:480-481 SKILL.md:481-482 SKILL.md:482-483 SKILL.md:483-484 SKILL.md:482 SKILL.md:483
🔑 Env variables (4)
🌐 Network access (206)
ooxml.md:237 ooxml.md:321 ooxml.md:322 ooxml.md:327 ooxml.md:328 ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd:2 ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd:4 ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd:2 ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd:3 ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd:4 ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd:5 ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd:7 ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd:8 ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd:9 ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd:10 ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd:2 ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd:4 ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd:2 ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd:4 ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd:3 ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd:4 ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd:5 ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd:6 ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd:7 ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd:8 ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd:10 ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd:12 ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd:14 ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd:16 ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd:3 ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd:4 ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd:5 ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd:7 ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd:3 ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd:4 ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd:5 ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd:6 ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd:7 ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd:9 ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd:11 ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd:13 ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd:3 ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd:4 ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd:5 ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd:7 ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd:8 ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd:3 ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd:4 ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd:5 ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd:6 ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd:8 ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd:10 ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd:12 ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd:14 ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd:16 ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd:18 ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd:3 ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd:4 ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd:5 ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd:6 ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd:3 ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd:4 ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd:5 ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd:6 ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd:8 ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd:11 ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd:3 ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd:4 ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd:5 ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd:6 ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd:7 ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd:8 ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd:10 ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd:13 ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd:14 ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd:16 ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd:3 ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd:4 ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd:5 ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd:6 ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd:7 ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd:9 ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd:10 ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd:12 ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd:14 ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd:3 ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd:4 ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd:3 ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd:4 ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd:5 ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd:7 ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd:3 ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd:4 ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd:3 ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd:4 ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd:5 ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd:7 ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd:3 ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd:4 ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd:3 ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd:4 ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd:5 ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd:6 ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd:8 ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd:10 ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd:3 ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd:4 ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd:5 ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd:7 ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd:3 ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd:4 ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd:5 ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd:7 ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd:3 ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd:4 ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd:5 ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd:6 ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd:8 ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd:9 ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd:11 ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd:3 ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd:4 ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd:6 ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd:3 ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd:4 ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd:5 ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd:6 ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd:7 ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd:9 ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd:11 ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd:14 ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd:5 ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd:7 ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd:9 ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd:14 ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd:18 ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd:24 ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd:4 ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd:5 ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd:9 ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd:11 ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd:4 ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd:7 ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd:3 ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd:4 ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd:5 ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd:6 ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd:7 ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd:8 ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd:9 ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd:11 ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd:12 ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd:13 ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd:15 ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd:17 ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd:19 ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd:21 ooxml/schemas/mce/mc.xsd:2 ooxml/schemas/mce/mc.xsd:4 ooxml/schemas/mce/mc.xsd:9 ooxml/schemas/mce/mc.xsd:16 ooxml/schemas/mce/mc.xsd:17 ooxml/schemas/microsoft/wml-2010.xsd:1 ooxml/schemas/microsoft/wml-2010.xsd:2 ooxml/schemas/microsoft/wml-2010.xsd:3 ooxml/schemas/microsoft/wml-2010.xsd:4 ooxml/schemas/microsoft/wml-2010.xsd:5 ooxml/schemas/microsoft/wml-2012.xsd:1 ooxml/schemas/microsoft/wml-2012.xsd:2 ooxml/schemas/microsoft/wml-2012.xsd:3 ooxml/schemas/microsoft/wml-2018.xsd:1 ooxml/schemas/microsoft/wml-2018.xsd:2 ooxml/schemas/microsoft/wml-cex-2018.xsd:1 ooxml/schemas/microsoft/wml-cex-2018.xsd:2 ooxml/schemas/microsoft/wml-cex-2018.xsd:3 ooxml/schemas/microsoft/wml-cex-2018.xsd:4 ooxml/schemas/microsoft/wml-cid-2016.xsd:1 ooxml/schemas/microsoft/wml-cid-2016.xsd:2 ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd:1 ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd:2 ooxml/schemas/microsoft/wml-symex-2015.xsd:1 ooxml/schemas/microsoft/wml-symex-2015.xsd:2 ooxml/scripts/validation/base.py:70 ooxml/scripts/validation/base.py:75 ooxml/scripts/validation/base.py:78 ooxml/scripts/validation/base.py:81 ooxml/scripts/validation/base.py:89 ooxml/scripts/validation/base.py:90 ooxml/scripts/validation/base.py:91 ooxml/scripts/validation/base.py:92 ooxml/scripts/validation/base.py:93 ooxml/scripts/validation/base.py:94 ooxml/scripts/validation/base.py:95 ooxml/scripts/validation/base.py:96 ooxml/scripts/validation/base.py:97 ooxml/scripts/validation/base.py:98 ooxml/scripts/validation/base.py:99 ooxml/scripts/validation/base.py:100 ooxml/scripts/validation/base.py:101 ooxml/scripts/validation/base.py:102 ooxml/scripts/validation/docx.py:18 ooxml/scripts/validation/pptx.py:15 ooxml/scripts/validation/redlining.py:19 scripts/inventory.py:168 scripts/rearrange.py:105 scripts/rearrange.py:116
📁 Filesystem access (54)
ooxml.md:327 ooxml.md:328 ooxml.md:165 ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd:12 ooxml/schemas/microsoft/wml-2010.xsd:3 ooxml/schemas/microsoft/wml-2012.xsd:2 ooxml/schemas/microsoft/wml-2012.xsd:3 ooxml/schemas/microsoft/wml-2018.xsd:2 ooxml/schemas/microsoft/wml-cex-2018.xsd:3 ooxml/schemas/microsoft/wml-cex-2018.xsd:4 ooxml/schemas/microsoft/wml-cid-2016.xsd:2 ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd:2 ooxml/schemas/microsoft/wml-symex-2015.xsd:2 ooxml/scripts/pack.py:22 ooxml/scripts/pack.py:46 ooxml/scripts/pack.py:13 ooxml/scripts/pack.py:65 ooxml/scripts/pack.py:101 ooxml/scripts/pack.py:154 ooxml/scripts/pack.py:67 ooxml/scripts/pack.py:15 ooxml/scripts/pack.py:76 ooxml/scripts/unpack.py:7 ooxml/scripts/unpack.py:17 ooxml/scripts/unpack.py:17 ooxml/scripts/validate.py:25 ooxml/scripts/validation/base.py:347 ooxml/scripts/validation/base.py:349 ooxml/scripts/validation/base.py:878 ooxml/scripts/validation/base.py:886 ooxml/scripts/validation/base.py:879 ooxml/scripts/validation/base.py:890 ooxml/scripts/validation/base.py:891 ooxml/scripts/validation/docx.py:6 ooxml/scripts/validation/docx.py:198 ooxml/scripts/validation/docx.py:7 ooxml/scripts/validation/docx.py:200 ooxml/scripts/validation/docx.py:201 ooxml/scripts/validation/pptx.py:272 ooxml/scripts/validation/redlining.py:6 ooxml/scripts/validation/redlining.py:64 ooxml/scripts/validation/redlining.py:142 ooxml/scripts/validation/redlining.py:7 ooxml/scripts/validation/redlining.py:69 ooxml/scripts/validation/redlining.py:70 scripts/html2pptx.js:809 scripts/inventory.py:311 scripts/inventory.py:311 scripts/inventory.py:1015 scripts/rearrange.py:160 scripts/replace.py:294 scripts/replace.py:296 scripts/thumbnail.py:46 scripts/thumbnail.py:109
Audited by: codex

Jun 30, 2026, 06:27 PM

Static analysis produced many false positives from Markdown code formatting, OOXML schema vocabulary, namespace URLs, and color values. Human review did confirm high-impact archive extraction risks and legitimate external converters that process untrusted presentation files, so publication should wait for mitigation.

56
Files scanned
26,504
Lines analyzed
8
Review items
2
False positives ignored

Confirmed security concerns (3)

High
Unsafe archive extraction of Office files
TRUE_POSITIVE: Multiple helpers call ZipFile.extractall on user-supplied Office archives. A crafted PPTX, DOCX, or XLSX could contain traversal entries that write outside the chosen output directory.
The code directly extracts archives supplied by the user without visible member path validation. This is a classic zip-slip risk and the affected files are part of the documented PPTX workflow.
Medium
External document conversion commands
TRUE_POSITIVE with limited injection risk: The skill runs LibreOffice, Poppler, and git subprocesses on presentation or temporary files. Arguments are passed as arrays, but external parsers process untrusted documents.
The subprocess calls are real and operate on files derived from user workflows. No shell=True or string command construction was found in these representative calls, reducing command injection confidence.
Medium
Privileged dependency installation commands in documentation
TRUE_POSITIVE as an operational risk: The skill documentation recommends sudo apt-get commands for LibreOffice and Poppler. This is expected setup guidance but requires elevated privileges if followed.
The sudo commands are present in documentation, not hidden executable code. They still create a real marketplace warning because users may run them during setup.
Static false positives ignored (2)

These static matches were dismissed by semantic review or matched schema-only tokens, so they are shown for transparency but do not drive the quality score.

Low
No malicious intent confirmed in scanner heuristics
FALSE_POSITIVE GROUP: The critical obfuscation, C2 keyword, weak cryptography, and many Ruby backtick findings are caused by Markdown formatting, OOXML schema names, color values, and namespace URLs. No prompt injection attempt or credential exfiltration intent was found in reviewed files.
Targeted review showed benign documentation, conversion helpers, XML schema metadata, and presentation formatting utilities. The scanner labels match substrings rather than malicious behavior in these examples.
Low
Benign environment and namespace usage
FALSE_POSITIVE GROUP: The reviewed environment access selects a temporary directory, and the hardcoded URLs are OOXML namespace identifiers. These do not show secret access or outbound network behavior.
The process.env access is limited to TMPDIR fallback handling, and namespace URL constants are not fetched. No evidence found for credential exfiltration in the reviewed locations.

Detected Patterns

Unsafe archive extraction of Office filesExternal document conversion commands
Audited by: codex

Feb 24, 2026, 08:11 PM

This is a legitimate PPTX presentation skill. Static analysis findings are false positives: external_commands are documentation examples in markdown files, network URLs are standard OOXML schema references, and weak crypto/C2 keyword flags incorrectly identify color codes and color names. No actual security risks identified. The skill provides safe PowerPoint creation and editing capabilities.

56
Files scanned
26,504
Lines analyzed
5
Review items
0
False positives ignored
Capability review items (2)

These are real local capabilities that may be expected for this skill, so they require review but are not counted as confirmed malicious behavior.

Medium
Documentation Contains Command Examples
The SKILL.md file contains examples of command-line tools like python, pandoc, markitdown. These are documentation examples for users, not dangerous code execution.
Markdown documentation shows example commands for text extraction - legitimate documentation, not actual code execution
Low
OOXML Schema Files Contain URLs
Standard OOXML schema files contain namespace URLs. These are legitimate ISO/ECMA standard schema references, not security concerns.
These are standard XML schema namespace URLs for Office Open XML format - completely legitimate

Risk Factors

⚙️ External commands (1)
🌐 Network access (1)
📁 Filesystem access (1)
Audited by: claude