Versioned security assessment

Report ID: SA-64CA8AF0

7/8/2026, 12:49:59 PM

docx security assessment v3

Skill Security Certification Report

Audit History
Audit model: codex Historical report
Skill name
docx
Version
v3
Maintainer
ZhanlinCui
Coverage
58 Files scanned · 24,694 Lines analyzed
Policy version
Unavailable

Confirmed finding summary

No confirmed security findings

The completed audit recorded no confirmed security findings. This is not proof that the Skill has no side effects.

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 findings are false positives from OOXML namespace URLs, schema imports, Markdown examples, and Word template XML. Confirmed risks remain in archive extraction, privileged install instructions, global package installation, and local command execution for document conversion or validation.

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

58 Files scanned · 24,694 Lines analyzed

20 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 224 evidence locations

Filesystem access

May read or write local files.

Observed in 56 evidence locations

Env variables

May read values from the process environment.

Not recorded by this audit

External commands

May invoke commands or programs outside the Skill.

Observed in 49 evidence locations

Capability review items (20)
High
Python subprocess.run
result = subprocess.run(
pack.py invokes LibreOffice through subprocess.run on a document produced by the workflow. shell=False limits injection, but it still runs an external parser on user-controlled files.
High
Archive extract all (zip slip risk)
zipfile.ZipFile(input_file).extractall(output_path)
The code calls ZipFile.extractall on Office archives without validating member paths. A crafted archive could write files outside the intended extraction directory.
High
Archive extract all (zip slip risk)
zip_ref.extractall(temp_path)
The code calls ZipFile.extractall on Office archives without validating member paths. A crafted archive could write files outside the intended extraction directory.
High
Archive extract all (zip slip risk)
zip_ref.extractall(temp_dir)
The code calls ZipFile.extractall on Office archives without validating member paths. A crafted archive could write files outside the intended extraction directory.
High
Archive extract all (zip slip risk)
zip_ref.extractall(temp_path)
The code calls ZipFile.extractall on Office archives without validating member paths. A crafted archive could write files outside the intended extraction directory.
High
Ruby/shell backtick execution
- **pandoc**: `sudo apt-get install pandoc` (for text extraction)
This inline command is a sudo package installation instruction. It asks for privileged system changes rather than a normal document-only action.
High
Ruby/shell backtick execution
- **LibreOffice**: `sudo apt-get install libreoffice` (for PDF conversion)
This inline command is a sudo package installation instruction. It asks for privileged system changes rather than a normal document-only action.
High
Ruby/shell backtick execution
- **Poppler**: `sudo apt-get install poppler-utils` (for pdftoppm to convert PDF to images)
This inline command is a sudo package installation instruction. It asks for privileged system changes rather than a normal document-only action.
High
sudo privilege escalation
- **pandoc**: `sudo apt-get install pandoc` (for text extraction)
The skill instructs users to run sudo apt-get install commands. That requires elevated privileges and expands the system trust boundary.
High
sudo privilege escalation
- **LibreOffice**: `sudo apt-get install libreoffice` (for PDF conversion)
The skill instructs users to run sudo apt-get install commands. That requires elevated privileges and expands the system trust boundary.
High
sudo privilege escalation
- **Poppler**: `sudo apt-get install poppler-utils` (for pdftoppm to convert PDF to images)
The skill instructs users to run sudo apt-get install commands. That requires elevated privileges and expands the system trust boundary.
Medium
Python archive libraries
zipfile.ZipFile(input_file).extractall(output_path)
This archive operation is part of a path that extracts user-supplied Office files. It should validate member paths before extraction.
Medium
Python archive libraries
with zipfile.ZipFile(self.original_file, "r") as zip_ref:
This archive operation is part of a path that extracts user-supplied Office files. It should validate member paths before extraction.
Medium
Python archive libraries
with zipfile.ZipFile(self.original_file, "r") as zip_ref:
This archive operation is part of a path that extracts user-supplied Office files. It should validate member paths before extraction.
Medium
Python archive libraries
with zipfile.ZipFile(self.original_docx, "r") as zip_ref:
This archive operation is part of a path that extracts user-supplied Office files. It should validate member paths before extraction.
Medium
Ruby/shell backtick execution
`python ooxml/scripts/unpack.py <office_file> <output_directory>`
This line instructs the agent to run local document-processing scripts on user-selected Office files. That is expected functionality but still executes code and touches the filesystem.
Medium
Ruby/shell backtick execution
2. Unpack the document: `python ooxml/scripts/unpack.py <office_file> <output_directory>`
This line instructs the agent to run local document-processing scripts on user-selected Office files. That is expected functionality but still executes code and touches the filesystem.
Medium
Ruby/shell backtick execution
4. Pack the final document: `python ooxml/scripts/pack.py <input_directory> <office_file>`
This line instructs the agent to run local document-processing scripts on user-selected Office files. That is expected functionality but still executes code and touches the filesystem.
Medium
Ruby/shell backtick execution
- **Unpack the document**: `python ooxml/scripts/unpack.py <file.docx> <dir>`
This line instructs the agent to run local document-processing scripts on user-selected Office files. That is expected functionality but still executes code and touches the filesystem.
Medium
Ruby/shell backtick execution
- **docx**: `npm install -g docx` (for creating new documents)
This line instructs a global npm package installation. It modifies the execution environment and should require explicit user consent.

Risk findings

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

No confirmed security findings were recorded for this completed audit.

Remediation

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

  1. FIX-001
    High
    Unsafe archive extraction of Office files
    Replace extractall with safe extraction that rejects absolute paths, parent traversal, symlinks, and writes outside the target directory.
  2. FIX-002
    High
    Privileged and global package installation guidance
    Remove sudo and global npm install commands from normal workflows. Ask users to install dependencies outside the skill runtime.
  3. FIX-003
    Medium
    External document conversion and validation commands
    Require explicit user approval before running LibreOffice, Pandoc, Git, or Poppler, and keep timeouts and isolated work directories.
  4. FIX-004
    Medium
    Document save operations can overwrite destination directories
    Document safe output path rules and preserve backups before copytree writes modified OOXML content.

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