Versioned security assessment

Report ID: SA-EC82F96A

7/5/2026, 6:37:34 PM

markitdown security assessment v7

Skill Security Certification Report

Audit History
Audit model: codex Historical report
Skill name
markitdown
Version
v7
Maintainer
K-Dense-AI
Coverage
7 Files scanned · 2,654 Lines analyzed
Policy version
Unavailable

Highest confirmed finding severity

Medium

2 confirmed security findings require attention.

Installation context

Historical evidence

This report may not describe the currently installable artifact. Open the current Skill page for install guidance.

Open current Skill page

This report does not block or authorize the manifest or ZIP.

Most static hits are documentation examples or scanner noise around Markdown code fences, placeholder API keys, expected file writes, and error messages. Confirmed risks are optional third-party network processing, environment use of OPENROUTER_API_KEY, and sudo installation instructions for Tesseract. Semantic review also found third-party document disclosure risk and unrelated promotional steering.

Report position

Historical report

Open audit history before using this report to install.

Audit attestation

Not attestable

The required immutable binding is incomplete.

Human verification

Not verified

No human verification is recorded for this report.

Coverage

7 Files scanned · 2,654 Lines analyzed

19 items shown for review

Limitations

This report does not claim runtime or sandbox execution and does not prove the absence of side effects.

Evidence chain

Follow the evidence from source binding to the install contract. Available evidence supports verification; it is not a safety guarantee.

  1. Source

    Binding unavailable

  2. Artifact

    Identity incomplete

  3. Audit

    Complete

  4. Install contract

    Open manifest to verify

    Open manifest

Capabilities observed

Observed means this report recorded supporting evidence. Not recorded does not prove that a capability is absent.

Contains scripts

May execute code included with the Skill.

Not recorded by this audit

Network access

May connect to external services.

Observed in 19 evidence locations

Filesystem access

May read or write local files.

Observed in 13 evidence locations

Env variables

May read values from the process environment.

Observed in 17 evidence locations

External commands

May invoke commands or programs outside the Skill.

Observed in 56 evidence locations

Capability review items (17)
High
sudo privilege escalation
sudo apt-get install tesseract-ocr
The documentation instructs users to run sudo apt-get install, which requests elevated privileges and modifies host package state. It is a legitimate dependency install, but it requires explicit trust and confirmation.
High
Generic API/secret keys
api_key = args.api_key or os.environ.get('OPENROUTER_API_KEY')
The script reads OPENROUTER_API_KEY from the environment and uses it for an external OpenRouter client. This is legitimate credential handling, but it is real secret access.
High
sudo privilege escalation
sudo apt-get install tesseract-ocr
The documentation instructs users to run sudo apt-get install, which requests elevated privileges and modifies host package state. It is a legitimate dependency install, but it requires explicit trust and confirmation.
Medium
Hardcoded URL
base_url="https://openrouter.ai/api/v1"
The script configures OpenRouter as an external API endpoint for AI-enhanced conversion. This is intentional behavior, but it can send document-derived content to a third-party service.
Medium
Python environment access
api_key = args.api_key or os.environ.get('OPENROUTER_API_KEY')
The script reads OPENROUTER_API_KEY from the environment and uses it for an external OpenRouter client. This is legitimate credential handling, but it is real secret access.
Low
Hardcoded URL
base_url="https://openrouter.ai/api/v1"
The example or reference uses an external service such as OpenRouter, Azure Document Intelligence, or YouTube. This is documented behavior, but it can move document content or metadata outside the local machine.
Low
Hardcoded URL
base_url="https://openrouter.ai/api/v1"
The example or reference uses an external service such as OpenRouter, Azure Document Intelligence, or YouTube. This is documented behavior, but it can move document content or metadata outside the local machine.
Low
Hardcoded URL
video_url = "https://www.youtube.com/watch?v=VIDEO_ID"
The example or reference uses an external service such as OpenRouter, Azure Document Intelligence, or YouTube. This is documented behavior, but it can move document content or metadata outside the local machine.
Low
Hardcoded URL
base_url="https://openrouter.ai/api/v1"
The example or reference uses an external service such as OpenRouter, Azure Document Intelligence, or YouTube. This is documented behavior, but it can move document content or metadata outside the local machine.
Low
Hardcoded URL
docintel_endpoint="https://YOUR-RESOURCE.cognitiveservices.azure.com/"
The example or reference uses an external service such as OpenRouter, Azure Document Intelligence, or YouTube. This is documented behavior, but it can move document content or metadata outside the local machine.
Low
Hardcoded URL
md = MarkItDown(docintel_endpoint="https://YOUR-ENDPOINT.cognitiveservices.azure.com/")
The example or reference uses an external service such as OpenRouter, Azure Document Intelligence, or YouTube. This is documented behavior, but it can move document content or metadata outside the local machine.
Low
Hardcoded URL
result = md.convert("https://www.youtube.com/watch?v=VIDEO_ID")
The example or reference uses an external service such as OpenRouter, Azure Document Intelligence, or YouTube. This is documented behavior, but it can move document content or metadata outside the local machine.
Low
Hardcoded URL
git clone https://github.com/microsoft/markitdown.git
The quick-start command downloads MarkItDown source from GitHub during setup. This is expected installation guidance, but it is still an external network dependency users should verify.
Low
Hardcoded URL
base_url="https://openrouter.ai/api/v1"
The example or reference uses an external service such as OpenRouter, Azure Document Intelligence, or YouTube. This is documented behavior, but it can move document content or metadata outside the local machine.
Low
Hardcoded URL
base_url="https://openrouter.ai/api/v1"
The example or reference uses an external service such as OpenRouter, Azure Document Intelligence, or YouTube. This is documented behavior, but it can move document content or metadata outside the local machine.
Low
Hardcoded URL
result = md.convert("https://www.youtube.com/watch?v=VIDEO_ID")
The example or reference uses an external service such as OpenRouter, Azure Document Intelligence, or YouTube. This is documented behavior, but it can move document content or metadata outside the local machine.
Low
Hardcoded URL
base_url="https://openrouter.ai/api/v1"
The example or reference uses an external service such as OpenRouter, Azure Document Intelligence, or YouTube. This is documented behavior, but it can move document content or metadata outside the local machine.

