# 1091 Security Audit 40f90ca4

> Security Audit Report

- Skill: `tools-only/1091-security-audit-40f90ca4` (Agent Skill, multi-file: 3 files)
- Install (CLI): `npx skillmds@latest add tools-only/1091-security-audit-40f90ca4`
- Raw SKILL.md: https://api.skillmd.com/api/skills/tools-only/1091-security-audit-40f90ca4/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Security
- Author: tools-only (https://skillmd.com/u/tools-only)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/tools-only/1091-security-audit-40f90ca4

---

# Security Audit Report

**Last Audited:** 2026-01-04
**Audited By:** Claude (Opus 4.5) + Human Review
**Status:** Passed - No security issues found

---

## Overview

This document provides a security audit of all scripts in this repository. All scripts have been reviewed for:

- Command injection vulnerabilities
- Dangerous shell commands (`rm -rf`, `sudo`, etc.)
- Unauthorized network calls / data exfiltration
- `eval()` / `exec()` misuse
- Credential harvesting

**Result:** All scripts are safe for use.

---

## Scripts by Skill

### create-visualization

| Script | Purpose | Safety Notes |
|--------|---------|--------------|
| `scripts/flowchart.py` | Generate flowchart diagrams using matplotlib | Pure visualization, no I/O beyond file save |
| `scripts/manim_physics.py` | Create physics animations (3Blue1Brown style) | Uses manim library only |
| `scripts/math_plots.py` | Plot mathematical functions | Uses matplotlib/numpy only |
| `scripts/physics_fbd.py` | Draw Free Body Diagrams | Pure visualization |

### deep-research

| Script | Purpose | Safety Notes |
|--------|---------|--------------|
| `scripts/validate_report.py` | Validate research report quality | Pure Python, no external calls |

### docx

| Script | Purpose | Safety Notes |
|--------|---------|--------------|
| `scripts/document.py` | Create/modify Word documents | Uses python-docx library |
| `scripts/utilities.py` | XML editing utilities for OOXML | Uses defusedxml (safe XML parser) |
| `ooxml/scripts/pack.py` | Pack directory into .docx file | subprocess: `soffice --headless` for validation only |
| `ooxml/scripts/unpack.py` | Unpack .docx to directory | Uses zipfile + defusedxml |
| `ooxml/scripts/validate.py` | Validate OOXML structure | Pure validation, no modifications |
| `ooxml/scripts/validation/redlining.py` | Validate tracked changes | subprocess: `git diff` for text comparison |

### pdf

| Script | Purpose | Safety Notes |
|--------|---------|--------------|
| `scripts/fill_pdf_form_with_annotations.py` | Fill PDF forms using annotations | Uses pypdf library only |
| `scripts/fill_fillable_fields.py` | Fill fillable PDF form fields | Uses pypdf library only |
| `scripts/extract_form_field_info.py` | Extract form field metadata | Read-only, uses pypdf |

### pptx

| Script | Purpose | Safety Notes |
|--------|---------|--------------|
| `scripts/replace.py` | Replace text in PowerPoint slides | Uses python-pptx library |
| `scripts/inventory.py` | Extract text inventory from slides | Read-only analysis |
| `scripts/thumbnail.py` | Generate slide thumbnail grids | subprocess: `soffice`, `pdftoppm` for image conversion |
| `scripts/html2pptx.js` | Convert HTML to PowerPoint slides | Uses playwright for rendering, pptxgenjs for output |
| `ooxml/scripts/pack.py` | Pack directory into .pptx file | subprocess: `soffice --headless` for validation |
| `ooxml/scripts/unpack.py` | Unpack .pptx to directory | Uses zipfile + defusedxml |

### xlsx

| Script | Purpose | Safety Notes |
|--------|---------|--------------|
| `recalc.py` | Recalculate Excel formulas | subprocess: `soffice --headless` to run LibreOffice macro |

### skill-creator

| Script | Purpose | Safety Notes |
|--------|---------|--------------|
| `scripts/init_skill.py` | Initialize new skill directory structure | Creates files/folders only, no execution |

---

## Subprocess Calls Analysis

All subprocess calls use **array-based commands** (not `shell=True`), preventing command injection:

```python
# Safe pattern used throughout (no shell injection possible)
subprocess.run(['soffice', '--headless', '--convert-to', 'pdf', filename])

# NOT used (would be vulnerable)
subprocess.run(f'soffice --headless {filename}', shell=True)  # NEVER USED
```

| Script | Command | Purpose |
|--------|---------|---------|
| `xlsx/recalc.py` | `soffice --headless` | Recalculate Excel formulas via LibreOffice |
| `pptx/scripts/thumbnail.py` | `soffice`, `pdftoppm` | Convert PPTX to images |
| `docx/ooxml/scripts/pack.py` | `soffice --headless` | Validate document structure |
| `pptx/ooxml/scripts/pack.py` | `soffice --headless` | Validate document structure |
| `docx/.../redlining.py` | `git diff` | Compare text changes |
| `pptx/.../redlining.py` | `git diff` | Compare text changes |

---

## What We Verified Does NOT Exist

- No `eval()` or `exec()` with user input
- No `rm -rf` or destructive file operations
- No `curl | bash` or remote code execution
- No hardcoded credentials or API keys
- No network calls that exfiltrate data
- No obfuscated or encrypted code

---

## External Dependencies

All scripts use well-known, trusted libraries:

| Library | Used By | Purpose |
|---------|---------|---------|
| `defusedxml` | docx, pptx | Safe XML parsing (prevents XXE attacks) |
| `pypdf` | pdf | PDF manipulation |
| `python-docx` | docx | Word document handling |
| `python-pptx` | pptx | PowerPoint handling |
| `openpyxl` | xlsx | Excel file handling |
| `matplotlib` | create-visualization | Chart/diagram generation |
| `manim` | create-visualization | Animation rendering |
| `playwright` | pptx | Browser automation for HTML rendering |
| `pptxgenjs` | pptx | PowerPoint generation (Node.js) |

---

## How to Verify

You can verify this audit yourself:

```bash
# Search for potentially dangerous patterns
grep -r "eval\|exec\|subprocess.*shell=True\|rm -rf\|curl.*\|" --include="*.py" .

# Check all subprocess calls
grep -r "subprocess" --include="*.py" -A 3 .

# Verify no network calls in Python scripts
grep -r "requests\|urllib\|http.client" --include="*.py" .
```

---

## Disclaimer

This audit covers the scripts as of the audit date. Always review code before running it in sensitive environments. If you find any security issues, please report them via GitHub Issues.

