T08 · Insecure Dependencies
- Location
SKILL.md:21- Finding
Unpinned Third-Party Package Is Downloaded and Executed
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill is a coherent PDF parsing tool, but it asks users to run mutable third-party code and includes an unsafe test script that can turn parameters into executable Python.
Review carefully before installing. Use only with documents you are authorized to process, avoid running test.sh with untrusted arguments, and prefer a pinned, reviewed mcp-mineru version in an isolated environment before parsing sensitive files.
SKILL.md:21Unpinned Third-Party Package Is Downloaded and Executed
test.sh:4Arbitrary Python Code Injection Through Test Script Arguments
Skill selects an external model or provider that may use a different account or billing plan than the operator expects. Undisclosed model switches can cause unexpected cost or quota consumption.
# Capture to file
claude -p "Parse this PDF: /path/to/file.pdf" > /tmp/output.md
# Or use within a script that saves the result
The skill documents commands that read arbitrary local files and write extracted output, but it does not declare any permissions or allowed-tools scope. That omission can cause users or hosting systems to underestimate the file-system access the skill requires, increasing the chance of overbroad or implicit access to sensitive documents.
The command installs or runs an MCP server from an unpinned package reference, so the exact code executed can change over time. If the upstream package is compromised or a breaking release is published, users may execute malicious or unsafe code simply by following the documented command.
This example invokes code from an unpinned mcp-mineru package, making execution dependent on whatever version is current at runtime. That creates a supply-chain risk because a malicious or vulnerable upstream release would be trusted automatically.
Using uvx --from mcp-mineru without a fixed version allows silent drift in the code being executed. In a skill that processes local files, supply-chain compromise could expose document contents or lead to arbitrary code execution in the user's environment.
The example relies on an unpinned external package, so users cannot reproduce or audit the exact code path being run. Because the skill handles local documents and may download models, compromise of the package could affect both confidentiality and system integrity.
This invocation pulls and runs mcp-mineru without version pinning, exposing users to upstream tampering or unsafe updates. The risk is amplified because the tool is intended to parse local content and may have broad file access in practice.
An unpinned package execution path means the command may run materially different code at different times. That is a real supply-chain vulnerability, especially for a skill that users may run against sensitive PDFs and images.
The troubleshooting instruction still recommends an unpinned package invocation, so even recovery steps direct users toward non-reproducible code execution. Attackers often benefit from these copy-pasted operational commands because users trust them during setup and debugging.
Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.
### Why Files Get Deleted (MCP Method)
The MinerU MCP server uses Python's `tempfile.TemporaryDirectory()`, which automatically deletes files when the context exits. This is by design to prevent temporary files from accumulating.
### How to Preserve Files
The code hard-codes p_lang_list=["ch", "en"], which imposes a specific language/locale behavior on all users. This matches the policy concern for language or locale constraints when the skill does not offer a user-selectable option or clearly justify the restriction.
The script invokes uvx --from mcp-mineru without pinning an exact package version, so execution depends on whatever version is currently resolved from the package source. This creates a supply-chain risk: a compromised, typosquatted, or unexpectedly updated package could execute arbitrary code when the test script runs.
This markdown file instructs users to run PDF parsing on local documents and highlights extracted text, tables, and formulas, but it does not include any warning that input documents may contain sensitive or personal data. For markdown files, SQP-2 applies when descriptions omit warnings about behaviors that could affect user data or privacy.
The documentation explicitly states that models are downloaded on first use, which implies network activity and possible transfer of environment metadata such as IP address or package access patterns. Under SQP-2 for markdown files, network-related behavior that may affect privacy or system integrity should be disclosed with a user warning.
The manifest description and top-level documentation consistently frame the skill as a PDF parser focused on PDF documents. However, the supported formats section broadens the capability to JPEG, PNG, and other image formats, which is a semantic expansion beyond the stated manifest scope.
No suspicious patterns detected.