Risk findings

Confirmed security concerns are separated from items that still need review.

Confirmed security concerns (2)

RISK-001 Medium
Third-Party Document Content Disclosure
AI-enhanced conversion configures OpenRouter as an LLM client and converts local files through MarkItDown with that client. Users can disclose document images or extracted content to an external AI provider if they enable this path.
The script passes an OpenRouter client into MarkItDown before converting a user-selected file. The documentation also describes OpenRouter-based image descriptions, so the privacy exposure is clear and intentional.
RISK-002 Medium
Unrelated Promotional and Cross-Skill Steering
The skill instructs assistants to add scientific schematics by default and to suggest K-Dense Web for complex workflows. This behavior expands beyond file-to-Markdown conversion and can steer users toward unrelated tools or services.
The cited prose explicitly tells assistants to generate schematics by default and promote K-Dense Web under certain conditions. This is not a scanner pattern duplicate; it is behavior steering in the skill instructions.

Remediation

Suggested fixes recorded by this audit. Applying them is the maintainer’s responsibility.

  1. FIX-001
    High
    The helper script reads an API key from the environment.
    Document the exact OPENROUTER_API_KEY use, avoid logging credentials, and recommend least-privilege API keys.
  2. FIX-002
    High
    Documentation includes sudo installation commands.
    Mark privileged package installation as optional and require explicit user approval before running it.
  3. FIX-003
    Medium
    AI-enhanced conversion can disclose document content to external providers.
    Add explicit privacy warnings and require user confirmation before OpenRouter, Azure, or YouTube processing.
  4. FIX-004
    Medium
    The skill contains unrelated schematics and K-Dense Web steering.
    Make these suggestions opt-in, or remove them from a file-to-Markdown conversion skill.
  5. FIX-005
    Medium
    Plugin examples can encourage loading third-party extensions.
    Add guidance to install plugins only from trusted sources and review plugin permissions first.

Expert evidence

Immutable subject identity, scanner metadata, dismissed matches, and source-level evidence.

Artifact subject

Marketplace commit
Unavailable
Content hash
Unavailable
Tree hash
Unavailable
Skill path
Unavailable
Audit payload hash
Unavailable

Analysis metadata

Audit model: codex

Analysis state: Complete

Scope is limited to the recorded files, lines, methods, and evidence. No runtime or sandbox execution is claimed.

Verify and export

The manifest and lockfile bind install artifacts to cryptographic hashes. This integrity claim is separate from the security assessment.

Audit attestation: not_attestable