docx

ISSUES FOUND max severity HIGHSkillSpector Caution 35 registry anthropic last scanned 1 scan

4 findings (1 high, 2 medium, 1 low), mainly prompt injection, resource abuse, command injection. Most recent scan 2026-02-07.

This skill presents MODERATE security risks. The primary concern is the HIGH severity indirect prompt injection vulnerability created by mandatory full-file reading directives that force unconditional trust of reference file contents. Additional MEDIUM severity issues include unsafe XML parsing patterns, unbounded file system operations, and potential command injection risks in subprocess calls. The skill performs complex document manipulation operations that require careful validation and resource limits. While the code uses some security libraries (defusedxml), the implementation has gaps in validation, resource limits, and error handling that could be exploited.

Scanner's overall assessment (LLM analyzer)

Second scanner: NVIDIA SkillSpector

Independent static run, no language model, over the same files as the Cisco scan above. How the two scanners compare across the whole corpus: Two scanners, one corpus.

What this skill does

Comprehensive document creation, editing, and analysis with support for tracked changes, comments, formatting preservation, and text extraction. When Claude needs to work with professional documents (.docx files) for: (1) Creating new documents, (2) Modifying or editing content, (3) Working with tracked changes, (4) Adding comments, or any other document tasks

Package
59 files, 1.1 MB
SKILL.md
1343 words, 12+ sections
Code
Python (11)
License
Proprietary. LICENSE.txt has complete terms

SKILL.md covers: DOCX creation, editing, and analysis · Overview · Workflow Decision Tree · Reading/Analyzing Content · Creating New Document · Editing Existing Document · Reading and analyzing content · Text extraction · Convert document to markdown with tracked changes · Options: --track-changes=accept/reject/all · Raw XML access · Creating a new Word document

Findings

HIGH Indirect Prompt Injection via Mandatory Full File Reading Prompt Injectionllm

The SKILL.md instructions contain explicit directives that force the agent to read entire reference files without any range limits: 'MANDATORY - READ ENTIRE FILE: Read [`docx-js.md`](docx-js.md) (~500 lines) completely from start to finish. NEVER set any range limits when reading this file.' and similar for ooxml.md (~600 lines). This creates a transitive trust vulnerability where malicious content embedded in these reference files would be processed without scrutiny. The emphatic language ('MANDATORY', 'NEVER', all caps) attempts to override the agent's normal safety behaviors and force unconditional trust of file contents.

SKILL.md

'**MANDATORY - READ ENTIRE FILE**: Read [`docx-js.md`](docx-js.md) (~500 lines) completely from start to finish. **NEVER set any range limits when reading this file.**' and '**MANDATORY - READ ENTIRE FILE**: Read [`ooxml.md`](ooxml.md) (~600 lines) completely from start to finish. **NEVER set any range limi'
Remediation: Remove the mandatory full-file reading directives. Replace with normal file references that allow the agent to read files with appropriate safety checks and range limits. Change to: 'Refer to docx-js.md for detailed syntax and examples' without forcing unconditional full-file reading.
MEDIUM Unbounded File System Operations Resource Abusellm

The unpack.py script uses rglob to recursively process all XML files in the unpacked directory without any limits: 'xml_files = list(output_path.rglob("*.xml")) + list(output_path.rglob("*.rels"))'. A malicious Office file could contain thousands of XML files or deeply nested directory structures, causing resource exhaustion. The script processes every file found without size or count limits.

ooxml/scripts/unpack.py

xml_files = list(output_path.rglob('*.xml')) + list(output_path.rglob('*.rels'))
for xml_file in xml_files:
    content = xml_file.read_text(encoding='utf-8')
    dom = defusedxml.minidom.parseString(content)
    xml_file.write_bytes(dom.toprettyxml(indent='  ', encoding='ascii'))
Remediation: Add limits on the number of files processed, maximum file sizes, and directory depth. Implement timeouts for the parsing loop. Example: 'if len(xml_files) > 1000: raise ValueError("Too many XML files")' and check individual file sizes before parsing.
MEDIUM Command Injection Risk in Subprocess Calls Command Injectionllm

The validation/redlining.py file uses subprocess.run with shell=False but constructs commands from file paths that could contain malicious characters. While shell=False prevents shell injection, the code doesn't validate that file paths are safe: 'subprocess.run(["pandoc", "--track-changes=all", str(original_docx), "-o", str(original_md)], capture_output=True, text=True, check=True)'. If file paths contain special characters or are manipulated, this could lead to unexpected behavior.

