Back to skill

Security audit

Markdown Converter

Security checks for vulnerabilities and agentic risk

Overview

This skill is a coherent document converter, but it relies on an unpinned runtime package and lightly documented cloud/plugin paths that users should review before use.

Install only if you are comfortable with the agent running the current resolved `markitdown` package on your files. For sensitive or regulated documents, prefer a pinned and reviewed version, run it in an isolated environment, avoid third-party plugins, and use Azure/URL-based conversion only when you intend to send content to those services.

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:9
Finding

Unpinned Third-Party Package Downloaded and Executed Through uvx

Content
View full analysis

Vulnerability Details

File Location: SKILL.md, lines 9–22
Vulnerability Type: Unpinned runtime dependency 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
text

### Technical Analysis

The documented commands use `uvx` to resolve, download, cache, and execute the third-party `markitdown` package at runtime. The package is referenced only by name, without an exact version, cryptographic hash, lock file, or verified artifact source.

Consequently, the code executed by the Skill can change after the Skill itself has been reviewed. If the upstream package, its publication account, package repository, or a transitive dependency is compromised, a later invocation could download and execute attacker-controlled code. This represents a supply-chain trust weakness rather than evidence that the current `markitdown` package is malicious.

The package processes potentially sensitive local documents and therefore may receive access to file contents. It also executes with the filesystem, network, and process privileges of the user or Agent invoking `uvx`.

### Attack Path

1. An attacker compromises the upstream package, a maintainer account, the dependency distribution channel, or a transitive dependency.
2. The attacker publishes a malicious release that can be selected by the unversioned `uvx markitdown` command.
3. A user asks the Agent to convert a supported document.
4. The Agent follows `SKILL.md` and invokes `uvx markitdown` without a pinned version or integrity verification.
5. `uvx` resolves and executes the attacker-controlled package code.
6. The malicious code runs with the invoking user's permiss
...[truncated 779 chars]
Remediation
View remediation

Remediation Suggestions

  1. Pin markitdown to a specifically reviewed version in every command, using syntax supported by the selected package runner.
  2. Lock all transitive dependencies and verify package artifacts with trusted cryptographic hashes or signatures.
  3. Install dependencies from an explicitly trusted package index rather than relying on implicit resolver configuration.
  4. Re-review and deliberately update the pinned version instead of automatically accepting newly published releases.
  5. Run document conversion in an isolated environment with:
    • Access limited to the specific input and output files.
    • No access to unrelated home-directory files or credentials.
    • Network access disabled unless conversion explicitly requires it.
    • A non-privileged user account.
    • CPU, memory, execution-time, and output-size limits.
  6. Avoid enabling third-party plugins unless each plugin and its dependency tree is separately pinned and reviewed.
  7. Document that the first invocation downloads executable dependencies so users can make an informed trust decision.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
Findings (11)

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The skill description promotes conversion of YouTube URLs, audio, images, ZIP archives, plugin-enabled inputs, and Azure Document Intelligence without warning that content, metadata, or derived text may be transmitted to third-party services or plugins. This omission can cause users to process sensitive material under false assumptions of local-only handling, leading to privacy, compliance, or data leakage incidents.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
94% confidence
Finding

The skill instructs users to execute uvx markitdown without pinning an exact package/version, which causes code to be fetched and run from an external source at invocation time. If the upstream package is updated maliciously, compromised, or changes behavior unexpectedly, users may execute unreviewed code with local file access during document conversion.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
94% confidence
Finding

This example again uses unpinned uvx markitdown, encouraging execution of whatever current version is resolved remotely. Because the tool processes attacker-controlled files, any compromised upstream release could turn a simple conversion step into arbitrary code execution or data exposure on the host.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
94% confidence
Finding

The unpinned uvx markitdown reference introduces supply-chain risk by resolving and executing the latest available package version. In a skill intended for broad file ingestion, this is especially dangerous because the invoked tool may receive sensitive documents and broad filesystem access from the user context.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
94% confidence
Finding

This stdin example still relies on unpinned remote execution of markitdown, so users may unknowingly run changed or malicious code. Since piped input can include sensitive binary documents, the blast radius includes both system compromise and exfiltration of document contents.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
94% confidence
Finding

Mentioning uvx markitdown as the core mechanism normalizes execution of an unpinned external package across all documented use cases. Because the tool handles many complex and parser-heavy formats, any malicious upstream update could exploit trusted execution paths and access sensitive inputs.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
94% confidence
Finding

This example repeats the pattern of fetching and executing markitdown without an exact version, extending the same supply-chain exposure. Users following copy-paste examples are likely to adopt unsafe defaults, increasing the chance of compromise when upstream packages change.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
94% confidence
Finding

The spreadsheet conversion example invokes unpinned uvx markitdown, which can execute whatever code is currently published upstream. Processing office files is a sensitive workflow, so a compromised dependency could steal document contents, environment variables, or credentials from the host system.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
94% confidence
Finding

This PowerPoint conversion example also uses an unpinned external package, preserving the same remote code execution and supply-chain risk. Because examples are likely to be reused verbatim, each occurrence materially reinforces insecure operational behavior.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
94% confidence
Finding

The stdin file-type hint example still resolves markitdown dynamically at runtime, making the conversion path non-reproducible and vulnerable to malicious or accidental upstream changes. Since stdin may contain sensitive documents from automated pipelines, compromise could affect both confidentiality and integrity.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
94% confidence
Finding

The Azure-backed PDF extraction example combines unpinned package execution with a workflow that may transmit document contents to an external service. This compounds risk: a malicious or altered package could mishandle secrets locally before or during transmission, and users are not alerted to the trust boundary.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.