Back to skill

Security audit

图纸解析

Security checks for vulnerabilities and agentic risk

Overview

This appears to be a local drawing parser, but it materially overstates what it can parse and uses underspecified local file handling and dependency installation for potentially sensitive drawings.

Review before installing. Use this only in an isolated, least-privileged environment with copies of drawings, expect incomplete DWG/OCR/table extraction, and pin or lock dependencies before processing confidential building plans. Check the output directory because parsed drawing content is saved locally.

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
requirements.txt:2
Finding

Unpinned and Unverified Third-Party Dependencies

Content
View full analysis
=1.23.0 ezdxf>=1.4.0 openpyxl>=3.1.0 numpy>=1.24.0 matplotlib>=3.7.0 ``` `SKILL.md:105`: ```bash pip install pymupdf ezdxf openpyxl numpy matplotlib ``` `SKILL.md:122`: ```bash pip install rapidocr ``` `SKILL.md:125`: ```bash pip install onnxruntime opencv-python-headless ``` `README.md:30,33,35`: ```bash pip install -r requirements.txt pip install rapidocr pip install onnxruntime opencv-python-headless ``` ### Technical Analysis The project specifies dependencies using unrestricted direct installation commands or lower-bound-only version constraints. It does not provide an exact dependency lock file, package hashes, upper version bounds, or an enforced trusted package index. Consequently, installation can resolve package releases that were not reviewed with this Skill. Python packages may execute package-controlled code during installation, and their modules execute code when imported by the parsers. A compromised future release, compromised package-maintainer account, malicious transitive dependency, or unexpected incompatible release could therefore introduce code into the Agent environment. The affected dependencies are directly imported by the runtime, including PyMuPDF, `ezdxf`, NumPy, and optional OCR packages. This makes dependency integrity part of the runtime trust boundary. ### Attack Path 1. An attacker compromises a dependency release, maintainer account, distribution channel, or transitive dependency. 2. The attacker publishes a malicious version satisfying an open constraint such as `pymupdf>=1.23.0`, or compromises a package installed without any version constraint. 3. An operator follows the documented installation procedure using `pip i ...[truncated 1261 chars]
Remediation
View remediation
ezdxf== openpyxl== numpy== matplotlib== ``` 2. Generate a lock file that includes all transitive dependencies and SHA-256 hashes. Enforce it during installation with: ```bash python -m pip install --require-hashes -r requirements.lock ``` 3. Pin optional OCR dependencies in dedicated lock files rather than documenting unconstrained `pip install` commands. 4. Configure pip to use an explicitly trusted package index and prevent unintended index fallback or dependency-confusion sources. 5. Review dependency provenance, release signatures where available, vulnerability advisories, and transitive dependency changes before updating locked versions. 6. Remove dependencies that are not required by the implemented runtime to reduce the supply-chain attack surface. 7. Perform installation and document parsing in an isolated, least-privileged environment without unnecessary credentials or host filesystem access. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
Findings (27)

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · .gitignore (reported line 66)May include surrounding context.

text
# 敏感配置
config_local.json
.env

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding

This second mismatch indicates the documented parser claims broader format support and richer extraction than is actually implemented, while some OCR backends are only placeholders. Such discrepancies can mislead operators into submitting sensitive drawings under false assumptions about processing, coverage, and safeguards.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

This second mismatch indicates the documented parser claims broader format support and richer extraction than is actually implemented, while some OCR backends are only placeholders. Such discrepancies can mislead operators into submitting sensitive drawings under false assumptions about processing, coverage, and safeguards.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
88% confidence
Finding

The skill advertises parsing workflows that inherently read user-supplied files and write structured output, but the manifest does not declare any explicit tool scope or permissions. This weakens reviewability and user consent because file access and persistence happen without being clearly bounded in the skill contract.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The manifest description forces Chinese-language interaction cues and documentation without indicating user opt-in or that the skill is intentionally limited to a Chinese-speaking or region-specific context. Under the stated policy, a fixed language or locale should either be optional for users or clearly justified.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The skill handles potentially sensitive architectural drawings and writes parsed contents to a structured JSON file, but the user-facing description does not warn about this persistence. In this context, that omission increases the risk of unintentional retention or exposure of confidential building plans, annotations, and material schedules.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

This Python file contains natural-language strings in Chinese for the module docstring and later user-facing output, but there is no indication that the user can choose a language or that the skill is intentionally limited to a Chinese-speaking context. Per the policy, forcing a specific language without opt-in is a natural-language policy violation.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The trigger keywords are generic phrases like '解析图纸', '读图', 'CAD解析', and 'PDF解析', which can match many normal user requests without clear scoping, consent, or format constraints. Because this is a tool skill that processes potentially sensitive engineering documents, overly broad invocation increases the chance the agent activates the parser on unintended files or in contexts where the user did not explicitly request document processing.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The module docstring says the parser supports DWG/DXF formats, but the actual DWG branch only contains placeholder comments and pass statements rather than a working conversion or parser. This is an active contradiction between the documented capability and the implemented behavior.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

This code file contains natural-language strings such as the module description, docstrings, CLI description, and status messages only in Chinese. Under the policy for language/locale handling, forcing a specific language without user choice is a natural-language policy violation unless the constraint is explicitly documented and justified.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The skill manifest describes a broader drawing-parsing engine covering DWG, DXF, PDF, and image formats with extraction of structured data such as paragraphs and material tables. In this implementation, only DXF parsing via ezdxf is actually performed, DWG conversion is stubbed out with no implementation, and the code writes a detail JSON file to disk as a side effect.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

This Python file contains user-facing natural-language strings exclusively in Chinese, including the module description and CLI help text. The skill does not offer any language selection or indicate that Chinese is a justified locale-specific requirement, which can violate language/locale policy for general-purpose skills.

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 file contains natural-language descriptions in Chinese only, including the module docstring and later CLI/help text, with no option for users to select another language or explanation that the tool is region-specific. The policy explicitly flags language or locale constraints when a skill forces a specific language without opt-in.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The print statements shown to users during normal execution and failure handling are hardcoded in Chinese, which enforces a specific language for runtime interaction. There is no mechanism for language choice and no documented justification for a Chinese-only interface.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The argparse description and argument help strings are user-facing natural language and are all provided only in Chinese. This creates a language restriction in the interface without offering user choice or documenting that the skill is limited to a Chinese-language context.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
93% confidence
Finding

The entire skill description and usage guidance are presented only in Chinese, including headings, feature descriptions, installation notes, and examples. Per the policy, forcing a specific language without user opt-in or a documented justification is 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
82% confidence
Finding

The natural-language metadata is entirely in Chinese, including the description and keywords, with no indication that users may interact in other languages or that the locale restriction is intentional. This can constitute a language-policy issue when a skill appears to impose a specific language without opt-in or explanation.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
78% confidence
Finding

This requirements file includes all human-readable comments in Chinese, with no indication that language choice is optional or that the skill is intentionally limited to a Chinese-speaking audience. Under the policy for natural-language content, forcing a specific language without opt-in can be a locale/language policy concern.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
88% confidence
Finding

Using a lower-bound specifier like 'pymupdf>=1.23.0' allows installs to resolve to different versions over time, which weakens reproducibility and can silently introduce vulnerable or incompatible releases. In a document-parsing skill that handles untrusted PDF/CAD inputs, dependency drift increases supply-chain and parser-exposure risk.

Content

Scanner excerpt · requirements.txt (reported line 2)May include surrounding context.

text
# 基础依赖(必需)
pymupdf>=1.23.0
ezdxf>=1.4.0
openpyxl>=3.1.0
numpy>=1.24.0

Unverifiable Dependency: pymupdf has 2 known advisory(ies) (CVE-2026-3029 (PyMuPDF has a path traversal in _main_.py); CVE-2026-3029 (PyMuPDF has a path traversal in _main_.py)), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
91% confidence
Finding

PyMuPDF has known advisories, and because the manifest does not pin a version, there is no way to determine from this file whether the deployed environment uses a fixed or vulnerable release. In a drawing/PDF parsing skill that likely processes attacker-controlled documents, unverifiable parser versions are more dangerous because file-format libraries are common exploitation targets.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
87% confidence
Finding

The unpinned 'ezdxf>=1.4.0' dependency permits non-deterministic installs and makes it hard to verify whether a deployed version contains security fixes or regressions. Because this skill parses CAD data, any parsing library should be tightly controlled to reduce exposure from malformed or malicious files.

Content

Scanner excerpt · requirements.txt (reported line 3)May include surrounding context.

text
# 基础依赖(必需)
pymupdf>=1.23.0
ezdxf>=1.4.0
openpyxl>=3.1.0
numpy>=1.24.0
matplotlib>=3.7.0

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
89% confidence
Finding

The requirement 'openpyxl>=3.1.0' does not guarantee a specific installed release, so vulnerable or breaking versions may be pulled in depending on environment and install time. This undermines patch verification and creates avoidable supply-chain uncertainty.

Content

Scanner excerpt · requirements.txt (reported line 4)May include surrounding context.

text
# 基础依赖(必需)
pymupdf>=1.23.0
ezdxf>=1.4.0
openpyxl>=3.1.0
numpy>=1.24.0
matplotlib>=3.7.0

Unverifiable Dependency: openpyxl has 2 known advisory(ies) (CVE-2017-5992 (Improper Restriction of XML External Entity Reference in Openpyxl); CVE-2017-5992 (Openpyxl 2.4.1 resolves external entities by default, which allows remote attack)), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
82% confidence
Finding

Openpyxl has historical advisories, and without an exact version pin the manifest cannot prove that installations are patched. The risk is lower here than for the primary PDF/CAD parsers unless spreadsheet parsing is actually part of the processing path, but the dependency remains unverifiable.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
86% confidence
Finding

Allowing any numpy version above a minimum reduces build reproducibility and makes security posture unverifiable across deployments. Even if numpy is not the primary parser, it is a widely used native-code dependency whose version should be controlled carefully.

Content

Scanner excerpt · requirements.txt (reported line 5)May include surrounding context.

text
pymupdf>=1.23.0
ezdxf>=1.4.0
openpyxl>=3.1.0
numpy>=1.24.0
matplotlib>=3.7.0

# OCR 模式选择(按需安装)

Unverifiable Dependency: numpy has 16 known advisory(ies) (CVE-2014-1859 (Numpy arbitrary file write via symlink attack); CVE-2021-41495 (NumPy NULL Pointer Dereference); CVE-2021-33430 (NumPy Buffer Overflow (Disputed)) +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
80% confidence
Finding

Numpy has multiple advisories, and the unpinned requirement prevents verification that a safe version is installed. While numpy may be less exposed than file parsers in this skill, unverifiable native dependencies still add avoidable supply-chain and memory-safety risk.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.