Back to skill

Security audit

ZM PPTX 检查与审核工具

Security checks for vulnerabilities and agentic risk

Overview

The skill is not plainly malicious, but it needs review because it combines PPTX review with editing/creation and uses a risky LibreOffice native preload workaround plus broad dependency installs.

Review this before installing in sensitive or shared environments. Use it only on trusted presentations or in a contained workspace, avoid running the LibreOffice LD_PRELOAD shim where /tmp is shared or untrusted, pin dependencies in a local environment instead of installing globally, and keep backups before using cleanup or editing workflows.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • 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
Findings (3)

T09 · Insecure Skill Coding Practices

Error
Location
scripts/office/soffice.py:25
Finding

Predictable Shared Library Path Enables LD_PRELOAD Code Execution

Content
View full analysis
dict: env = os.environ.copy() env["SAL_USE_VCLPLUGIN"] = "svp" if _needs_shim(): shim = _ensure_shim() env["LD_PRELOAD"] = str(shim) return env ``` ```python _SHIM_SO = Path(tempfile.gettempdir()) / "lo_socket_shim.so" def _needs_shim() -> bool: try: s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) s.close() return False except OSError: return True def _ensure_shim() -> Path: if _SHIM_SO.exists(): return _SHIM_SO src = Path(tempfile.gettempdir()) / "lo_socket_shim.c" src.write_text(_SHIM_SOURCE) subprocess.run( ["gcc", "-shared", "-fPIC", "-o", str(_SHIM_SO), str(src), "-ldl"], check=True, capture_output=True, ) src.unlink() return _SHIM_SO ``` ### Technical Analysis The LibreOffice compatibility shim uses globally predictable paths in the system temporary directory: - `/tmp/lo_socket_shim.so` - `/tmp/lo_socket_shim.c` The `_ensure_shim()` function treats any pre-existing file at the shared-object path as trusted. It does not verify the file's owner, permissions, type, content, cryptographic digest, or origin. When the runtime determines that an AF_UNIX socket cannot be created, this file is assigned to `LD_PRELOAD` and LibreOffice is launched with it. `LD_PRELOAD` causes the dynamic linker to load the specified shared object into the new process before ordinary dependencies. Constructors and intercepted functions in that object can therefore execute arbitrary native code under the identity of the user running the Skill. The check-then-use sequence is also susceptible to race conditions. Even when the Skill creates the library itself, another local p ...[truncated 1446 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/office/unpack.py:53
Finding

Unbounded Extraction of Untrusted Office Archives Enables Resource Exhaustion

Content
View full analysis
Remediation
View remediation

T08 · Insecure Dependencies

Warning
Location
SKILL.md:228
Finding

Unpinned Global Dependency Installation Creates Supply-Chain Exposure

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (51)

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

Use of DOCX comparison logic and subprocess tools like git diff is inconsistent with a PPTX-only inspection description and indicates a broader command-execution surface than users may expect. That combination raises both transparency and operational risk, especially when shell execution is involved in processing untrusted office content.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
94% confidence
Finding

Use of DOCX comparison logic and subprocess tools like git diff is inconsistent with a PPTX-only inspection description and indicates a broader command-execution surface than users may expect. That combination raises both transparency and operational risk, especially when shell execution is involved in processing untrusted office content.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

Use of DOCX comparison logic and subprocess tools like git diff is inconsistent with a PPTX-only inspection description and indicates a broader command-execution surface than users may expect. That combination raises both transparency and operational risk, especially when shell execution is involved in processing untrusted office content.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

Use of DOCX comparison logic and subprocess tools like git diff is inconsistent with a PPTX-only inspection description and indicates a broader command-execution surface than users may expect. That combination raises both transparency and operational risk, especially when shell execution is involved in processing untrusted office content.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
90% confidence
Finding

Use of DOCX comparison logic and subprocess tools like git diff is inconsistent with a PPTX-only inspection description and indicates a broader command-execution surface than users may expect. That combination raises both transparency and operational risk, especially when shell execution is involved in processing untrusted office content.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
91% confidence
Finding

Use of DOCX comparison logic and subprocess tools like git diff is inconsistent with a PPTX-only inspection description and indicates a broader command-execution surface than users may expect. That combination raises both transparency and operational risk, especially when shell execution is involved in processing untrusted office content.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

Use of DOCX comparison logic and subprocess tools like git diff is inconsistent with a PPTX-only inspection description and indicates a broader command-execution surface than users may expect. That combination raises both transparency and operational risk, especially when shell execution is involved in processing untrusted office content.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
90% confidence
Finding

Use of DOCX comparison logic and subprocess tools like git diff is inconsistent with a PPTX-only inspection description and indicates a broader command-execution surface than users may expect. That combination raises both transparency and operational risk, especially when shell execution is involved in processing untrusted office content.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
89% confidence
Finding

Use of DOCX comparison logic and subprocess tools like git diff is inconsistent with a PPTX-only inspection description and indicates a broader command-execution surface than users may expect. That combination raises both transparency and operational risk, especially when shell execution is involved in processing untrusted office content.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

Use of DOCX comparison logic and subprocess tools like git diff is inconsistent with a PPTX-only inspection description and indicates a broader command-execution surface than users may expect. That combination raises both transparency and operational risk, especially when shell execution is involved in processing untrusted office content.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

Use of DOCX comparison logic and subprocess tools like git diff is inconsistent with a PPTX-only inspection description and indicates a broader command-execution surface than users may expect. That combination raises both transparency and operational risk, especially when shell execution is involved in processing untrusted office content.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The tutorial immediately demonstrates creating a new presentation and writing it to disk, which conflicts with the skill’s stated purpose of inspecting and reviewing existing PPTX files. In an agent setting, capability drift like this is dangerous because it can cause the agent to generate or overwrite artifacts instead of performing read-only analysis, expanding the skill’s effective permissions and enabling unintended side effects.

Content

No source excerpt is available for this finding.

Env Variable Harvesting

High
Category
Data Exfiltration
Confidence
60% confidence
Finding

Code enumerates, copies, or searches environment variables for secrets. Bulk environment access can collect credentials unrelated to the skill's stated purpose.

Content

Scanner excerpt · scripts/office/soffice.py (reported line 25)May include surrounding context.

python
def get_soffice_env() -> dict:
    env = os.environ.copy()
    env["SAL_USE_VCLPLUGIN"] = "svp"

    if _needs_shim():

Context-Inappropriate Capability

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

Setting LD_PRELOAD to inject a custom shared object into the LibreOffice process gives this helper arbitrary code-execution influence over the child process. That is a powerful and non-transparent capability for a PPTX review tool, and if the shim path or build step is tampered with, the mechanism becomes a straightforward execution vector.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

Building a shared object with gcc on demand is an unnecessary privileged capability for the stated purpose and pairs directly with later code injection via LD_PRELOAD. In skill contexts that process untrusted office documents, adding a compiler toolchain dependency and native build path raises both compromise impact and review difficulty.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
92% confidence
Finding

The skill invokes shell commands and clearly implies file read/write and environment-dependent tooling, yet it declares no explicit tool scope or permission boundaries. In an agent setting, this increases the attack surface because the runtime may grant broader capabilities than users expect, enabling unintended filesystem changes or command execution during routine use.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The file begins with a Chinese-only description, which imposes a language choice on users without any visible opt-in or explanation that the skill is intended only for a Chinese-speaking or region-specific context. Under the stated policy, forcing a specific language without user choice is a natural-language policy violation.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

Large portions of the document teach slide creation and editing features—shapes, images, tables, charts, masters, and styling—rather than inspection or review. This broadens the operational scope of the skill beyond its declared purpose, which can mislead downstream agents into invoking content-generation behaviors in contexts where only analysis should occur.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The tutorial shows loading images directly from external URLs, introducing network access into a skill advertised for PPTX inspection/review. In an agent environment, undocumented outbound requests can leak metadata, violate sandbox assumptions, or fetch untrusted remote content unexpectedly.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The React/react-icons/Sharp pipeline adds a nontrivial content-generation and image-processing toolchain unrelated to PPTX inspection/review. Extra dependencies and rendering paths increase attack surface, create supply-chain and execution risk, and encourage use of the skill for generation rather than analysis.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The module docstring explicitly states it adds a new slide to an unpacked PPTX directory, and the implementation writes new slide XML, relationship files, and updates package metadata. The manifest description emphasizes inspection/review-oriented operations and does not mention authoring or in-place structural mutation such as creating slides.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
86% confidence
Finding

This code permanently deletes slide XML and related .rels files using unlink(). Although the module docstring says the script 'removes' unreferenced files, there is no confirmation prompt or inline warning immediately before these destructive actions, which could lead to unintended data loss if the script is run on the wrong directory.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
83% confidence
Finding

This function unlinks files and removes the directory directly. While the top-level docstring mentions removing the [trash] directory, there is no explicit runtime disclosure or safeguard at the point of deletion, so users may not appreciate that contents are irreversibly removed.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

Several functions remove .rels files, media, themes, notes, and other resources via unlink(), making broad destructive changes to the unpacked PPTX tree. The script describes its purpose, but it lacks a strong user warning, dry-run behavior, or confirmation step that would disclose the scope and irreversibility of the cleanup.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

This code file performs a direct file write to the input document XML, modifying user data in place. Although the module docstring explains the purpose, there is no confirmation prompt, logging, or explicit warning at the point of the destructive write that the original extracted document content will be changed.

Content

No source excerpt is available for this finding.