Back to skill

Security audit

Pdf To Word

Security checks for vulnerabilities and agentic risk

Overview

This is a straightforward PDF-to-Word conversion skill with disclosed local file processing and no evidence of hidden data access, persistence, exfiltration, or destructive behavior.

Install only in an environment where you are comfortable adding the listed Python conversion libraries, preferably in a virtual environment with pinned versions. Use it only on PDFs you are authorized to access, and confirm the request is specifically PDF-to-Word conversion when the trigger phrase is ambiguous.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (1)

T08 · Insecure Dependencies

Warning
Location
package.json:30
Finding

Unpinned Python Dependencies and Cross-Ecosystem Dependency Declaration

Content
View full analysis

Vulnerability Details

File Locations:

  • package.json:30-36
  • SKILL.md:94-103
  • README.md:68-74
  • CLAUDE.md:31-35
  • VERIFICATION_REPORT.md:102-105

Vulnerability Type: T08: Insecure Dependencies
Risk Level: Medium

Vulnerable Code

package.json:30-36

json
"dependencies": {
  "pdf2docx": ">=0.5.0",
  "python-docx": ">=0.8.10",
  "PyMuPDF": ">=1.19.0"
},
"peerDependencies": {
  "openclaw": ">=1.0.0"
}

SKILL.md:94-103

bash
pip install pdf2docx python-docx PyMuPDF
bash
"C:/Users/CXX641/.workbuddy/binaries/python/versions/3.13.12/python.exe" -m pip install pdf2docx python-docx

README.md:68-74

bash
pip install pdf2docx python-docx PyMuPDF

CLAUDE.md:31-35

bash
pip install pdf2docx python-docx PyMuPDF

VERIFICATION_REPORT.md:102-105

markdown
1. First use requires dependency installation: `pip install pdf2docx python-docx PyMuPDF`

Technical Analysis

The installation documentation directs users to install Python packages without exact version pins or cryptographic hashes. Consequently, dependency resolution selects the newest release satisfying the resolver at installation time rather than a fixed, reviewed artifact. A future compromised, malicious, or incompatible release could therefore become part of the effective Skill without any change to this repository.

The manifest also declares Python package names under the npm dependencies field. npm and Python Package Index dependency namespaces are independent. A package installer that processes package.json may resolve same-named npm packages instead of the intended Python packages. This creates unnecessary exposure to dependency confusion, namespace substitution, or unintended packages from the wrong ecosystem.

The broad minimum-version constraints further prevent reproducible installations:

json
"pdf2docx": ">=0.5.0"

Such constraints permit all future versions rather than limiting resolution to versions that were ...[truncated 2030 chars]

Remediation
View remediation

Remediation Suggestions

  1. Remove Python libraries from npm dependency metadata:
json
"dependencies": {}

If no JavaScript runtime dependencies are required, omit the field entirely.

  1. Create a dedicated Python requirements file containing exact, reviewed versions:
text
pdf2docx==0.5.13
python-docx==REVIEWED_VERSION
PyMuPDF==REVIEWED_VERSION
  1. Generate and record cryptographic hashes for every package and transitive dependency, then enforce them during installation:
bash
python -m pip install --require-hashes -r requirements.txt
  1. Use a lock-generation tool such as pip-compile, Poetry, or uv to pin the complete transitive dependency graph. Commit the resulting lock file to the repository.

  2. Configure installations to use an explicitly trusted package index. In enterprise deployments, prefer an internally controlled registry or package mirror containing reviewed artifacts.

  3. Update every installation example in SKILL.md, README.md, CLAUDE.md, and VERIFICATION_REPORT.md to use the locked requirements file instead of installing unconstrained package names directly:

bash
python -m pip install --require-hashes -r requirements.txt
  1. Install the dependencies in a dedicated virtual environment with only the filesystem permissions required to read the source PDF and write the destination DOCX.

  2. Add automated dependency scanning and scheduled review of pinned versions. Version updates should be explicit repository changes that undergo testing and security review before release.

Vulnerability Patterns
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (6)

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The activation trigger includes the generic phrase "转换PDF" (convert PDF), which can match many unrelated PDF tasks beyond PDF-to-Word conversion, causing the wrong skill to auto-activate. In an agent environment, overly broad routing can lead to unintended execution of local file-processing commands on user-supplied paths, increasing the chance of misuse or accidental data handling.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

This code's natural-language interface is entirely in Chinese, including the module description, usage text, and runtime messages, and it does not provide any user opt-in or alternative locale. Under the policy, forcing a specific language without choice can be a natural-language policy violation unless the regional constraint is explicitly documented and justified.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
94% confidence
Finding

The file presents all user-facing instructions and descriptions in Chinese, which effectively forces a specific language for use of the skill. Under the policy, language constraints should either offer user choice or be explicitly documented as a justified locale-specific limitation.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
89% confidence
Finding

The entire skill documentation is written in Chinese, including the description and usage guidance, with no indication that language is selectable or that the skill is intended only for a Chinese-language audience. Under the policy, forcing a specific language without user opt-in can be a natural-language policy violation.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
80% confidence
Finding

This markdown file contains user-facing instructions and report content primarily in Chinese, while also embedding English console output, but it does not state that the skill is intended for a Chinese-speaking audience or provide any opt-in language choice. Under the language/locale policy, forcing a specific language without user choice can be a natural-language policy issue.

Content

No source excerpt is available for this finding.

Unverifiable Dependency: openclaw has 16 known advisory(ies) (CVE-2026-53846 (OpenClaw: Workspace .env npm_execpath could influence bundled runtime dependency); CVE-2026-32064 (OpenClaw's andbox browser noVNC observer lacked VNC authentication); CVE-2026-32006 (OpenClaw has a BlueBubbles group allowlist mismatch via DM pairing-store fallbac) +13 more), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
95% confidence
Finding

The manifest declares a peer dependency on openclaw using a broad range (>=1.0.0) rather than a pinned or constrained safe version, so installations may resolve to releases affected by known advisories. In a skill package, this creates supply-chain uncertainty: the package itself does not prove a vulnerable version will be installed, but it fails to prevent vulnerable ones from being selected.

Content

No source excerpt is available for this finding.