ooxml/scripts/validation/redlining.py

subprocess.run(["pandoc", "--track-changes=all", str(original_docx), "-o", str(original_md)], capture_output=True, text=True, check=True)
Remediation: Validate and sanitize file paths before passing to subprocess. Use Path.resolve() to normalize paths and check that they don't contain unexpected characters. Add path traversal checks to ensure files are within expected directories.
LOW Temporary File Cleanup Not Guaranteed Data Exfiltrationllm

Multiple scripts create temporary directories and files but don't guarantee cleanup on error. In pack.py and validation scripts, temporary directories are created with tempfile.mkdtemp() but cleanup only happens in the success path. If an exception occurs, temporary files may be left on disk, potentially containing sensitive document content.

ooxml/scripts/pack.py

temp_dir = tempfile.mkdtemp()
# ... operations ...
shutil.rmtree(temp_dir)  # Only called if no exception
Remediation: Use context managers or try-finally blocks to ensure temporary file cleanup: 'with tempfile.TemporaryDirectory() as temp_dir:' or wrap operations in try-finally to guarantee shutil.rmtree() is called even on error.

What is in the package

59 files, 1.1 MB. Show the list.
FileKindSize
LICENSE.txtdoc1.4 KB
SKILL.mddoc9.9 KB
docx-js.mddoc16 KB
ooxml.mddoc23 KB
scripts/__init__.pyscript65 B
scripts/document.pyscript49 KB
scripts/utilities.pyscript13 KB
ooxml/scripts/pack.pyscript5.5 KB
ooxml/scripts/unpack.pyscript1.0 KB
ooxml/scripts/validate.pyscript1.9 KB
scripts/templates/comments.xmlconfig2.6 KB
scripts/templates/commentsExtended.xmlconfig2.6 KB
scripts/templates/commentsExtensible.xmlconfig2.7 KB
scripts/templates/commentsIds.xmlconfig2.6 KB
scripts/templates/people.xmlconfig147 B
ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsdother73 KB
ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsdother6.8 KB
ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsdother50 KB
ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsdother624 B
ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsdother148 KB
ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsdother1.2 KB
ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsdother8.7 KB
ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsdother14 KB
ooxml/schemas/ISO-IEC29500-4_2016/pml.xsdother82 KB
ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsdother1.2 KB
ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsdother7.2 KB
ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsdother6.2 KB
ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsdother1.2 KB
ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsdother880 B
ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsdother2.5 KB
ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsdother3.4 KB
ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsdother7.3 KB
ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsdother23 KB
ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsdother1.3 KB
ooxml/schemas/ISO-IEC29500-4_2016/sml.xsdother237 KB
ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsdother26 KB
ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsdother25 KB
ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsdother535 B
ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsdother5.6 KB
ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsdother3.9 KB
ooxml/schemas/ISO-IEC29500-4_2016/wml.xsdother167 KB
ooxml/schemas/ISO-IEC29500-4_2016/xml.xsdother4.5 KB
ooxml/schemas/mce/mc.xsdother3.1 KB
ooxml/schemas/microsoft/wml-2010.xsdother26 KB
ooxml/schemas/microsoft/wml-2012.xsdother3.7 KB
ooxml/schemas/microsoft/wml-2018.xsdother901 B
ooxml/schemas/microsoft/wml-cex-2018.xsdother1.7 KB
ooxml/schemas/microsoft/wml-cid-2016.xsdother1002 B
ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsdother600 B
ooxml/schemas/microsoft/wml-symex-2015.xsdother745 B
ooxml/scripts/validation/__init__.pyscript336 B
ooxml/scripts/validation/base.pyscript39 KB
ooxml/scripts/validation/docx.pyscript9.8 KB
ooxml/scripts/validation/pptx.pyscript12 KB
ooxml/scripts/validation/redlining.pyscript11 KB
ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsdother1.9 KB
ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsdother2.5 KB
ooxml/schemas/ecma/fouth-edition/opc-digSig.xsdother2.8 KB
ooxml/schemas/ecma/fouth-edition/opc-relationships.xsdother1.3 KB

External hosts referenced

schemas.openxmlformats.org schemas.microsoft.com purl.org dublincore.org www.anthropic.com github.com www.google.com

Hostnames that appear in the skill's files. Referencing a host is not a finding; compare against the findings above and the skill's stated purpose.

Package contents recorded 2026-10-22 at commit 69c0b1a06741. The scan above ran against the version current at scan time; the two can differ if the skill has since been updated.

What we checked

What we did not check

Sources