Back to skill

Security audit

Markdown Converter 1.0.0

Security checks for vulnerabilities and agentic risk

Overview

The skill has a legitimate document-conversion purpose, but it asks agents to run a mutable third-party converter and optional plugins/cloud processing without enough scoping or disclosure.

Install only if you are comfortable with agents fetching and running the current markitdown package at use time. For sensitive documents, use a pinned and reviewed version in a restricted environment, avoid `--use-plugins` unless each plugin is trusted, and treat Azure/URL/audio features as potentially external processing.

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
SKILL.md:7
Finding
Unpinned Third-Party Package and Plugin Execution## Vulnerability Details **File Location**: `SKILL.md`, lines 7–19 and 35–40 **Vulnerability Type**: Unpinned dependency retrieval and execution **Risk Level**: Medium ### Vulnerable Code ```markdown Convert files to Markdown using `uvx markitdown` — no installation required. ## Basic Usage ```bash # Convert to stdout uvx markitdown input.pdf # Save to file uvx markitdown input.pdf -o output.md uvx markitdown input.docx > output.md # From stdin cat input.pdf | uvx markitdown ``` ``` The optional plugin-related commands are also documented at lines 35–40: ```markdown ```bash -d # Use Azure Document Intelligence -e ENDPOINT # Document Intelligence endpoint --use-plugins # Enable 3rd-party plugins --list-plugins # Show installed plugins ``` ``` ### Technical Analysis The Skill directs the Agent to execute `uvx markitdown` without specifying an exact package version, lockfile, integrity hash, or trusted package index. `uvx` can resolve, retrieve, cache, and execute a package from an external package repository. Consequently, the code executed at invocation time is not fully represented by the reviewed Skill and may change after publication. The `--use-plugins` option further expands the executable dependency surface to third-party plugins without specifying an allowlist, approved versions, or integrity controls. This does not establish that the current package or any plugin is malicious, but it creates a supply-chain exposure if an upstream release, package source, maintainer account, dependency, or installed plugin is compromised. ### Attack Path 1. An attacker compromises an upstream `markitdown` release, one of its transitive dependencies, a package-maintainer account, or a third-party plugin available in the execution environment. 2. The Agent follows the Skill and invokes the unversioned `uvx markitdown` command, optionally with `--use-plugins`. 3. `uvx` resolves and ...[truncated 1279 chars]
Remediation
## Remediation Suggestions 1. Pin `markitdown` to an exact, reviewed version in every command, using the version-selection syntax supported by `uvx`. 2. Maintain a reviewed lockfile or equivalent dependency manifest covering all transitive dependencies. 3. Require cryptographic hashes or repository integrity verification where supported. 4. Configure package resolution to use an explicitly trusted registry and reject unintended fallback indexes. 5. Test and approve dependency upgrades before changing the pinned version. 6. Disable third-party plugins by default. If plugins are necessary, allowlist individually reviewed plugins and pin their exact versions and hashes. 7. Run conversion in a restricted sandbox with minimal filesystem access, no unnecessary credentials, and network access disabled unless specifically required. 8. Process untrusted documents in an isolated temporary workspace and restrict output writes to an explicitly approved path. 9. Update the documentation to disclose that `uvx` may retrieve and cache dependencies rather than implying that no dependency installation or retrieval occurs.
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
Findings (11)

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding
The skill instructs users to run `uvx markitdown` without pinning an exact package version. This allows future package updates or a compromised upstream release to change behavior or introduce malicious code at execution time, creating a supply-chain risk in a workflow that processes untrusted files.

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding
This example again invokes `uvx markitdown` without version pinning, causing users to fetch and execute whatever version is current at runtime. In a skill intended for repeated automation, unpinned tool execution increases exposure to supply-chain compromise and non-reproducible behavior.

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding
Using `uvx markitdown` from stdin without a pinned version still executes code obtained dynamically from upstream. Because this tool handles arbitrary input formats, a malicious or compromised package could gain access to sensitive data being converted.

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding
The command on this line relies on an unpinned runtime package resolution for `markitdown`. That creates a trust-on-first-use dependency on the package registry and permits silent behavior changes or malicious updates in document-processing pipelines.

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding
The example instructs runtime execution of `markitdown` without constraining the version, which is a classic package supply-chain weakness. Since document conversion may be applied to sensitive local content, any malicious upstream change could directly affect confidentiality and integrity.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The skill advertises conversions for audio, YouTube URLs, plugins, and Azure Document Intelligence but does not clearly warn that some operations may transmit document contents or metadata to external services. This omission can mislead users into processing sensitive files under the assumption that conversion is purely local, creating confidentiality and compliance risks.

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding
This example repeats the same unpinned `uvx markitdown` invocation pattern. Repetition across the skill makes unsafe usage the default and increases the chance downstream users will operationalize a mutable dependency in production workflows.

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding
The skill recommends converting spreadsheets via an unpinned `uvx markitdown` command, which exposes users to arbitrary upstream package changes. Because spreadsheets often contain proprietary or regulated data, compromise of the converter can have meaningful confidentiality impact.

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding
This PowerPoint conversion example also executes an unpinned package at runtime. The risk is amplified by the skill context, which encourages routine use on many file types and therefore broadens the attack surface of a compromised release.

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding
The stdin/file-hint example still depends on an unpinned `markitdown` package, preserving the same supply-chain execution risk. Users may reasonably copy this directly into automation, making the vulnerability practical rather than merely theoretical.

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding
This Azure-backed example combines an unpinned package dependency with a workflow that may process sensitive scanned documents. A compromised or unexpectedly changed converter version could exfiltrate content, alter outputs, or misuse configured credentials/endpoints.

Static analysis

No suspicious patterns detected.